PHPでecho出力できない
Q&A
Closed
PHPでPRGパターン対応(二重入力防止)するために、リダイレクトを用いて完了画面で
リロードしても二重入力はされないようになりました。
しかしながら、DBのインサートが成功した際に出力するためのechoで定義している
「登録に成功しました。」
が表示されなくなってしまいました。
「ユーザーメンテナンスに戻る」は表示されているので、その後でリダイレクトすれば
いいかと考えましたが、そうすると、完了画面に進む際に、「この画面は利用できません」
とブラウザのエラーが表示されます。
「登録に成功しました。」を表示する方法をご教示いただきたいです。
ソースコードを添付します。
<?php
require_once('password_hash.php');
try{
require_once('db_connect.php');
}
catch(PDOException $e)
{
echo "次がエラーの内容です。;" .$e->getMessage();
}
function escape($val)
{
return htmlspecialchars($val, ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
?>
<!doctype html>
<html lang=ja>
<head>
<meta charset="utf-8">
<title>ユーザーメンテナンス(完了)</title>
<meta name="description" content="ユーザーの修正画面">
<!--リセットcss-->
<link rel="stylesheet" href="https://unpkg.com/ress/dist/ress.min.css">
<!--css-->
<link href="css/user_style.css" rel="stylesheet">
<!--レスポンシブ対応-->
<meta name="viwport" content="width=device-width, initial-scale=1">
<!--Googleフォント-->
<link href="https://fonts.googleapis.com/css2?family=Sawarabi+Gothic&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Shippori+Mincho:wght@500&display=swap" rel="stylesheet">
</head>
<body>
<h1>ユーザーメンテナンス(完了)</h1>
<?php
$sql=$pdo->prepare('insert into user_table(id,last_name,first_name,last_name_kana,first_name_kana,user,password) values (null,?,?,?,?,?,?)');
if($_SERVER['REQUEST_METHOD'] === 'POST'){
if(empty($_POST['sei']) || empty($_POST['mei']) || empty($_POST['sei_kana']) || empty($_POST['mei_kana']) || empty($_POST['user']) || empty($_POST['password']) || empty($_POST['password2']))
{
echo '未入力の項目があります。';
}
else if(!preg_match('/\A[ァ-ヴー]+\z/u', $_POST['sei_kana']) || !preg_match('/\A[ァ-ヴー]+\z/u', $_POST['mei_kana']))
{
echo 'カナ名は全角カナで入力してください。';
}
else if(!preg_match('/\A[a-zA-Z0-9!-\/:-@[-`{-~]+\z/u', $_POST['user']))
{
echo 'ユーザーは半角英数字記号で入力します';
}
else if(!preg_match('/\A[a-zA-Z0-9!-\/:-@[-`{-~]{10,}\z/u', $_POST['password']))
{
echo 'パスワードは半角英数字記号10文字以上で入力します。';
}
else if(!preg_match('/\A[a-zA-Z0-9!-\/:-@[-`{-~]{10,}\z/u', $_POST['password2']))
{
echo 'パスワードは半角英数字記号10文字以上で入力します。';
}
else if($_POST['password'] !== $_POST['password2'])
{
echo '2つのパスワードが一致してません。';
}
else if($sql->execute(
[escape($_POST['sei']),
escape($_POST['mei']),
escape($_POST['sei_kana']),
escape($_POST['mei_kana']),
escape($_POST['user']),
htmlspecialchars($pass,ENT_QUOTES | ENT_HTML5,'UTF-8')]))
{
echo '<p class="msg">','登録に成功しました。','<p>';
}
else {
echo '<P class="msg">','登録に失敗しました。','</p>';
}
header('Location: user_create_commit.php', true, 303);
exit();}?>
<p class=return><a href="user_table.php">ユーザーメンテナンスへ戻る</a></p>
</body>
</html>