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

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

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

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

2回答

1148閲覧

文字コードpdoのinsert into

退会済みユーザー

退会済みユーザー

総合スコア0

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2021/04/14 00:02

編集2021/04/14 11:00

前提・実現したいことど

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

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

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

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

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

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

guest

回答2

0

ベストアンサー

$stmt->execute([$mail, password_hash($pass)]);
$mail$passに誰がなんの値を詰めているのでしょう?

$_POST['email']$_POST['input_pass']由来の値を格納したいのでは?

投稿2021/04/14 01:22

編集2021/04/14 01:24
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2021/04/14 08:29

ありがとうございます。。 忘れていました。
guest

0

ざっとみた範囲では大きな間違いはなさそうです
$stmt->execute([$mail, password_hash($pass)])したあとに

PHP

1print "count:".$stmt->rowCount();

などで処理状況を確認するくらいでしょうか・・

投稿2021/04/14 00:29

yambejp

総合スコア116724

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問