- ベストアンサー
WordPressの質問に関するアドバイスをお願いします
- WordPressの質問についてアドバイスをお願いします。コードを1つにまとめる方法やキーの隠し方について教えてください。
- WordPressの質問についてアドバイスをお願いします。キーを隠す方法についてモジュール作成や環境変数の使用について調べましたが、よく理解できませんでした。
- WordPressの質問に関してアドバイスをお願いします。モジュール作成や環境変数の使用など、キーの隠し方について教えてください。
- みんなの回答 (26)
- 専門家の回答
質問者が選んだベストアンサー
【2023/1/16 ID】 ・IDと iPの話に戻るのですが、投稿IDを取得して表示する方法についてのアドバイスも頂けると助かります。 投稿IDは無関係です。 いえ、言われている投稿IDとはなんのことでしょうか。 私にはWordPressの投稿記事のIDのことのように聞こえているので質問を理解できないでいます。 投稿記事IDを取得したとしても、それは質問者さまの投稿記事IDなので、 掲示板に書き込みした人を識別することはできません。 そうなると、掲示板への投稿者のIDでしょうか。 つまり、WordPressにログインしたユーザーのIDです。 ログインしていない投稿者にはIDはありませんので取得できません。 もしかするとですが、掲示板投稿のIDでしょうか。 それはつまり、先ほど回答した、自動振りした番号のことになります。 これはただの番号なので、同じ人が掲示板投稿しても次々新しい番号が振られるので役にたちません。 IPアドレスについてですが、表示はしないとしても、 管理上データベースには保存する必要があります。 まず、掲示板のデータに投稿してきたIPアドレスを保存しておきます。 それから、荒らし判定したIPアドレスは「荒らしIPアドレステーブル」に登録します。 投稿してきたIPアドレスが「荒らしIPアドレステーブル」に登録されているものであれば、 エラーにするようにすれば投稿を禁止できます。
その他の回答 (25)
- dell_OK
- ベストアンサー率13% (776/5747)
【データベース 2023/1/12】 ・親と子を分ける場合どのようにするのかキーで分けるのかよく理解できていないのですが、アドバイス頂けると助かります。 WordPressのコメントと同じ構成でいいと思います。 ここでは掲示板のデータも仮に「コメント」と呼ぶことにします。 ~~~~ コメント番号(主キー) コメント投稿日時 コメント内容 親コメント番号(新規コメントの場合は0として親がないことを意味する) ユーザーID ~~~~
補足
【データベース 2023/1/12】 A.アドバイスありがとうございます。参考にいたします。
- dell_OK
- ベストアンサー率13% (776/5747)
【Wandbox 2023/1/12】 ・wandboxでは<script>タグを入れるとエラーが起きてしまうため それはPHPコードかスクリプトにエラーがあるためだと思います。 Wandboxで以下のコードを実行させてもエラーにはならないため<script></script>が直接の原因ではないような気がします。 ---- <?php /* PHPコメント */ echo "PHP出力"; ?> <!-- HTMLコメント --> HTML出力 <script> /* スクリプトコメント */ スクリプト </script> ---- サーバーにアップロードされる時には正しくされているのでしたら私が心配する必要はありません。 ただ、動作確認のためにコードをいただいても、実際に動かしているものと違うことになるので、私が勝手に想像して手直しする必要があったりします。 HTMLやスクリプトを調整してサーバーにアップロードするのは危険な気がしますので、代替案として以下のようにしていただくのはどうでしょうか。 スクリプトの出力をPHPのコメントにしてしまう方法です。 これならエラーにならないと思います。 注意点としては、<script>~</script>の中に */ を記述しないことです。 でないとそこでPHPコメントが終了してしまうからです。 ---- <?php /* Wondboxエラー回避コメントアウト開始 ?> <script> スクリプト </script> <?php Wondboxエラー回避コメントアウト終了 */ ?> ---- これが目印になって、私は以下のようにすることで簡単に動作確認ができます。 質問者さまもこのようにしてサーバーにアップロードすれば、ページに直接影響する<script></script>を直さなくてもよくなります。 とは言っても、修正箇所だけWordPressで直接手直しされてて、ファイル全体をアップロードされていないのかも知れませんが。 ---- <?php /* Wondboxエラー回避コメントアウト開始 */ ?> <script> </script> <?php /* Wondboxエラー回避コメントアウト終了 */ ?> ---- GitHubでの共有がうまくできてたらこのような手間をかけていただくことはなかったのですが、私の勉強不足でいまだに環境ができていなくて申し訳ないです。
補足
【Wandbox 2023/1/12】 A.アドバイスありがとうございます。下記のようにコメントアウトを消してみたり、コードを単体で試してみたのですがエラーがどうしても起きてしまいます… <?php /* Wondboxエラー回避コメントアウト開始 ?><?php Wondboxエラー回避コメントアウト終了 */ ?> githubの件はこちらから無理にお願いする形になってしまったので申し訳ないです。
- dell_OK
- ベストアンサー率13% (776/5747)
【お問い合わせ 2023/1/11】 以下の点について把握されていますか。 contact-input.php scriptタグがおかしいです。 これは動作しないのではないでしょうか。 ----指摘箇所 <scrip //.g-recaptcha タグの data-callback 属性で指定したコールバック関数の定義 var myAlert = function(response) { alert("チェックボックスがチェックされました!"); }; </scrip> ----訂正 <script> //.g-recaptcha タグの data-callback 属性で指定したコールバック関数の定義 var myAlert = function(response) { alert("チェックボックスがチェックされました!"); }; </script> ---- contact-input.php script終了タグがおかしいです。 そのことはapi.jsの参照にはおそらく問題はありません。 ですが、終了タグがないと、これ以降に記述されているHTMLがスクリプトとして解釈されるのでよくありません。 あと、参考サイトのまま記述されているのかも知れませんが、参考サイトのコードにも問題があって、スクリプト内にHTMLコメントが入っているので、外に出すか、スクリプトコメントにした方がいいです。 <script src="">で参照するとブラウザが無視してくれるのを利用した作者の意図かも知れませんが、あまりいい書き方ではないような気がします。 http://html5.cyberlab.info/elements/scripting/script-src.html ----指摘箇所 <script src="https://www.google.com/recaptcha/api.js" async defer><!-- API の読み込み --><script> ----訂正(HTMLコメントを外に出す) <script src="https://www.google.com/recaptcha/api.js" async defer></script><!-- API の読み込み --> ----訂正(スクリプトコメント) <script src="https://www.google.com/recaptcha/api.js" async defer>/* API の読み込み */</script> ---- contact-confirm.php <script>と</script>がありません。 ---- <script> //2重送信防止スクリプト var flg_Submit = false; function Fnk_DoubleSubmit(){ if(flg_Submit){ alert("処理中です。");return false; } else{ flg_Submit = true;return true; } } </script> ----
補足
【お問い合わせ 2023/1/11】 A.修正ありがとうございます。申し訳ありません、※で説明を入れておくべきでした。 wandboxでは<script>タグを入れるとエラーが起きてしまうためあえて</script>として閉じないようにしています。 HTMLコメントについて勉強になりました。 SQLについてお聞きしたいのですが、知恵袋形式で作成する場合。親(質問)・子(回答)・孫(以降のやりとり)まで作成する形になるようです。 データベース登録にコメント番号とコメントをしたユーザーIDとコメント内容が必要だということに気が付きました。 ユーザーIDは連続で投稿するなどのあらし行為をする方に対して一時的にコメントができないようにするための機能として考えています。 親と子を分ける場合どのようにするのかキーで分けるのかよく理解できていないのですが、アドバイス頂けると助かります。 今回新規でテーブルを作成することになるのですが、以前dell_okさんからアドバイスいただいたことをもとに考えてみました。 テーブルは手動で作成する、create tableはphpでは使えないという事を教わった記憶を基に作成しています。 contact-input.phpの38行目,contact-confirm.phpの42行目を変更して投稿IDを取得してどの投稿に対しての掲示板コメントなのかを判断するように変更しました。 掲示板は固定ページで作成予定ですが、post_idは取得可能だと調べた結果わかりましたので、IDは使用できそうです。 問題は最近の投稿コメントと混在してしまう危険なのですが、対応策が思いついていない状態です.... 投稿コメントと掲示板コメントの同時実装が難しそうであれば荒らしの対策としてSQLで掲示板コメントしてる方のIPを取得してこちらで制限する方法も考えております。 contact-input.phpで入力してもらった質問をcontact-confirm.phpに渡して確認してもらい問題なければ送信して、display_bbs.phpでSQLデータ保存をして、データベースから 質問掲示板を出力する流れになります。 回答者の方は確認なしで送信することを前提に作る予定です。レスポンスの内容は5日間でcronを使い強制削除するように考えています。 参考サイトを見ながら作成したため間違っているかもしれないので、おかしなコードがありましたらアドバイスお願い致します。 sortableというテーブルを作成したうえで、データをSQLに登録する前提です。 <?php function display_question_form() { global $wpdb; //input.phpの値を取得 $message = $_POST['message']; $comment_id=$_POST['comment_id']; $user_id=$_SESSION['user_id']; $post_id=$_POST['id']; $user_id=htmlspecialchars($user_id,ENT_QUOTES,'UTF-8'); $sql = "INSERT INTO sortable(message,user_id,comment_id) VALUES(:message,:user_id,:comment_id)"; // テーブルに登録するINSERT INTO文を変数に格納 VALUESはプレースフォルダーで空の値を入れとく $query = $wpdb->prepare($sql); } ?> ※変更後のコード(※<script>~</script>はエラーになるためタグを閉じていません) https://wandbox.org/permlink/O56KrWaVlx7kavBP ※参考サイト(データ送信から保存まで) https://qiita.com/ryouya3948/items/6928c89607cf4eaa72a0 ※参考サイト(フォームからデータ送信まで) https://log.dot-co.co.jp/php-db-register/ https://kasumiblog.org/php-db-form-post-register/
- dell_OK
- ベストアンサー率13% (776/5747)
【掲示板 2023/1/10】 ・入力フォームと同じファイルにdisplay.phpは読み込ませても問題ないでしょうか? 読み込ませることについては問題ないと思いますが、その必要があるようには思えません。 display.phpは記事表示用のものとし、それとは別に掲示板用のdisplay_bbs.php(仮名)を用意した方がいいのではないでしょうか。 display.phpの中に掲示板にも使えるものがありますか。 もしあるのでしたら、それはfunctions.phpに移動させてもいいのかも知れません。 その前に、2種類の掲示板で共通の表示処理がなければ、それぞれのファイルに直接その処理を書いてもいいような気がします。 データベースのテーブルも2種類の掲示板それぞれで作る予定であれば、なおさらそうです。 のちのち同じようなコードになったりしてまとめたいと言うことになればそのときにまとめてもいいと思います。 あと、同時に作らずに、まずは2種類のうちより簡単そうな雑談掲示板から始めたらいいと思います。
補足
【掲示板 2023/1/10】 A.アドバイスありがとうございます。確かにdisplay.phpの内容は関係ないので別途display_bbs.phpを用意するように致します。 今のところdisplay.phpから使うような処理はなさそうです。 以前お伝えしていたものですが考えた結果、雑談も質問も少しのhtmlを変えるだけでその他はあまり変わらないような構成にしたいと考えております。 雑談の方も画像を投稿できるように最大のレスポンスを200件で考えているのですが、雑談のほうは入力画面なしで投稿できるようにしたいです。 入力フォームはお問い合わせフォームと同じコードでもいいと考えているのですが、確認画面がそのまま使えるのかわかりません。 掲示板は以下の流れで作成する予定です。 データ入力→確認→保存→質問掲示板表示 保存を入力の後にしないのは確認画面で訂正したい方が戻る選択をした場合、無駄なデータが蓄積してしまうため、confirm.phpで確認後に データベースに保存したいと考えております。 confirm.phpの送信データをメールアドレスではなくデータベースに保存する際に必要なコードなどありますでしょうか? コードの変更なくそのまま使えるのではないかと思っているのですが… ※掲示板コード https://wandbox.org/permlink/ap1kJJKh4bLPpOqD ※メールフォームコード https://wandbox.org/permlink/hxlS1WJHbJFXXVfr ※display_bbs.php(データベースに入力内容の保存) <?php function display_question_form() { //input.phpの値を取得 $message = $_POST['message']; global $wpdb; $sql = "INSERT INTO sortable(message) VALUES(:message)"; // テーブルに登録するINSERT INTO文を変数に格納 VALUESはプレースフォルダーで空の値を入れとく } ?>
- dell_OK
- ベストアンサー率13% (776/5747)
【掲示板 2023/1/9】 ・各ファイル名はお問い合わせフォームと異なるように設定いたします。 先にそれをやられた方がいい気がします。 ・以前メールの送信部分だけ取り外して使うことを考えた際にdell_okさんにお聞きしたところ1工夫必要だとおっしゃられた記憶があるのですが、メール送信部分のみを削除するだけで代用可能でしょうか? 当時どのような考えで回答したか覚えていません。 お問い合わせフォームを元に掲示板を作るのは難しい気がします。 掲示板の投稿内容はデータベースへ保存する必要がありますし、 掲示板はコメントの投稿のような仕組みに近いのではないでしょうか。 掲示板の一覧が表示されているところで投稿ができる感じです。
補足
【掲示板 2023/1/9】 A.回答ありがとうございます。 ファイル構成を考えてみました。2つともコードはほぼ同じにする予定ですが、窓口は2つほしいため別々に固定ページのテンプレートにする予定です。 質問掲示板(ヤフー知恵袋のようなもの) main.php (index.phpの役割 ファイルの統括) entry-form.php (入力フォーム) confirmationform.php (確認画面) sedcomments.php (送信完了) stringcode.php (文字列チェック) 雑談掲示板 core.php (index.phpの役割 ファイルの統括) enter-information.php (入力フォーム) identify.php (確認画面) finish.php (送信完了) rerification.php (文字列チェック) _______________________ 通常の掲示板とイメージが異なるかもしれませんが、ヤフー知恵袋のような質問と回答ができるような雑談掲示板を考えております。 入力→保存→確認→雑談コメント一覧のようなファイル構成にする予定です。 1点お聞きしたいことがあります。保存する際にデータベースにSQLでつなぐ必要があるのですが、global $wpdb;を使う場合階層の低いdisplay.phpから読み込ませる ほうがセキュリティ上よさそうな気がします。 入力フォームと同じファイルにdisplay.phpは読み込ませても問題ないでしょうか? stamp.phpはgoo質問を参考に作成したもので、image-up.phpは画像を複数アップロードするために作成したものです 入力フォームと合わせて送信となります。 ※現在のコード https://wandbox.org/permlink/dYgrTscFImNYanAQ ※質問掲示板参考サイト https://kasumiblog.org/php-db-form-post-register/ ※画像アップロード参考サイト https://qiita.com/ryouya3948/items/66294cb445663f2a9d95 ※参考イメージ https://imgur.com/PvH9B2H.jpg
- dell_OK
- ベストアンサー率13% (776/5747)
【reCAPTCHA 2023/1/5】 こんな感じでしょうか。 ---- echo '<label>お問い合わせ内容</label><span>※</span><br />'; echo '<textarea name="message" cols="40" rows="10" required>'.$message_value.'</textarea>'; echo '<div>'; echo '</div>'; echo '<div class="g-recaptcha" data-sitekey="6Lff73YjAAAAABhCyWMuUVFWXNDGSUfNpg8Y1vxD" data-callback="myAlert">'; echo '</div>'; echo '<input type="submit" value="送信する" id="send" disabled>'; echo '<input type="hidden" name="action" value="confirm">'; echo '</div>'; echo '</form>'; ?> <script> //.g-recaptcha タグの data-callback 属性で指定したコールバック関数の定義 var myAlert = function(response) { alert("チェックボックスがチェックされました!"); document.getElementById("send").disabled = false; }; </script> <script src="https://www.google.com/recaptcha/api.js" async defer><!-- API の読み込み --></script> ---- formタグはもともとあるものだけでよくて、 その中にチェックボックスを配置しました。 送信ボタンはidを設定して、初期表示で使用不可にしました。 チェックボックスがチェックされたら送信ボタンを使用可能にしました。 スクリプトの終了タグが不正でした。 </script>
お礼
メールフォームを掲示板の質問文の入力フォームとして使いたいと考えているのですが、メール送信の機能は取り外そうと考えています。各ファイル名はお問い合わせフォームと異なるように設定いたします。 以前メールの送信部分だけ取り外して使うことを考えた際にdell_okさんにお聞きしたところ1工夫必要だとおっしゃられた記憶があるのですが、メール送信部分のみを削除するだけで代用可能でしょうか? ※メールフォーム https://wandbox.org/permlink/cq646Qmq2HjHm0CX ※掲示板用に一部削除 https://wandbox.org/permlink/w1pOPSQlm7V1Vxvx
補足
修正ありがとうございます。<form>を1つに減らすと機能しないのではないかと考えていたのですが勉強になりました。 掲示板を作成していきたいのですが、先に考えているイメージをお伝えしておきます。 質問は画像必須ではなく画像も複数アップロードできるように考えています。 質問文は20文字以上の制限で一番下にgoo質問で使われているスタンプのようなものを実装したいです。 スタンプの意図ですがユーザー側に一目で大体の内容がわかるように考えました。 掲示板は2つ、3つ負荷を考えて数を増やす予定です。 掲示板の内容ですが別々のものを2つ想定しています。 1つめの雑談掲示板は500レスポンス文字のみで縦に雑談できるもの 2つめは質問形式の掲示板で、200レスポンス文字と画像2件ずつを投稿できるようなものになります。 質問形式は5日周期で強制削除、雑談掲示板は7日周期で強制削除で実装したいです。 参考イメージは下記になります。画像ではスタンプでアップロード機能も付いていますがこちらは実装しません。 https://imgur.com/PvH9B2H.jpg
- dell_OK
- ベストアンサー率13% (776/5747)
【カテゴリーランキング 2023/1/4】 ・カテゴリーごとにtag-link-1,tag-link-2,tag-link-3,のように1つずつカウントすることは可能でしょうか? こんな感じでどうでしょうか。 ---- $tag_link_count = 0; foreach ($terms as $term) { $url = get_term_link($term)."?tn={$tn}"; $tag_link_count++; $out .= " <li> <i class=\"fa icon-minus-squared\"></i> <a href=\"{$url}\" class=\"tag-link-{$tag_link_count}\" style=\"font-size:19.2pt;\" aria-lavel=\"{$term->name}({$term->count}項目)\" > ---- 追加の箇所について。 カウンタの初期化。 $tag_link_count = 0; カウントアップ。 $tag_link_count++; カウンタの出力。 class=\"tag-link-{$tag_link_count}\"
補足
アドバイスありがとうございます。classに$関数が使えることを知らなかったので勉強になりました。count++;で連番できるのですね。 class=\"tag-link-{$tag_link_count}\" またお問い合わせフォームに戻るのですが、reCAPTCHAの配置場所について悩んでおります。 昨年作成していたコードで試したところ、contact-input.ph(入力フォーム)に設置すると何もコンテンツがないところにreCAPTCHAのチェックボックスのみが表示されて判定を突破すると入力フォームが現れます。これではセキュリティとしてあまり意味をなしていないように思えるため、配置するなら入力フォームの後だと考えました。 フォームはeCAPTCHA抜きで完成しているため後付けて実装する場合、既存の入力フォームと一体化させる必要があるのですが、考えたコードを試してみても送信ができなかったり、reCAPTCHAを無視して確認画面に進んでしまいます。 下記のコードを入力フォーム内に収める方法はありますでしょうか? echo '<form name="privacy_agreement" method="post" action="?">'; echo '<div class="g-recaptcha" data-sitekey="6Lff73YjAAAAABhCyWMuUVFWXNDGSUfNpg8Y1vxD" data-callback="myAlert">'; echo '</div>'; ※該当コード https://wandbox.org/permlink/B1asf9Anvm8LupBd 以前お伝えしていたカスタムモジュールはphpファイルをdisplay.phpと同じく浅い階層において読み込むことで問題ないようでした。 ※modure.php <?php // reCAPTCHA v2 サイトキー define('V2_SITEKEY', '取得したサイトキー'); // reCAPTCHA v2 シークレットキー define('V2_SECRETKEY', '取得したシークレットキー'); ?> ※下記コードで読み込み <?php // <!-- SMP_DYNAMIC_PAGE DISPLAY_ERRORS=OFF NAME=check --> ?> <?php require 'カスタムモジュールの実行時ファイルパス'; // reCAPTCHA サイトキー $siteKey = V2_SITEKEY; ?>
- dell_OK
- ベストアンサー率13% (776/5747)
【カテゴリーランキング 2022/12/28】 こんな感じでしょうか。 SQL文は変更しなくても大丈夫だと思います。 wp_term_taxonomyにはcountと言うカラムがあって、そのカテゴリーに登録されている記事(公開)のカウントが登録されているようです。 https://wpdocs.osdn.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A7%8B%E9%80%A0#.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB:_wp_term_taxonomy それを{$term->count}で参照するとよさそうです。 ---- function display_category_ranking() { global $wpdb; global $tn; global $cat; $sql = " SELECT t.*, tt.*, cc.meta_value AS access_count FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN ( SELECT * FROM wp_termmeta WHERE meta_key = 'category_count_week' AND meta_value != 0 ) AS cc ON t.term_id = cc.term_id ORDER BY cc.meta_value DESC LIMIT 20 "; $query = $wpdb->prepare($sql); $terms = $wpdb->get_results($query); if ($terms) { $out = '<ul class="category-ranking clearfix">'; foreach ($terms as $term) { $url = get_term_link($term)."?tn={$tn}"; $out .= " <li> <i class=\"fa icon-minus-squared\"></i> <a href=\"{$url}\" class=\"tag-link\" style=\"font-size:19.2pt;\" aria-lavel=\"{$term->name}({$term->count}項目)\" > {$term->name} </a> <div class=\"Information\"> </div> </li> "; } $out .= '</ul>'; } else { $out = '<p>アクセスランキングはまだ集計されていません。</p>'; } echo " <section class=\"category-box\"> {$out} </section> "; } ---- 次に回答できるのは1月4日以降になります。
お礼
こちらが最新の質問になります。 banner.phpは下記のコードでまとめることができました。 https://wandbox.org/permlink/gJ2QZNGJKw2zvhln またカテゴリーランキングに話が戻るのですが、class=taglinkをカテゴリーごとにtag-link-1,tag-link-2,tag-link-3,のように1つずつカウントすることは可能でしょうか? 取得してから連番を(phpスクリプトで)カウントするという方法も可能ではないかと教えていただいたのですが、意味がよく理解できませんでした。 ※該当のコード <a href=\"{$url}\" class=\"tag-link\" style=\"font-size:19.2pt;\" aria-lavel=\"{$term->name}({$term->count}項目)\" >
補足
修正ありがとうございます。次回質問の件了解いたしました。 次回質問したい内容が1つありまして、下記になります。 banner.phpのコードを短縮したいのですが、上手くまとめる方法が分かりません。 banner2.phpでコードをまとめて一部短縮したのですがそれぞれの午前と午後を結びつける良い方法はありますでしょうか? 発想として各バナー情報を配列にまとめてarray_shift()で順番に%sで出力する方法を考えたのですが、 if(0 <= $time && $time <= 12)と12時以降のelseif (12 <= $time && $time <= 24)で午前と午後の画像をまとめることができないため悩んでいます。同じ時間帯であれば下記のようにして午前と午後を結ぶことも可能なのですが… if (intval(date('H')) >= 12) { $img1 = $img3; $img2 = $img4; } //配列にしてまとめる(画像リンクとタイトル) $banner_data = [ ['サブページ1の午前画像リンク', 'サブページ1の午後画像リンク', '2枚絵比較'], ['サブページ2の午前画像リンク', 'サブページ2の午後画像リンク','3枚絵比較'], ['掲示板1の午前画像リンク', '掲示板1の午後画像リンク', '掲示板質問1'], ['掲示板2の午前画像リンク', '掲示板2の午後画像リンク', '掲示板質問2'], ]; ※該当コード https://wandbox.org/permlink/j9iA1Tscj3vdADz1
- dell_OK
- ベストアンサー率13% (776/5747)
・警告文は無視しても良いものでしょうか? すべての警告文に対応して出ないようにしておいた方がいいと思います。 放置するとPHPのバージョンによってはエラーになるかも知れません。 header()を使う場合は、それ以前に何も出力してはいけません。 https://www.php.net/manual/ja/function.header.php HTMLやPHPからのechoなどが先にあるとエラーかワーニングになります。 contact-sendmail.phpの91行目についてですが、 90行目の?>でPHPコードは終了しているので、 そこから先はHTMLとして出力されます。 厳密には、 ?>改行 となっていると思いますので、この改行をなくせば警告がなくなるかも知れません。 ただ、そうするよりも、このようなことを回避するために、ファイルの最後には?>を書かないと言うのが一般的になっていると思います。 https://xtech.nikkei.com/it/article/COLUMN/20070307/264114/ https://sophiadigital.com/communication/end-tag/
補足
A.アドバイスありがとうございます。警告文も修正するように心がけます。 改行でhtmlとして出力されるんですね勉強になりました。なくしてみたところ警告は解消できました。 ファイルの最後に?>を書いていない方がいて不思議に思っていたのですが、そういう理由からなんですね。 全く別の箇所についてお聞きしたいことがあるのですが、カテゴリーランキングで出力するhtmlを下記のように変更したいです。 SQLについて分からないなりに組んでみたのですが、(項目)をどのように出力するのかわかりませんでした。アドバイスお願い致します。 ※現在出力されているもの ①<a href="http://?tn=1" width:="" 97px;height:="" 130px;=""> <div class="cat-genre-wrap">カテゴリー6</div> </a> ※これから出力したいもの ②<a helf="http://?tn=1" class="" style="font-size:19.2pt;" aria-label="カテゴリー名(〇項目)">カテゴリー名</a> function display_category_ranking() { global $wpdb; global $tn; global $cat; $sql = " SELECT t.*, tt.*, cc.meta_value AS access_count category_id, count(*) as cnt /* count追加 */ FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN ( SELECT * FROM wp_termmeta WHERE meta_key = 'category_count_week' AND meta_value != 0 ) AS cc ON t.term_id = cc.term_id ORDER BY cc.meta_value DESC LIMIT 20 "; $query = $wpdb->prepare($sql); $terms = $wpdb->get_results($query); if ($terms) { $out = '<ul class="category-ranking clearfix">'; foreach ($terms as $term) { $url = get_term_link($term)."?tn={$tn}"; $out .= " foreach ($term as $t => $cnt) { /* count追加 */ $out .= " } <li> <i class=\"fa icon-minus-squared\"></i> <a href=\"{$url}\" class=\"tag-link\" style=\"font-size:19.2pt;\" aria-lavel=\"{$term[($cnt)]->name}\" >/* count追加 */ {$term->name} </a> <div class=\"Information\"> </div> </li> "; } $out .= '</ul>'; } else { $out = '<p>アクセスランキングはまだ集計されていません。</p>'; } echo " <section class=\"category-box\"> {$out} </section> "; }
- dell_OK
- ベストアンサー率13% (776/5747)
・120行目の</textarea>が分かりませんでした。 回答の文字が見えにくかったかもしれませんが .(ピリオド)で結合します。 '(シングルクォート)は文字列の開始と終了を括る記号です。 echo '文字列'.$変数.'文字列'; echo '<input type="text" name="subject" size="40" maxlength="60" value="'.$subject_value.'" required />'; echo '<input type="text" name="namae" size="40" maxlength="60" value="'.$namae_value.'" required />'; echo '<input type="email" name="email" size="40" maxlength="200" value="'.$email_value.'" required />'; echo '<textarea name="message" cols="40" rows="10" required>'.$message_value.'</textarea>'; ついでに。 textareaの開始タグには/書かないのが正解です。 誤:'<textarea name="message" cols="40" rows="10" required />' 正:'<textarea name="message" cols="40" rows="10" required>'
お礼
説明不足で申し訳ありません。該当のコードは下記になります。 警告文が出たということは、ヘッダー情報が引き継がれていて2重に防御を張っているという認識です。 // 他のサイトでインラインフレーム表示を禁止する(クリックジャッキング対策) header('X-FRAME-OPTIONS: SAMEORIGIN'); ※引用文 このエラーは HTTP ヘッダーを変更する関数(後述)の呼び出しより前に、すでに何かがアウトプットされているために発生します。
補足
回答ありがとうございます。送信することができました。 エラーをphp.iniでOnにしてみたところ送信完了画面(contact-completion.php)で警告文が出ていたのですが、参考サイトを見るとすべてのファイルに記載されています。 警告文は無視しても良いものでしょうか? 警告: ヘッダー情報を変更できません - contact-sendmail.php:91 で開始された出力) によって既に送信されたヘッダーcontact-completion.phpの7行目 https://teratail.com/questions/71592
お礼
Q.ログインしていない投稿者にはIDはありませんので取得できません。 A.回答ありがとうございます。 複数のまとめサイトにはログイン処理なしでコメントにIDが出ているためコメントの際にvalueでIDを渡せるのではないかと考えております。 両サイトともにコメントすると同じIDが表示されています。wifiが変わるとIDは変更されるようです。 ※参考サイト https://imgur.com/3Ug2WO7.jpg https://imgur.com/yQvQVsh.jpg 別のサイトから名前にIDを設定できる方法を見つけました。 IDも取得したいのですが、IPも別途取得した方がよいかもしれません。 何か問題が生じた際にIPアドレスを取得できないと、大きな問題に発展してしまうリスクがあります。 ※該当コード <input type="hidden" name="id" value="<?php echo substr(base_convert(md5(session_id()), 16, 36), 0, 6); ?>"> // セッションIDをMD5でハッシュ化して、先頭の6文字をIDとして使う echo substr(base_convert(md5(session_id()), 16, 36), 0, 6); ※参考サイト https://web.analogstd.com/tips/posts/php/how-to-mount-comment-func-without-sql.php Q.投稿してきたIPアドレスが「荒らしIPアドレステーブル」に登録されているものであれば、 エラーにするようにすれば投稿を禁止できます。 A.アドバイスありがとうございます。 IDが取得できない場合はIPアドレスを保存するように致します。 質問の期限が切れそうなため下記URLから引き続きよろしくお願い致します。 https://okwave.jp/qa/q10093310.html