前提・実現したいこと
データベースへの値の登録
発生している問題・エラーメッセージ
データベースと連携はできているのに入力した値がデータベースに登録されません
エラーは出ておらず、DB連携のtryは接続に成功しています。
該当のソースコード
php
1register.php 2<?php 3// ここでセッションに記録しないとページが遷移した時にPOSTの情報が保持されない 4session_start(); 5 6if (!empty($_POST)) { 7 8// フォームのバリデーション 9 if ($_POST['your_name'] =='') { 10 $error['your_name'] = 'blank'; 11 } 12 13 if ($_POST['email'] =='') { 14 $error['your_email'] = 'blank'; 15 } 16 17 if ($_POST['your_name'] =='') { 18 $error['your_name'] = 'blank'; 19 } 20 21 // 最初ここcount()で判定してたけどcountは配列の要素の数にしか使えないのだった 22 if (strlen($_POST['password']) < 4) { 23 $error['password'] = 'lnegth'; 24 } 25 26 if ($_POST['password'] != $_POST['password2']) { 27 $error['password'] = 'wrong'; 28 } 29 if (!isset($_POST['check'])) { 30 $error['check'] = 'empty'; 31 } 32 33 if (empty($error)) { 34 // $_POSTの情報を$_SESSION['join']の中に格納している 35 // 次のページで使うには$_SESSION['join']['hogeehoge']で利用できる 36 $_SESSION['join'] = $_POST; 37 header('Location:confirm.php'); 38 exit(); 39 } 40} 41 42print_r($error); 43 44?> 45<!DOCTYPE html> 46<html lang="ja"> 47 <head> 48 <meta charset="UTF-8" /> 49 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 50 <title>Document</title> 51 </head> 52 <body> 53 <form action="./register.php" method="post"> 54 <label for="name" 55 >お名前<br /> 56 <?php if($error['your_name'] === 'blank'): ?> 57 <p>空白です</p> 58 <?php endif; ?> 59 <input type="text" name="your_name" id="name" /> </label 60 ><br /><br /> 61 <label for="email" 62 >メールアドレス<br /> 63 <?php if($error['email'] === 'blank'): ?> 64 <p>空白です</p> 65 <?php endif; ?> 66 <input type="email" name="email" autocomplete="off"/> </label 67 ><br /><br /> 68 <label for="password" 69 >パスワード<br /> 70 <?php if($error['password'] === 'blank'): ?> 71 <p>空白です</p> 72 <?php endif; ?> 73 <?php if($error['password'] === 'length'): ?> 74 <p>長さがたりません</p> 75 <?php endif; ?> 76 <?php if($error['password'] === 'wrong'): ?> 77 <p>確認用のパスワードと違います</p> 78 <?php endif; ?> 79 <input type="password" name="password" id="password" /> </label 80 ><br /><br /> 81 <label for="password2" 82 >パスワード再入力<br /> 83 <input type="password" name="password2" id="password2" /> </label 84 ><br /><br /> 85 <label for="url" 86 >ホームページ<br /> 87 <input type="text" name="url" /> </label 88 ><br /><br /> 89 <label for="gender" 90 >性別<br /> 91 <input type="radio" name="gender" value="man" />男性 92 <input type="radio" name="gender" value="woman" />女性 </label 93 ><br /><br /> 94 <label for="age" 95 >年齢<br /> 96 <input 97 type="number" 98 name="age" 99 id="age" 100 placeholder="選択してください" 101 /> </label 102 ><br /><br /> 103 <label for="check"> <input type="checkbox" name="check" /> </label 104 >注意事項に同意する<br /><br /> 105 <?php if($error['check'] === 'empty'): ?> 106 <p>チェックがされていません</p> 107 <?php endif; ?> 108 <input type="submit" value="送信する" name="submited" /> 109 </form> 110 </body> 111</html> 112
PHP
1confirm.php 2<?php 3// if(!isset($_SESSION['join'])) { 4// header('Location:register.php'); 5// exit(); 6// } 7session_start(); 8 9require './db_connetction.php'; 10 11// htmlspecialcharsで入力でのXSS防止 12function h($str) { 13 return htmlspecialchars($str,ENT_QUOTES); 14} 15 16// データベースに入力ができない 17if(!empty($_POST)) { 18 $stmt = $pdo->prepare('INSERT INTO users SET name = ? , email = ? , password = ? , gender = ? , age = ?'); 19 $stmt->bindValue(1 , $_SESSION['join']['your_name']); 20 $stmt->bindValue(2 , $_SESSION['join']['email']); 21 $stmt->bindValue(3 , sha1($_SESSION['join']['password'])); 22 $stmt->bindValue(4 , $_SESSION['join']['gender']); 23 $stmt->bindValue(5 , $_SESSION['join']['age']); 24 $stmt-> execute(); 25} 26 27var_dump($_SESSION['join']); 28 29 30?> 31 32<!DOCTYPE html> 33<html lang="ja"> 34<head> 35<meta charset="UTF-8"> 36<meta name="viewport" content="width=device-width, initial-scale=1.0"> 37<title>Document</title> 38</head> 39<body> 40<form action="./thanks.php" method="post"> 41 <label for="name">お名前:<?php echo h($_SESSION['join']['your_name']) ?><br> 42 </label><br><br> 43 <label for="email">メールアドレス:<?php echo h($_SESSION['join']['email']) ?><br> 44 </label><br><br> 45 <label for="password">パスワード:表示されません<br> 46 </label><br><br> 47 <label for="url">ホームページ:<?php echo h($_SESSION['join']['url']) ?> 48 </label><br><br> 49 <label for="gender">性別:<?php echo h($_SESSION['join']['gender']) ?><br> 50 </label><br><br> 51 <label for="age">年齢<?php echo h($_SESSION['join']['age']) ?><br> 52 </label><br><br> 53 <p>この情報でお間違い無いですか?</p> 54 <input type="submit" value="間違い無いので送信する" name="submited"> 55</form> 56</body> 57</html>
php
1db_connection.php 2<?php 3 4const DB_HOST = 'mysql:dbname=udemy_php;host=127.0.0.1'; 5const DB_USER = 'php_user'; 6const DB_PASSWORD = 'password123'; 7 8 9try { 10 $pdo = new PDO(DB_HOST,DB_USER,DB_PASSWORD,[ 11 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 12 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 13 PDO::ATTR_EMULATE_PREPARES => false, 14 ]); 15 echo '接続成功'; 16 17} catch(PDOException $e){ 18 echo '接続失敗' . $e->getMessage() . "\n"; 19 exit(); 20};
試したこと
PDOメソッドの記入方法について調べ、それと同じように記述しました
補足情報(FW/ツールのバージョンなど)
PHP7.3
コードやエラーはマークダウンのcode機能を利用してご提示ください。
https://teratail.com/questions/238564
また、質問テンプレート文言は削り、項目はなるべくすべて書いて埋めてください。
質問は編集できます。
回答1件
あなたの回答
tips
プレビュー