質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

解決済

php 仮会員登録のURLに移動するとabout:blank#blockedとURLが表示される原因が知りたい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

1回答

-4評価

0クリップ

624閲覧

投稿2022/02/10 01:24

編集2022/02/10 11:49

提示コードですが参考サイトを参考にメールアドレスによる会員登録画面を作っているのですがメールアドレスを入れて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>

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。