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

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

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

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

デバッグ

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

Q&A

解決済

1回答

1640閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

デバッグ

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

0グッド

0クリップ

投稿2022/02/10 01:24

編集2022/02/10 02:47

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

1<!DOCTYPE html> 2<html lang=ja> 3 <head> 4 <meta charset="utf-8"> 5 6 <link rel="stylesheet" href="style.css"> 7 <title>send</title> 8 </head> 9 10 <body> 11 12<?php 13ini_set("display_errors",1); 14error_reporting(E_ALL); 15session_start(); 16?> 17 18<h1 class="center"> 登録確認 </h1> 19 20<?php 21 22 $dsn = 'mysql:dbname=Bulletin_Board;host=localhost;charset=utf8'; 23 $dbh = new PDO($dsn,"root",""); 24 25 26if(false) 27{ 28 echo "メールアドレスが未入力です"; 29} 30else 31{ 32 $mail = $_POST['mail']; 33 if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $mail)) 34 { 35 echo "メールアドレスの形式が正しくありません。"; 36 } 37 38 $sql = "SELECT id FROM Account WHERE mail=:mail"; 39 $stm = $dbh->prepare($sql); 40 $stm->bindValue(':mail',$mail,PDO::PARAM_STR); 41 $stm->execute(); 42 $result = $stm->fetch(PDO::FETCH_ASSOC); 43 44 if(isset($result["id"]) == true) 45 { 46 echo "このメールアドレスは既に利用されています。"; 47 } 48 else 49 { 50 $urltoken = hash('sha256',uniqid(rand(),1)); 51 $url = "http://localhost:signup.php?urltoken=".$urltoken; 52 53 try 54 { 55 $dsn = 'mysql:dbname=Bulletin_Board;host=localhost;charset=utf8'; 56 $dbh = new PDO($dsn,"root",""); 57 58 $sql = 'INSERT INTO `preAccount`(`mail`,`token`,`enable`,`date`) VALUES (:mail,:urltoken,false,now())'; 59 $stmt = $dbh->prepare($sql); 60 $stmt->bindValue(':urltoken',$urltoken,PDO::PARAM_STR); 61 $stmt->bindValue(':mail',$mail,PDO::PARAM_STR); 62 $stmt->execute(); 63 $dbh = null; 64 65 }catch(PDOException $e) 66 { 67 print('Error:'.$e->getMessage()); 68 } 69 70 71 $mailTo = $mail; 72 $body = <<< EOM 73 この度はご登録いただきありがとうございます。 74 24時間以内に下記のURLからご登録下さい。 75 {$url} 76EOM; 77 mb_language('ja'); 78 mb_internal_encoding('UTF-8'); 79 80 $companyname = "shigurechan"; 81 $registation_subject = "shigurechan"; 82 $companymail = "aoriaka00@gmail.com"; 83 //Fromヘッダーを作成 84 $header = 'From: ' . mb_encode_mimeheader($companyname). ' <' . $companymail. '>'; 85 86 if(mb_send_mail($mailTo, $registation_subject, $body, $header, '-f'. $companymail)){ 87 //セッション変数を全て解除 88 $_SESSION = array(); 89 //クッキーの削除 90 if (isset($_COOKIE["PHPSESSID"])) { 91 setcookie("PHPSESSID", '', time() - 1800, '/'); 92 } 93 //セッションを破棄する 94 session_destroy(); 95 $message = "メールをお送りしました。24時間以内にメールに記載されたURLからご登録下さい。"; 96 } 97 98 } 99} 100 101?> 102 103<h1>仮会員登録画面</h1> 104<?php if (isset($_POST['submit'])): ?> 105 <!-- 登録完了画面 --> 106 <p><?=$message?></p> 107 <p>↓TEST用(後ほど削除):このURLが記載されたメールが届きます。</p> 108 <a href="<?=$url?>"><?=$url?></a> 109<?php endif; ?> 110<!-- 登録画面 --> 111 112 113 <?php if (true): ?> 114 <form action="<?php echo $_SERVER['SCRIPT_NAME'] ?>" method="post"> 115 <p>メールアドレス:<input type="text" name="mail" size="50" value="<?php if( !empty($_POST['mail']) ){ echo $_POST['mail']; } ?>"></p> 116 <input type="hidden" name="token" value="<?=$token?>"> 117 <input type="submit" name="submit" value="送信"> 118 </form> 119<?php endif; ?> 120 121 122 123</body> 124 125</html> 126
signup.php

php

1<?php 2init_set("display_errors",1); 3error_reporting(E_ALL); 4session_start(); 5 6$dsn = 'mysql:dbname=Bulletin_Board;host=localhost;charset=utf8'; 7$dbh = new PDO($dsn,"root",""); 8 9$urltoken = $_GET["urltoken"]; 10 11 12try{ 13 // DB接続 14 //flagが0の未登録者 or 仮登録日から24時間以内 15 $sql = "SELECT mail FROM preAccount WHERE token=(:urltoken) AND enable = 0 AND date > now() - interval 24 hour"; 16 $stm = $pdo->prepare($sql); 17 $stm->bindValue(':urltoken', $urltoken, PDO::PARAM_STR); 18 $stm->execute(); 19 20 //レコード件数取得 21 $row_count = $stm->rowCount(); 22 23 //24時間以内に仮登録され、本登録されていないトークンの場合 24 if( $row_count ==1){ 25 $mail_array = $stm->fetch(); 26 $mail = $mail_array["mail"]; 27 $_SESSION['mail'] = $mail; 28 }else{ 29 $errors['urltoken_timeover'] = "このURLはご利用できません。有効期限が過ぎたかURLが間違えている可能性がございます。もう一度登録をやりなおして下さい。"; 30 } 31 //データベース接続切断 32 $stm = null; 33 }catch (PDOException $e){ 34 print('Error:'.$e->getMessage()); 35 die(); 36 } 37 38 39if(isset($_POST['btn_confirm'])){ 40 if(empty($_POST)) { 41 header("Location: registration_mail.php"); 42 exit(); 43 }else{ 44 //POSTされたデータを各変数に入れる 45 $name = isset($_POST['name']) ? $_POST['name'] : NULL; 46 $password = isset($_POST['password']) ? $_POST['password'] : NULL; 47 48 //セッションに登録 49 $_SESSION['name'] = $name; 50 $_SESSION['password'] = $password; 51 52 //アカウント入力判定 53 //パスワード入力判定 54 if ($password == ''): 55 $errors['password'] = "パスワードが入力されていません。"; 56 else: 57 $password_hide = str_repeat('*', strlen($password)); 58 endif; 59 60 if ($name == ''): 61 $errors['name'] = "氏名が入力されていません。"; 62 endif; 63 64 } 65 66} 67 68 69?> 70 71<?php 72if(isset($_POST['btn_submit'])){ 73 //パスワードのハッシュ化 74 $password_hash = password_hash($_SESSION['password'], PASSWORD_DEFAULT); 75 76 //ここでデータベースに登録する 77 try{ 78 $sql = "INSERT INTO Account (name,id,password,mail,date) VALUES (:name,:password_hash,:mail,now())"; 79 $stm = $pdo->prepare($sql); 80 $stm->bindValue(':name', $_SESSION['name'], PDO::PARAM_STR); 81 $stm->bindValue(':mail', $_SESSION['mail'], PDO::PARAM_STR); 82 $stm->bindValue(':password_hash', $password_hash, PDO::PARAM_STR); 83 $stm->execute(); 84 85 //pre_userのflagを1にする(トークンの無効化) 86 $sql = "UPDATE preAccount SET enable=1 WHERE mail=:mail"; 87 $stm = $pdo->prepare($sql); 88 //プレースホルダへ実際の値を設定する 89 $stm->bindValue(':mail', $mail, PDO::PARAM_STR); 90 $stm->execute(); 91 92 /* 93 * 登録ユーザと管理者へ仮登録されたメール送信 94 */ 95 96 $mailTo = $mail.','.$companymail; 97 $body = <<< EOM 98 この度はご登録いただきありがとうございます。 99 本登録致しました。 100EOM; 101 mb_language('ja'); 102 mb_internal_encoding('UTF-8'); 103 104 //Fromヘッダーを作成 105 $header = 'From: ' . mb_encode_mimeheader($companyname). ' <' . $companymail. '>'; 106 107 if(mb_send_mail($mailTo, $registation_mail_subject, $body, $header, '-f'. $companymail)){ 108 $message['success'] = "会員登録しました"; 109 }else{ 110 $errors['mail_error'] = "メールの送信に失敗しました。"; 111 } 112 113 //データベース接続切断 114 $stm = null; 115 116 //セッション変数を全て解除 117 $_SESSION = array(); 118 //セッションクッキーの削除 119 if (isset($_COOKIE["PHPSESSID"])) { 120 setcookie("PHPSESSID", '', time() - 1800, '/'); 121 } 122 //セッションを破棄する 123 session_destroy(); 124 125 }catch (PDOException $e){ 126 //トランザクション取り消し(ロールバック) 127 $pdo->rollBack(); 128 $errors['error'] = "もう一度やりなおして下さい。"; 129 print('Error:'.$e->getMessage()); 130 } 131} 132 133?> 134 135<h1>会員登録画面</h1> 136 137<!-- page_3 完了画面--> 138<?php if(isset($_POST['btn_submit']) && count($errors) === 0): ?> 139<h3>本登録されました。</h3> 140 141<!-- page_2 確認画面--> 142<?php elseif (isset($_POST['btn_confirm']) && count($errors) === 0): ?> 143 <form action="<?php echo $_SERVER['SCRIPT_NAME'] ?>?urltoken=<?php print $urltoken; ?>" method="post"> 144 <p>メールアドレス:<?=htmlspecialchars($_SESSION['mail'], ENT_QUOTES)?></p> 145 <p>パスワード:<?=$password_hide?></p> 146 <p>氏名:<?=htmlspecialchars($name, ENT_QUOTES)?></p> 147 148 <input type="submit" name="btn_back" value="戻る"> 149 <input type="hidden" name="token" value="<?=$_POST['token']?>"> 150 <input type="submit" name="btn_submit" value="登録する"> 151 </form> 152 153<?php else: ?> 154<!-- page_1 登録画面 --> 155 <?php if(count($errors) > 0): ?> 156 <?php 157 foreach($errors as $value){ 158 echo "<p class='error'>".$value."</p>"; 159 } 160 ?> 161 <?php endif; ?> 162 <?php if(!isset($errors['urltoken_timeover'])): ?> 163 <form action="<?php echo $_SERVER['SCRIPT_NAME'] ?>?urltoken=<?php print $urltoken; ?>" method="post"> 164 <p>メールアドレス:<?=htmlspecialchars($mail, ENT_QUOTES, 'UTF-8')?></p> 165 <p>パスワード:<input type="password" name="password"></p> 166 <p>氏名:<input type="text" name="name" value="<?php if( !empty($_SESSION['name']) ){ echo $_SESSION['name']; } ?>"></p> 167 <input type="hidden" name="token" value="<?=$token?>"> 168 <input type="submit" name="btn_confirm" value="確認する"> 169 </form> 170 <?php endif ?> 171<?php endif; ?> 172 173 174 175 176 177 </body> 178</html>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

リンクが、http://localhost:signup.php となっていますが、localhost:signup.phpは正しいですか?
localhost/signup.php ではないですか?

投稿2022/02/10 02:48

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問