- ベストアンサー
WordPressの質問(q10082875)の続
質問掲示板を作成しているのですがSQLでページの遷移がうまくいきません。 何か不足しているコードがあるのでしょうか? ※該当コード echo '<input type="hidden" name="action" value="confirmationform">'; ※質問掲示板 https://wandbox.org/permlink/07uPWjVPmU6rwrVJ ※お問い合わせページ(遷移可能な元のコード) https://wandbox.org/permlink/8BiCLMilyhjCC2qp
- みんなの回答 (23)
- 専門家の回答
質問者が選んだベストアンサー
・0,1,2,3,4,5にそれぞれURLを当てはめるということでしょうか? そうですね。 以下のように設定してできそうです。 ---- $stamps = [ 'http://www.last.cfbx.jp/wp-content/uploads/2022/10/FIGURE-146070.jpg', 'http://www.last.cfbx.jp/wp-content/uploads/2022/10/FIGURE-146281.jpg', 'http://www.last.cfbx.jp/wp-content/uploads/2022/10/FIGURE-146282.jpg', 'http://www.last.cfbx.jp/wp-content/uploads/2022/10/9416845000734.jpg', 'http://www.last.cfbx.jp/wp-content/uploads/2022/10/bd3713656360f94acb07764cbb2b05a90006a26d160f9f9241f14fff7417fc51_01.jpg', 'http://www.last.cfbx.jp/wp-content/uploads/2022/09/FIGURE-145522.jpg', ]; ---- echoで表示しているところは$stampsをループ処理に変えてすっきりできます。 雑談掲示板の一覧表示にスタンプ画像を表示する方法は、 と言ってもまだそこを作られていないので、作られたときにわからなければ説明します。 ・画像URLを差し替えるように作ることは可能でしょうか? 上記の設定のURLを変えるだけで大丈夫そうです。
その他の回答 (22)
- dell_OK
- ベストアンサー率13% (766/5720)
・送信ボタンの外に画像の選択情報を配置していいものかこちらについてもアドバイス頂きたいです。 echo '<input type="hidden" name="select" id="select" value="0">'; 選択情報は<form></form>の中に配置していれば大丈夫です。 選択情報がどのようなものかを知るために、 type="hidden"をtype="text"にして動作を確認してみてください。 画像をクリックするとこのテキストボックスに数字が表示されます。 送信されるのはこの値になります。 保存する方法について。 送信されたものは名前やメッセージと同じように$_POSTに入っています。 この値を保持するカラムをテーブルに追加しておいてください。 カラム名はstampで、型はintでいいと思います。 ----追加変更箇所 $stamp=$_POST['select']; $sql = "INSERT INTO sortable(message,namae,stamp) VALUES(%s,%s,%d)"; $query = $wpdb->prepare($sql,$message,$namae,$stamp); ---- ちなみにカラム名にselectを使うことはできますが、 予約語のためおすすめしません。 できれば、フォーム側の名前もstampに変えて欲しいくらいですが、 たちまち動かなくなりそうな気がするのでそのままでいいです。 この値について少し話しておきます。 テキストボックスに表示された数字でわかると思いますが、 ひとつ目の画像から0で始まり、画像ごとに1ずつ増えた値になります。 PHPコードで固定パスで表示した画像に、まったく無関係の値が割り当てられています。 入力の際も表示の際も、この固定パスと値をPHPコードで関連付けて管理する必要があります。 質問者さまが言われていましたが、 「URLをデータベースに保存しておいてそれを取り出すのでしょうか…」 と言う方法もなくはないです。 方法はいくつかありますが、 どれが正解と言うことはありませんし、どれも一長一短な感じです。 スタンプ画像が追加変更削除されることがなければ、この値(数値)でいいと思います。 順番を変えることもできません。
補足
Q.画像をクリックするとこのテキストボックスに数字が表示されます。 送信されるのはこの値になります。 A.アドバイスありがとうございます。なるほどtype="text"にして送信の内容を確認できるのですね、覚えておきます。 Q.PHPコードで固定パスで表示した画像に、まったく無関係の値が割り当てられています。 入力の際も表示の際も、この固定パスと値をPHPコードで関連付けて管理する必要があります。 A.0,1,2,3,4,5にそれぞれURLを当てはめるということでしょうか? 以前RSSを$tnで切り替えた際に下記のようなdell_okさんにコードを教わったので、参考にしたいと考えています。 function get_template_key($template_number) { if (1 == $template_number) { $template_key = 'single_rss_feed1'; } elseif (2 == $template_number) { $template_key = 'double_rss_feed2'; } elseif (3 == $template_number) { $template_key = 'triple_rss_feed3'; } return $template_key; } Q.スタンプ画像が追加変更削除されることがなければ、この値(数値)でいいと思います。 順番を変えることもできません。 A.今のところは個数は変える予定はないのですが、スタンプ自体は変えることも考えています。 上記のように画像URLを差し替えるように作ることは可能でしょうか? 数字をデータベースに格納するのであれば、画像のURLを書き換えることも可能ではないかと考えています。 1 == $template_number 2 == $template_number 3 == $template_number ※雑談掲示板表示画面 http://www.last.cfbx.jp/informtion/ ※現在のデータベース https://imgur.com/pJCgCAp.jpg https://imgur.com/NjI0PX6.jpg
- dell_OK
- ベストアンサー率13% (766/5720)
・選択されたスタンプ画像の情報はどうやって保存するのでしょうか? 現在のコードではスタンプ画像選択処理が正常に動作しているように見えません。 スタンプ画像の参考サイトはどこでしょうか。
補足
回答ありがとうございます。 知恵袋で質問させて頂きました。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11273672086
- dell_OK
- ベストアンサー率13% (766/5720)
・<form>内に設置する場合はechoで問題ないでしょうか? echoでもそのままでも問題ありません。 ・データベースに格納する際にどちらが適しているのかアドバイスお願い致します。 データベースに格納することだけで言うと、どちらも同じです。
補足
アドバイスありがとうございます。 reCHPTCHA、送信フォーム内にスタンプ画像を設置することができたのですが、どのように送信してデータベースに保存すべきか分かりません。 選択されたスタンプ画像の情報はどうやって保存するのでしょうか? URLをデータベースに保存しておいてそれを取り出すのでしょうか… new-information.phpに最新のコードを載せているのですが、送信ボタンの外に画像の選択情報を配置していいものかこちらについてもアドバイス頂きたいです。 echo '<input type="hidden" name="select" id="select" value="0">'; ※最新コード https://wandbox.org/permlink/JXcXAcTgE8y5YCFL ※該当ページ http://www.last.cfbx.jp/informtion/
- dell_OK
- ベストアンサー率13% (766/5720)
・保存の際にデータが漏れてしまわないか不安だったので外部の階層を下げたところに設置しようと思ったのですがその点は大丈夫そうでしょうか 私が知る限り大丈夫です。 なぜデータが漏れてしまうと思われたのでしょうか。 私が知らない何かがあるのかも知れないので不安な理由を教えてください。 ・okwabeのように沈み込むような形でボタンの選択を実装したいと考えているのですが、チェック方式でないと難しいのでしょうか? スタイルシートを使えばたいていのことはできるはずです。 私はスタイルシートに詳しくないので説明できませんが、画像を沈み込ませるサンプルを探せば見つかると思います。 ・Javascriptでajaxのようなものは使えないと指摘が以前ありましたので、stamp.phpのコードが使えるのかという点もdell_okさんにお聞きしたいです。 それはWordPressとの相性で使えないと指摘されたのでしょうか。 そればかりはやってみないとわかりません。
お礼
修正してnew-information.phpでまとめることはできたのですが、送信<form></form>の外にスタンプ(画像)選択が出てしまっております。 <form>内に設置する場合はechoで問題ないでしょうか? スタンプ(画像)はinput type="radio"だと画像の左上にチェックマークがついて見にくい気がしていたので、画像全体をJavascriptで選択する方法を考えたのですが、データベースに格納する際にどちらが適しているのかアドバイスお願い致します。 okwabeのようにスタンプクリックを視覚的に識別できるようにしたいと考えております。 ※雑談掲示板サンプルページ http://www.last.cfbx.jp/informtion/ ※最新コード https://wandbox.org/permlink/4yrQSuundSuPNuST ※ラジオボタンのチェックマークデザインについて https://blanche-toile.com/web/php-form-radio-checkbox
補足
回答ありがとうございます。パーミッションさえ問題なければ大丈夫のようですね。 入力フォームの設計についてお聞きしたいのですが、formボタンでメッセージ、名前、スタンプを送信することは可能でしょうか? new-stamp.phpを考えてみたのですが、form要素の中にスタンプが配置できないためどうすれば良いか分かりません。 <button>send</button>でメッセージと名前も送信できるのであればまとめることも可能な気がしたのですが、formとbuttonの違いを理解できていないため良くわかっていません… ※stamp.phpサンプルページ http://www.last.cfbx.jp/%e3%82%b9%e3%82%bf%e3%83%b3%e3%83%97/ ※該当コード https://wandbox.org/permlink/MjHzUcx0nY2WbJ0v
- dell_OK
- ベストアンサー率13% (766/5720)
・送信と保存と削除はファイルを分けるべきでしょうか? 送信と保存は同じでいいと思います。 削除は実行するタイミングが違うので別になります。 削除はcronでいいのですよね。 ・また掲示板のメッセージ削除コードを実装する前に画像とスタンプの保存コードを先に考えるべきでしょうか? そうですね。 削除はあとでいいような気がします。 スタンプ画像は質問者さまが直接アップロードすればひとまず完了だと思います。 WordPressで画像をアップロードすると、 年月フォルダに保存されて面倒なので、 一時的にこれを解除しておいた方がいいと思います。 掲示板の投稿欄にそれらの画像を表示して選択できるようにし、 選択されたものを保存するようにしてみてください。 スタンプ画像はラジオボタンとセットで配置します。 ラジオボタンの名前はすべて同じにしておきます。 ラジオボタンの値は1、2、3、・・・としておきます。 ラジオボタンの値が送信されてくるのでそれを保存します。 ラジオボタンはのちのちスタイルシートで見えないようにすればすっきりします。 その前に、テーブルにその値を保存する列を追加しておいてください。 このOKWAVEの質問の時にも同じような選択肢があります。 「暇なときにでも」「困ってます」「すぐに回答を!」 画像はありませんが考え方は同じです。 スタイルシートを無効にするとラジオボタンが表示されます。 ただOKWAVEのラジオボタンにはvalueがなさそうなので、 ちょっと面倒なことをしているのかもしれません。 ・今回はメッセージ、名前、スタンプ、画像最大2件を想定しているため、SQLで同時に削除を実行できるのかというのが重要になりそうです。 メッセージ、名前、スタンプはひとつのレコードに保存されているので、 まとめて削除されます。 channel-chat.phpを見ましたが、項目ごとに削除するものではありません。 RSSと同じです。 雑談掲示板のテーブルに合わせるとこんな感じです。 ---- $sql = "DELETE FROM sortable WHERE TS < %s"; ----
補足
A.アドバイスありがとうございます。保存の際にデータが漏れてしまわないか不安だったので外部の階層を下げたところに設置しようと思ったのですがその点は大丈夫そうでしょうか果てあ 削除はcronで行う予定です。 画像は以前パスが通らなかったため階層を意図的に変えているためフォルダを自作してそちらから読み込むようにいたします。 Q.掲示板の投稿欄にそれらの画像を表示して選択できるようにし、 選択されたものを保存するようにしてみてください。 スタンプ画像はラジオボタンとセットで配置します。 ラジオボタンの名前はすべて同じにしておきます。 ラジオボタンの値は1、2、3、・・・としておきます。 ラジオボタンの値が送信されてくるのでそれを保存します。 ラジオボタンはのちのちスタイルシートで見えないようにすればすっきりします。 A.スタンプに関しては知恵袋でアドバイス頂きながら作成しているのですが、質問掲示板を想定して作成したのでそのまま使えるのかわかりません。 okwabeのように沈み込むような形でボタンの選択を実装したいと考えているのですが、チェック方式でないと難しいのでしょうか? Javascriptでajaxのようなものは使えないと指摘が以前ありましたので、stamp.phpのコードが使えるのかという点もdell_okさんにお聞きしたいです。 ※stamp.phpにjavascriptを含めて作成しています。 https://wandbox.org/permlink/wq8VIHGL41HVeU2O
- dell_OK
- ベストアンサー率13% (766/5720)
・インデックスを作成するべきでしょうか? そうですね。あった方がいいと思います。 それと、定期的に削除される予定でしたら日時の項目も追加してください。 削除する際の条件として必要になってきます。 件数だけみて、IDがいくつより小さいものは削除と言う方法もなくはないですが、 そんな方法でやっているのを私は今まで見たことがありません。 こんな感じになるかなと言うのを画像添付しておきます。 ・前回はインデックスの種類にBTREEを設定したのですが、こちらはどのような役割があるのでしょうか?RSSテーブル作成時に聞きそびれていた為、知りたいです。 私もよく知りません。 こちらを読んでみてください。 https://dev.mysql.com/doc/refman/5.6/ja/index-btree-hash.html インデックスのタイプにはBTREEとHASHしかないようです。 省略して作成しても自動でBTREEになります。 HASHはあまり使いどころがないのかも知れません。 役割で言うと、検索で役立つ仕組みのようです。 https://qiita.com/kiyodori/items/f66a545a47dc59dd8839 ・もし実装するのであれば$POSTで最低限のチェックをするべきだとアドバイス頂きました。 その方法でいいと思います。 関数名はそれらしい名前に変えてください。
補足
アドバイスありがとうございます。参考画像のように変更させていただきました。 BTREEのほうが高速でデータベースからデータを操作してくれるようですね。 送信と保存と削除はセキュリティのために別ファイルにしていきたいのですが、画像と、スタンプの保存をする際にどうすべきか悩んでおります。 storage_rss.phpをRSSのために作成した際は下記のコードで削除したのですが、今回はメッセージ、名前、スタンプ、画像最大2件を想定しているため、SQLで同時に削除を実行できるのかというのが重要になりそうです。 すべて送信ボタンでデータベースに関数を送るため$postでまとめることも可能だと考えています。 channel-chat.phpに保存と削除をまとめてみたのですが、 dell_okさんから見て送信と保存と削除はファイルを分けるべきでしょうか? また掲示板のメッセージ削除コードを実装する前に画像とスタンプの保存コードを先に考えるべきでしょうか? // 古いRSSの削除 function delete_old_rss($rss_table_name)// ※接続オブジェクト、RSSテーブル名を受け取る { global $wpdb; $sql = "DELETE FROM {$rss_table_name} WHERE date < %s"; $delete_date = date('Y-m-d H:i:s', strtotime('-1 week')); // ※削除対象日付 $query = $wpdb->prepare($sql, $delete_date); $wpdb->query($query); return $delete_date; // 削除対象日付を返す } ※現在のファイル https://wandbox.org/permlink/ha08y0DKi3MllPzG
- dell_OK
- ベストアンサー率13% (766/5720)
・functions{}は外しても良いでしょうか? そうですね。 それはどちらでもいいと思いますが、 私なら関数にしておきます。 指摘された人の意図はわかりませんが、 display~と言う名前はなにかしらを表示する機能のように感じるので、 「表示処理で保存するのか?」と思われたのかも知れませんね。 ・データの有無を確認する場合はもしデータが存在する場合は格納するという事になると思うのですが 今のところデータの有無を確認する必要はないと思います。 どのようなことをしたいのでしょうか。 ・下記のコードをSQLにあわせて使うことは可能でしょうか? 関数をなくしたいのであればこんな感じで試してみてください。 ---- if(!empty($_POST['message'])){ $message = $_POST['message']; $namae=$_POST['namae']; $sql = "INSERT INTO sortable(message,namae) VALUES(%s,%s)"; $query = $wpdb->prepare($sql,$message,$namae); } ----
補足
A.回答ありがとうございます。messageとnamaeを保存際にデータの有無の判定が必要だとアドバイス頂いたので、SQLで判定するコードを考えておりました。 コードを一部修正したところ保存することができました。 $wpdb->query($wpdb->prepare($sql,$message,$namae)); ※雑談掲示板 https://wandbox.org/permlink/KzfVIv3tB7MZiVLE phpmyadminを確認してみたところ警告文のようなものが出ていたのですが、以前のRSSのようにカラムにインデックスを作成するべきでしょうか? RSSを作成したときはインデックス名UKで設定していたのですが、informationの略でIFとかに設定しようと考えています。 前回はインデックスの種類にBTREEを設定したのですが、こちらはどのような役割があるのでしょうか?RSSテーブル作成時に聞きそびれていた為、知りたいです。 現在の選択には、ユニークなカラムが含まれていません。グリッド編集、チェックボックス、編集、コピー、削除機能は利用できません。 ※テーブル画像 https://imgur.com/nF50wsN.jpg https://imgur.com/5juMNDv.jpg _________________________ 指摘いただいた内容ですが、ユーザ定義関数 display_discussion_form() が、どこからも呼び出されていないように見えるとのことでした。 もし実装するのであれば$POSTで最低限のチェックをするべきだとアドバイス頂きました。 if ($_POST) display_discussion_form();
- dell_OK
- ベストアンサー率13% (766/5720)
・下記のようにパーマリンクを変更してみたのですが保存されていません… そうですね。 保存処理の関数display_discussion_form()がどこからも呼ばれていません。 postで送信されてきたか判定して、 そうであればこの関数を呼ぶようにしてみてください。
お礼
SQLについての知識不足で申し訳ないのですが、調べたところPDOのコードばかりでSQLに変換する際にどうしても分からないためdell_okさんにお聞きしながらでないとコードを修正する力がありません… POSTを判定するようなコードを見つけたのですが、下記のコードをSQLにあわせて使うことは可能でしょうか? PDOで使われているコードですが、もし代用出来るのであればどのような形に変化させるのかアドバイスお願い致します。 if(!empty($_POST['inputName'])){ $stmt->bindValue(':ONAMAE', $_POST['inputName'], PDO::PARAM_STR); $stmt->execute(); } ※参考サイト https://cbc-study.com/training/advanced/page6 ※雑談掲示板 https://wandbox.org/permlink/i5ORzwSXco70Rv5h
補足
アドバイスありがとうございます。 (display_discussion_form)の関数でPOSTデータを DBに格納するというのは良くないと指摘を頂いたのですが、同一ファイルないであればfunctions{}は外しても良いでしょうか? データの有無を確認する場合はもしデータが存在する場合は格納するという事になると思うのですが、調べても該当コードは出てこず… 具体的にどうすれば良いのか分かりません… アドバイスお願い致します。
- dell_OK
- ベストアンサー率13% (766/5720)
・原因を考えてみたのですが、下記のコードに違和感を感じたのですが他の個所は特に思い当たりません。 <form action="<?php echo esc_url( home_url( '/entry/' ) ); ?>" この部分の entry はテンプレートとなっている固定ページのパーマリンクです。 雑談掲示板に設定しているパーマリンクを記述してください。 ただ、それだけではうまくいかないです。 自分自身に送信することになるので、 保存も同じPHPファイルに記述することになってくると思います。
補足
アドバイスありがとうございます。下記のようにパーマリンクを変更してみたのですが保存されていません… ※雑談掲示板 https://wandbox.org/permlink/i5ORzwSXco70Rv5h ※該当パーマリンク http://www.last.cfbx.jp/informtion/
- dell_OK
- ベストアンサー率13% (766/5720)
・自分では原因がよくわからかったのですが、エラーの原因はわかりますでしょうか? エラーは404でしたでしょうか。 それは前にもお話ししました。 これのせいです。 ---- if(!$noindexaccess){ header("HTTP/1.0 404 Not Found");exit(); } ---- phpでは変数に何も設定していないと判定の時にfalseに評価される値になっています。 前に ! が付くと否定の意味になり、falseはtrue、trueはfalseの意味になります。 $noindexaccessが未設定であればfalseであり、それを否定するとtrueになります。 ifでtrueと判定されたため、エラー404を発生させています。 $noindexaccessにtrueを設定すれば、その否定でfalseとなりエラーにならなくなります。
補足
説明ありがとうございます。理解することができました。
お礼
回答期限が切れてしまいました。 下記のURLから引き続きお願い致します。 https://okwave.jp/qa/q10103578.html
補足
回答ありがとうございます。 配列にまとめたものを格納する数字とどのように結びつけて良いのかわからないのですが、格納した数字はどのように取得するのでしょうか? SQLの数字を取得する方法がわからないため、困っております。 Javascriptでは教えていただいたのですが、PHPで可能であればそちらを使用したいです。 まだJavascriptへの理解が浅いため不安要素は減らしておきたいです。 以前のRSSの$template_numberの時のように1=,2=,3=でまとめられるのではと考えていたのですが、データベースstanpカラムに格納された数字は関数だと思いますので、$stamp=1,2,3,4,5とするのは間違っていますし… 以前dell_okさんにアドバイス頂いたフォーム側の名前は下記のコードで書き換えました。 ※フォーム側の名前をstampに変えたもの https://wandbox.org/permlink/A4VLYzAR2h4uYYRh ※Javascriptで格納する方法 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11275441906