前提・実現したいこと
PHPからMySQL(InnoDB)にデータを登録したいです。
Windowsで、
XAMPP 7.3.2(PHP 7.3.2)を使用しています。
発生している問題・エラーメッセージ
下記PHP文でデータを登録したいのですが、
・pro_add_done.php
に$pro_name
の値が反映されない
・pro_add_check.php
内で"hidden"
で渡しているはずのname
の値が、
テーブルmst_product
のフィールドname
に登録されない
という状況に陥っており、これを解決したいです。
phpMyadmin上から直接SQL文を打ち込むと登録はされます。
問題カ所が見つけることが出来ず、ご意見伺えれば幸いです。
※超初心者で「気付けばプロ並みPHP改訂版」を見ながらやっております。
pro_add.html
html
1<!DOCKTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>ろくまる農園</title> 6</head> 7 8<body> 9 商品追加<br> 10 <br> 11 <form method="post" action="pro_add_check.php"> 12 商品名を入力してください。<br> 13 <input type="text" name="name" style="width:200px"><br> 14 価格を入力してください。<br> 15 <input type="text" name="price" style="width:50px"><br> 16 <br> 17 <br> 18 <input type="button" onclick="history.back()" value="戻る"> 19 <input type="submit" value="登録"> 20 </form> 21</body> 22</html>
pro_add_check.php
php
1<!DOCKTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>ろくまる農園</title> 6</head> 7 8<body> 9<?php 10$pro_name = $_POST['name']; 11$pro_price = $_POST['price']; 12$pro_name = htmlspecialchars($pro_name,ENT_QUOTES,'UTF-8'); 13$pro_price = htmlspecialchars($pro_price,ENT_QUOTES,'UTF-8'); 14 15if($pro_name == '') { 16 echo '商品名が入力されていません。<br>'; 17} else { 18 echo '商品名:'; 19 echo $pro_name; 20 echo '<br><br>'; 21} 22if(preg_match('/\A[0-9]+\z/', $pro_price) == 0) { 23 echo '価格をキチンと入力してください。<br>'; 24} else { 25 echo '価格:'; 26 echo $pro_price; 27 echo '円<br><br>'; 28} 29 30if($pro_name = '' || preg_match('/\A[0-9]+\z/', $pro_price) == 0) { 31 echo '<form><br>'; 32 echo '<input type="button" onclick="history.back()" value="戻る">'; 33 echo '</form>'; 34} else { 35 echo '上記の商品を追加します。<br><br>'; 36 echo '<form method="post" action="pro_add_done.php">'; 37 echo '<input type="hidden" name="name" value="'. $pro_name .'">'; 38 echo '<input type="hidden" name="price" value="'. $pro_price .'">'; 39 echo '<input type="button" onclick="history.back()" value="戻る">'; 40 echo ' <input type="submit" value="登録">'; 41 echo '</form>'; 42} 43?> 44 45</body> 46</html> 47
pro_add_done.php
php
1<!DOCKTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>ろくまる農園</title> 6</head> 7 8<body> 9<?php 10try { 11 $pro_name = $_POST['name']; 12 $pro_price = $_POST['price']; 13 $pro_name = htmlspecialchars($pro_name,ENT_QUOTES,'UTF-8'); 14 $pro_price = htmlspecialchars($pro_price,ENT_QUOTES,'UTF-8'); 15 16 $dsn = 'mysql:dbname=shop;host=localhost;charset=utf8'; 17 $user = 'root'; 18 $password = '1234567890'; 19 $dbh = new PDO($dsn,$user,$password); 20 $dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 21 22 $sql = 'INSERT INTO mst_product (name,price) VALUES (?,?)'; 23 $stmt = $dbh->prepare($sql); 24 $data[] = $pro_name; 25 $data[] = $pro_price; 26 $stmt->execute($data); 27 28 $dbh = null; 29 30 echo $pro_name; 31 echo 'を追加しました。<br>'; 32} 33catch(Exception $e) { 34 echo 'ただいま障害によりご迷惑をおかけしております。'; 35 exit(); 36} 37 38?> 39 40<a href="pro_list.php">戻る</a> 41</body> 42</html> 43
その他設定
host:localhost
user:root
password:1234567890
phpMyadmin管理画面では、
「サーバ: 127.0.0.1」←ここがlocalhostになっていないことが気になってもいます。
「データベース:shop」
「テーブル:mst_product」
となっています。
回答3件
あなたの回答
tips
プレビュー