提示コードですが参考サイトを参考にメールアドレスによる会員登録画面を作っているのですがメールアドレスを入れてsignup.phpに移動すると画面に何も表示されない真っ白な画面が出るのですがこれは何が原因なのでしょうか?
データベースにpreAccountが登録されるためそこに処理は到達しているみたいなのですが何も表示されなげんいんがわかりません
またechoデバッグも何も表示されません
URLにはabout:blank#blocked
と表示されます。
preAccount
Account
errror_log
sh: 1: /usr/sbin/sendmail: not found sh: 1: /usr/sbin/sendmail: not found sh: 1: /usr/sbin/sendmail: not found sh: 1: /usr/sbin/sendmail: not found
試したこと
<h1>仮会員登録画面</h1>を入れてhtml出力を実装してみた参考サイト: https://note.com/koushikagawa/n/n9c6e396e2687
registerCheck.php
php
<!DOCTYPE html> <html lang=ja> <head> <meta charset="utf-8"> <link rel="stylesheet" href="style.css"> <title>send</title> </head> <body> <?php ini_set("display_errors",1); error_reporting(E_ALL); session_start(); ?> <h1 class="center"> 登録確認 </h1> <?php $dsn = 'mysql:dbname=Bulletin_Board;host=localhost;charset=utf8'; $dbh = new PDO($dsn,"root",""); if(false) { echo "メールアドレスが未入力です"; } else { $mail = $_POST['mail']; if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $mail)) { echo "メールアドレスの形式が正しくありません。"; } $sql = "SELECT id FROM Account WHERE mail=:mail"; $stm = $dbh->prepare($sql); $stm->bindValue(':mail',$mail,PDO::PARAM_STR); $stm->execute(); $result = $stm->fetch(PDO::FETCH_ASSOC); if(isset($result["id"]) == true) { echo "このメールアドレスは既に利用されています。"; } else { $urltoken = hash('sha256',uniqid(rand(),1)); $url = "http://localhost:signup.php?urltoken=".$urltoken; try { $dsn = 'mysql:dbname=Bulletin_Board;host=localhost;charset=utf8'; $dbh = new PDO($dsn,"root",""); $sql = 'INSERT INTO `preAccount`(`mail`,`token`,`enable`,`date`) VALUES (:mail,:urltoken,false,now())'; $stmt = $dbh->prepare($sql); $stmt->bindValue(':urltoken',$urltoken,PDO::PARAM_STR); $stmt->bindValue(':mail',$mail,PDO::PARAM_STR); $stmt->execute(); $dbh = null; }catch(PDOException $e) { print('Error:'.$e->getMessage()); } $mailTo = $mail; $body = <<< EOM この度はご登録いただきありがとうございます。 24時間以内に下記のURLからご登録下さい。 {$url} EOM; mb_language('ja'); mb_internal_encoding('UTF-8'); $companyname = "shigurechan"; $registation_subject = "shigurechan"; $companymail = "aoriaka00@gmail.com"; //Fromヘッダーを作成 $header = 'From: ' . mb_encode_mimeheader($companyname). ' <' . $companymail. '>'; if(mb_send_mail($mailTo, $registation_subject, $body, $header, '-f'. $companymail)){ //セッション変数を全て解除 $_SESSION = array(); //クッキーの削除 if (isset($_COOKIE["PHPSESSID"])) { setcookie("PHPSESSID", '', time() - 1800, '/'); } //セッションを破棄する session_destroy(); $message = "メールをお送りしました。24時間以内にメールに記載されたURLからご登録下さい。"; } } } ?> <h1>仮会員登録画面</h1> <?php if (isset($_POST['submit'])): ?> <!-- 登録完了画面 --> <p><?=$message?></p> <p>↓TEST用(後ほど削除):このURLが記載されたメールが届きます。</p> <a href="<?=$url?>"><?=$url?></a> <?php endif; ?> <!-- 登録画面 --> <?php if (true): ?> <form action="<?php echo $_SERVER['SCRIPT_NAME'] ?>" method="post"> <p>メールアドレス:<input type="text" name="mail" size="50" value="<?php if( !empty($_POST['mail']) ){ echo $_POST['mail']; } ?>"></p> <input type="hidden" name="token" value="<?=$token?>"> <input type="submit" name="submit" value="送信"> </form> <?php endif; ?> </body> </html>
signup.php
php
<?php init_set("display_errors",1); error_reporting(E_ALL); session_start(); $dsn = 'mysql:dbname=Bulletin_Board;host=localhost;charset=utf8'; $dbh = new PDO($dsn,"root",""); $urltoken = $_GET["urltoken"]; try{ // DB接続 //flagが0の未登録者 or 仮登録日から24時間以内 $sql = "SELECT mail FROM preAccount WHERE token=(:urltoken) AND enable = 0 AND date > now() - interval 24 hour"; $stm = $pdo->prepare($sql); $stm->bindValue(':urltoken', $urltoken, PDO::PARAM_STR); $stm->execute(); //レコード件数取得 $row_count = $stm->rowCount(); //24時間以内に仮登録され、本登録されていないトークンの場合 if( $row_count ==1){ $mail_array = $stm->fetch(); $mail = $mail_array["mail"]; $_SESSION['mail'] = $mail; }else{ $errors['urltoken_timeover'] = "このURLはご利用できません。有効期限が過ぎたかURLが間違えている可能性がございます。もう一度登録をやりなおして下さい。"; } //データベース接続切断 $stm = null; }catch (PDOException $e){ print('Error:'.$e->getMessage()); die(); } if(isset($_POST['btn_confirm'])){ if(empty($_POST)) { header("Location: registration_mail.php"); exit(); }else{ //POSTされたデータを各変数に入れる $name = isset($_POST['name']) ? $_POST['name'] : NULL; $password = isset($_POST['password']) ? $_POST['password'] : NULL; //セッションに登録 $_SESSION['name'] = $name; $_SESSION['password'] = $password; //アカウント入力判定 //パスワード入力判定 if ($password == ''): $errors['password'] = "パスワードが入力されていません。"; else: $password_hide = str_repeat('*', strlen($password)); endif; if ($name == ''): $errors['name'] = "氏名が入力されていません。"; endif; } } ?> <?php if(isset($_POST['btn_submit'])){ //パスワードのハッシュ化 $password_hash = password_hash($_SESSION['password'], PASSWORD_DEFAULT); //ここでデータベースに登録する try{ $sql = "INSERT INTO Account (name,id,password,mail,date) VALUES (:name,:password_hash,:mail,now())"; $stm = $pdo->prepare($sql); $stm->bindValue(':name', $_SESSION['name'], PDO::PARAM_STR); $stm->bindValue(':mail', $_SESSION['mail'], PDO::PARAM_STR); $stm->bindValue(':password_hash', $password_hash, PDO::PARAM_STR); $stm->execute(); //pre_userのflagを1にする(トークンの無効化) $sql = "UPDATE preAccount SET enable=1 WHERE mail=:mail"; $stm = $pdo->prepare($sql); //プレースホルダへ実際の値を設定する $stm->bindValue(':mail', $mail, PDO::PARAM_STR); $stm->execute(); /* * 登録ユーザと管理者へ仮登録されたメール送信 */ $mailTo = $mail.','.$companymail; $body = <<< EOM この度はご登録いただきありがとうございます。 本登録致しました。 EOM; mb_language('ja'); mb_internal_encoding('UTF-8'); //Fromヘッダーを作成 $header = 'From: ' . mb_encode_mimeheader($companyname). ' <' . $companymail. '>'; if(mb_send_mail($mailTo, $registation_mail_subject, $body, $header, '-f'. $companymail)){ $message['success'] = "会員登録しました"; }else{ $errors['mail_error'] = "メールの送信に失敗しました。"; } //データベース接続切断 $stm = null; //セッション変数を全て解除 $_SESSION = array(); //セッションクッキーの削除 if (isset($_COOKIE["PHPSESSID"])) { setcookie("PHPSESSID", '', time() - 1800, '/'); } //セッションを破棄する session_destroy(); }catch (PDOException $e){ //トランザクション取り消し(ロールバック) $pdo->rollBack(); $errors['error'] = "もう一度やりなおして下さい。"; print('Error:'.$e->getMessage()); } } ?> <h1>会員登録画面</h1> <!-- page_3 完了画面--> <?php if(isset($_POST['btn_submit']) && count($errors) === 0): ?> <h3>本登録されました。</h3> <!-- page_2 確認画面--> <?php elseif (isset($_POST['btn_confirm']) && count($errors) === 0): ?> <form action="<?php echo $_SERVER['SCRIPT_NAME'] ?>?urltoken=<?php print $urltoken; ?>" method="post"> <p>メールアドレス:<?=htmlspecialchars($_SESSION['mail'], ENT_QUOTES)?></p> <p>パスワード:<?=$password_hide?></p> <p>氏名:<?=htmlspecialchars($name, ENT_QUOTES)?></p> <input type="submit" name="btn_back" value="戻る"> <input type="hidden" name="token" value="<?=$_POST['token']?>"> <input type="submit" name="btn_submit" value="登録する"> </form> <?php else: ?> <!-- page_1 登録画面 --> <?php if(count($errors) > 0): ?> <?php foreach($errors as $value){ echo "<p class='error'>".$value."</p>"; } ?> <?php endif; ?> <?php if(!isset($errors['urltoken_timeover'])): ?> <form action="<?php echo $_SERVER['SCRIPT_NAME'] ?>?urltoken=<?php print $urltoken; ?>" method="post"> <p>メールアドレス:<?=htmlspecialchars($mail, ENT_QUOTES, 'UTF-8')?></p> <p>パスワード:<input type="password" name="password"></p> <p>氏名:<input type="text" name="name" value="<?php if( !empty($_SESSION['name']) ){ echo $_SESSION['name']; } ?>"></p> <input type="hidden" name="token" value="<?=$token?>"> <input type="submit" name="btn_confirm" value="確認する"> </form> <?php endif ?> <?php endif; ?> </body> </html>
まだ回答がついていません
会員登録して回答してみよう