前提・実現したいことど
passward_hashでハシュ化した値をdbのテーブルへ保存するにはどの文字コードが適切でしょうか?
パスワードのカラムは utf8_general_ci になっています。
excuteのpassward_hashを消すとうまくいきました。
発生している問題・エラーメッセージ
database error : SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'pass' cannot be null
該当のソースコード
php
1<?php 2var_dump($_POST); 3 4// 変数の初期化 5$page_flag = 0; 6 7if( !empty($_POST['btn_confirm']) ) { 8 9 $page_flag = 1; 10 11} elseif( !empty($_POST['btn_submit']) ) { 12 13 $page_flag = 2; 14} 15?> 16 17<!DOCTYPE> 18<html lang="ja"> 19<head> 20<title>アカウント作成</title> 21</head> 22<body> 23<h1>アカウント作成</h1> 24<?php if( $page_flag === 1 ): ?> 25 26<form method="post" action=""> 27 <div class="element_wrap"> 28 <label>メールアドレス</label> 29 <p><?php echo $_POST['email']; ?></p> 30 </div> 31 32 <div class="element_wrap"> 33 <label>パスワード</label> 34 <p><?php echo $_POST['input_pass']; ?></p> 35 </div> 36 37 <input type="submit" name="btn_back" value="戻る"> 38 <input type="submit" name="btn_submit" value="登録"> 39 <input type="hidden" name="input_pass" value="<?php echo $_POST['input_pass']; ?>"> 40 <input type="hidden" name="email" value="<?php echo $_POST['email']; ?>"> 41</form> 42 43 44<?php elseif( $page_flag === 2 ): ?> 45 46 <?php 47 try { 48 $email=$_POST['email']; 49 $pass=$_POST['input_pass']; 50$var_dump($pass); 51$pdo = new PDO("mysql:host=localhost;dbname=hoge;charset=utf8mb4", 'hoge','hoge', [PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION]); 52$stmt = $pdo->prepare("insert into login (mail, pass ,user) values (?, ?,?)"); 53$stmt->execute([$mail, password_hash($pass)]); 54} catch (PDOException $e) { 55die('database error : ' . $e->getMessage()); 56} 57 58 ?> 59 60<?php else: ?> 61 62<form method="post" action=""> 63 64<div class="element_wrap"> 65 <label>メールアドレス</label> 66 <input type="email" name="email" value=""> 67 </div> 68 <div class="element_wrap"> 69 <label for="pass1">パスワード</label> 70 <input type="password" id="input_pass" name="input_pass" value=""> 71 <button id="btn_passview">表示</button> 72 </div> 73 <!--<div class="element_wrap"> 74 <label for="pass2">パスワード-確認用-</label> 75 <input type="password" id="input_pass" name="input_pass" value=""> 76 <button id="btn_passview">表示</button> 77 </div>--> 78 <input type="submit" name="btn_confirm" value="入力内容を確認する"> 79</form> 80 81<?php endif; ?> 82 83<script> 84 85window.addEventListener('DOMContentLoaded', function(){ 86 87 // (1)パスワード入力欄とボタンのHTMLを取得 88 let btn_passview = document.getElementById("btn_passview"); 89 let input_pass = document.getElementById("input_pass"); 90 91 // (2)ボタンのイベントリスナーを設定 92 btn_passview.addEventListener("click", (e)=>{ 93 94 // (3)ボタンの通常の動作をキャンセル(フォーム送信をキャンセル) 95 e.preventDefault(); 96 97 // (4)パスワード入力欄のtype属性を確認 98 if( input_pass.type === 'password' ) { 99 100 // (5)パスワードを表示する 101 input_pass.type = 'text'; 102 btn_passview.textContent = '非表示'; 103 104 } else { 105 106 // (6)パスワードを非表示にする 107 input_pass.type = 'password'; 108 btn_passview.textContent = '表示'; 109 } 110 }); 111 112}); 113 114</script> 115</body> 116</html> 117
試したこと
直前の$_POSTの値をvar_dumpで確認。
補足情報(FW/ツールのバージョンなど)
php8.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/04/14 08:29