• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpの質問です。)

phpの質問です。登録完了のメッセージが作動しない理由は?

このQ&Aのポイント
  • PHPの質問です。下記サイトを参考にして、ワンタイムURLの作成と登録確認のメール送信のテストをしています。メール送信とトークンは正常に動作していますが、登録完了のメッセージが表示されません。なぜでしょうか?
  • ドキュメントルートにtokenフォルダを作成しています。参考サイトのソースコードを微調整して実装しました。
  • クリックして「登録完了しました。」が作動しない問題が発生しています。なにか解決策はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

REFERERが空だったら(そういうクライアント環境は一定数あり得ます)どうするつもりなのか・・・ >上記でないとするとのような関数を使うのでしょうか? 設置するURLが決まっているなら、直接文字列リテラルで書けばいいのでは?そうでなくても $url = 'http://' . $_SERVER['HTTP_HOST'] . '/xxx.php?key=' . $token; のように書いた方が確実でしょう。

shousen412
質問者

お礼

大変勉強になりました。 ありがとうございます!

その他の回答 (2)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

>作動しません、 メールに記載されているURLは、index.phpですか?send.phpですか?で、 >if(isset($_GET["key"])){ >if(delete_old_token($_GET["key"])){ >print "登録完了しました。"; >}else{ >print 'もう一度初めからやり直してください。'; >} >} はどちらに書いているのですか? どちらに書いているにしても(当然メールに記載されているURLのスクリプトでないといけませんが、それは合っているとして)、スクリプトの先頭に書いているのですよね?

shousen412
質問者

補足

何回もすみません、 index.phpのbodyの上部に <?php if(isset($_GET["key"])){ print "登録完了しました。"; }else{ print 'もう一度初めからやり直してください。'; } ?> を配置したところ、成功しました。 ありがとうございます。 蛇足の部分の ◎$_SERVER["HTTP_REFERER"]のようななアテにならないものを使うのはやめましょう。 上記でないとするとのような関数を使うのでしょうか?

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

正しい($tokendirに存在する)tokenファイル名が引き渡されているか、ファイル更新時刻が正しく読み取れているかをチェックしてください。 global $tokendir; のあとに print $token . '<br>'; を、 if(is_file($tokendir.$file) && !is_null($token)){ のあとに print date('Y/m/d H:i:s') . '<br>' print date('Y/m/d H:i:s', filemtime($tokendir.$token.".log")) . '<br>'; を追加してみてください。 (蛇足) $url = $_SERVER["HTTP_REFERER"]."?key=".$token; $_SERVER["HTTP_REFERER"]のようななアテにならないものを使うのはやめましょう。 というか今現在のデバッグでは正しいURLになっているんですよね。リファラはindex.phpだと思うので >if(isset($_GET["key"])){ >if(delete_old_token($_GET["key"])){ >print "登録完了しました。"; > 以下略 の部分もindex.phpに書いていると思いますが・・・ >「登録完了しました。」が作動しません。 ちゃんと「もう一度初めからやり直してください。」が表示jされているんですよね(これがダメだとURLの組み立てから間違っているので)。

shousen412
質問者

補足

◎申し訳ありません、 作動しません、 if(isset($_GET["key"])){ if(delete_old_token($_GET["key"])){ print "登録完了しました。"; }else{ print 'もう一度初めからやり直してください。'; } } 上記を何度見ても、間違いではないとおもうのですが・・・・・・・ ◎$_SERVER["HTTP_REFERER"]のようななアテにならないものを使うのはやめましょう。 上記でないとするとどの様な風に書きますか?

関連するQ&A