前提・実現したいこと
現在ユーザー登録システムを作成しているのですがphpファイルで作成したコードが反映されません。
発生している問題・エラーメッセージ
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\MAMP\htdocs\sample\index.php:86 Stack trace: #0 C:\MAMP\htdocs\sample\index.php(86): PDOStatement->execute(Array) #1 {main} thrown in C:\MAMP\htdocs\sample\index.php on line 86
###ソースコード
```<?php error_reporting(E_ALL); //E_STRICTレベル以外のエラーを報告する ini_set('display_errors','On'); //画面にエラーを表示させるか //1.post送信されていた場合 if(!empty($_POST)){ define('MSG01','入力必須です'); define('MSG02','Emailの形式で入力してください'); define('MSG03','パスワード(再入力)があっていません。'); define('MSG04','半角英数字のみご利用いただけます'); define('MSG05','6文字以上で入力してください'); $err_flg = false; $err_msg = array(); //2.フォームが入力されていない場合 if(empty($_POST['email'])){ $err_msg['email'] = MSG01; } if(empty($_POST['pass'])){ $err_msg['pass'] = MSG01; } if(empty($_POST['pass_retype'])){ $err_msg['pass_retype'] = MSG01; } if(empty($err_msg)){ $email = $_POST['email']; $pass = $_POST['pass']; $pass_re = $_POST['pass_retype']; //3.emailの形式ではない場合 if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-z0-9._-]+)+$/",$email)){ $err_msg['email'] = MSG02; } //4.パスワードとパスワード再入力があっていない場合 if($pass !== $pass_re){ $err_msg['pass'] = MSG03; } if(empty($err_msg)){ //5.パスワードとパスワード再入力が半角英数字でない場合 if(!preg_match("/^[a-zA-Z0-9]+$/", $pass)){ $err_msg['pass'] = MSG04; }elseif(mb_strlen($pass) < 6){ //6/パスワードとパスワード再入力が6文字以上ではない場合 $err_msg['pass'] = MSG05; } if(empty($err_msg)){ //DBへの接続準備 $dsn = 'mysql:dbname=php_sample01;host=localhost;charset=utf8'; $user = 'root'; $password = 'root'; $options = array( //SQL実行失敗時に例外をスロー PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //デフォルトフェッチモードを連想配列形式に設定 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, //バッファードクエリを使う(一度に結果セットをすべて取得し、サーバー負担を軽減) //SELECTで得た結果に対してもrowcountメゾットを使えるようにする PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, ); //PDOオブジェクト生成(DBへ接続) $dbh = new PDO($dsn, $user, $password, $options); //SQL文(クエリー作成) $stmt = $dbh->prepare('INSERT INTO users (email,pass,login_time) VALUES (:email,:pass,login_time)'); //プレースホルダに基本セットし、SQL文を実行 $stmt->execute(array(':email' => $email, ':pass' => $pass, ':login_time' => date('Y-m-d H:i:s'))); header("Location:mypage.php");//マイページへ } } } } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ホームページのタイトル</title> <style> body{ margin: 0 auto; padding: 150px; width: 25%; background: #fafafa; } h1{ color: #545454; font-size: 20px;} form{ overflow: hidden; } input[type="text"]{ color: #545454; height: 60px; width: 100%; padding: 5px 10px; font-size: 16px; display: block; margin-bottom: 10px; box-sizing: border-box; } input[type="submit"]{ border: none; padding: 15px 30px; margin-bottom: 15px; background: #3d3938; color: white; float: right; } input[type="submit"]:hover{ background: #111; cursor: pointer; } a{ color: #545454; display: block; } a:hover{ text-decoration: none; } .err_msg{ color: #ff4d4b; } </style> </head> <body> <h1>ユーザー登録<h1> <form action="" method="post"> <span class="err_msg"><?php if(!empty($err_msg['email'])) echo $err_msg['email']; ?></span> <input type="text" name="email" placeholder="email"> <span class="err_msg"><?php if(!empty($err_msg['pass'])) echo $err_msg['pass']; ?></span> <input type="text" name="pass" placeholder="パスワード"> <span class="err_msg"><?php if(!empty($err_msg['pass_retype'])) echo $err_msg['pass_retype']; ?></span> <input type="text" name="pass_retype" placeholder="パスワード(再入力)"> <input type="submit" value="送信"> </form> <a href="mypage.php">マイページへ</a> </body> </html>
試したこと
コードを修正してみましたが反映されず。 ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー