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

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

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

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

解決済

2回答

350閲覧

PHPからMysqlへINSERT処理を行いデータベースを追加したい。

molt

総合スコア12

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

1クリップ

投稿2019/04/29 09:18

前提・実現したいこと

PHPからMysqlへINSERT処理を行いデータベースを追加したい。
PHP, Mysql初心者です。過去記事見たり、その他サイトを見ましたが、関連していなそうでした。

発生している問題・エラーメッセージ

PHPでMysqlへINSERT処理を行いたいのですが、データベースにデータが飛びません。
エラー表示もされず、何が間違いなのか調べてもわかりません。

該当のソースコード

PHP

1//index.php 2 3<?php 4session_start(); 5 6if(!empty($_POST)){ 7 if($_POST['nameSei']==''){ 8 $error['nameSei']='blank'; 9 } 10 if($_POST['nameMei']==''){ 11 $error['nameMei']='blank'; 12 } 13 if($_POST['address1']==''){ 14 $error['address1']='blank'; 15 } 16 $address1=strval($_POST['address1']); 17 if(strlen($address1) != 7){ 18 $error['address1']='length'; 19 } 20 21 if($_POST['address2']==''){ 22 $error['address2']='blank'; 23 } 24 if($_POST['phone']==''){ 25 $error['phone']='blank'; 26 } 27 28 if(empty($error)){ 29 $_SESSION['join']=$_POST; 30 header('Location:questionForm.php'); 31 exit(); 32 } 33} 34?> 35 36<!DOCTYPE html> 37<html lang="ja"> 38 <head> 39 <meta charset="utf-8"> 40 <title>【練習】問い合わせフォーム</title> 41 </head> 42 <body> 43 <p><お問い合わせフォーム></p> 44 <form action="" method="post"> 45 <dl> 46 <dt>お名前</dt> 47 <dd> 48 【必須】姓:<input type="text", name="nameSei" size="7"> 49 <?php if(isset($error['nameSei']) && $error['nameSei'] == 'blank'): ?> 50 <label>姓を入力してください</label><br> 51 <?php endif; ?> 52 【必須】名:<input type="text", name="nameMei" size="7"> 53 <?php if(isset($error['nameMei']) && $error['nameMei'] == 'blank'): ?> 54 <label>名を入力してください</label> 55 <?php endif; ?> 56 </dd> 57 <dt>性別</dt> 58 <dd> 59 <input type="radio" name="gender" value="男性" checked>男性 60 <input type="radio" name="gender" value="女性">女性 61 </dd> 62 <dt>生年月日</dt> 63 <dd> 64 <select name="year"> 65 <?php 66 $now = date("Y"); 67 for($i=1900; $i<=$now; $i++): ?> 68 <option value="<?php echo $i;?>"><?php echo $i;?></option> 69 <?php endfor;?> 70 </select>71 <select name="month"> 72 <?php 73 $now = date("m"); 74 for($i=1; $i<=12; $i++): ?> 75 <option value="<?php echo $i;?>"><?php echo $i;?></option> 76 <?php endfor;?> 77 </select>78 <select name="day"> 79 <?php 80 $now = date("d"); 81 for($i=1; $i<=31; $i++): ?> 82 <option value="<?php echo $i;?>"><?php echo $i;?></option> 83 <?php endfor;?> 84 </select>85 </dd> 86 <dt>〒郵便番号【必須】</dt> 87 <dd> 88 <input type="text" name="address1"> 89 <?php if(isset($error['address1']) && $error['address1'] == 'blank'):?> 90 <label>郵便番号を入力してください</label> 91 <?php endif; ?> 92 <?php if(isset($error['address1']) && $error['address1'] == 'length'):?> 93 <label>郵便番号を7桁入力してください</label> 94 <?php endif; ?> 95 </dd> 96 <dt>住所【必須】</dt> 97 <dd> 98 <input type="text" name="address2"> 99 <?php if(isset($error['address2']) && $error['address2'] = 'blank'):?> 100 <label>住所を入力してください</label> 101 <?php endif; ?> 102 </dd> 103 <dt>電話番号【必須】</dt> 104 <dd> 105 <input type="text" name="phone"> 106 <?php if(isset($error['phone']) && $error['phone'] = 'blank'):?> 107 <label>電話番号を入力してください</label> 108 <?php endif; ?> 109 </dd> 110 <dt>メールアドレス【任意】</dt> 111 <dd> 112 <input type="text" name="email"> 113 </dd> 114 <dt>お問い合わせ内容</dt> 115 <dd> 116 <textarea name="question" rows="10" cols="50"></textarea> 117 </dd> 118 </dl> 119 <input type="submit" value="送信"> 120 </form> 121 </body> 122</html>

PHP

1//questionForm.php 2 3<?php 4session_start(); 5 6try{ 7 $db=new PDO('mysql:dbname=practice;host=127.0.0.1;charset=utf8','root',''); 8}catch (PDOException $e){ 9 echo 'DB接続エラー:'. $e->getMessage(); 10} 11 12if(!isset($_SESSION['join'])){ 13 header('Location:index.php'); 14 exit(); 15} 16 17if(!empty($_POST)){ 18 $statement=$db->prepare('INSERT INTO question_form SET nameSei=?, nameMei=?, gender=?, year=?, address1=?, address2=?, phone=?, email=?, question=?, created=NOW()'); 19 echo $ret=$statement->execute(array( 20 $_SESSION['join']['nameSei'], 21 $_SESSION['join']['nameMei'], 22 $_SESSION['join']['gender'], 23 $_SESSION['join']['year'], 24 $_SESSION['join'],['address1'], 25 $_SESSION['join'],['address2'], 26 $_SESSION['join'],['phone'], 27 $_SESSION['join'],['email'], 28 $_SESSION['join'],['question'], 29 $_SESSION['join'],['created'], 30 )); 31 unset($_SESSION['join']); 32 33 header('Location: Receive.php'); 34 exit(); 35} 36?> 37 38<!DOCTYPE html> 39<html lang="ja"> 40 <head> 41 <meta charset="utf-8"> 42 <title>【練習】問い合わせフォーム</title> 43 </head> 44 <body> 45 <p>【受け付けました】お問い合わせ内容</p> 46 <form action="" method="post"> 47 <input type="hidden" name="action" value="submit"> 48 <dl> 49 <dt>お名前</dt> 50 <dd> 51 姓:<?php echo htmlspecialchars($_SESSION['join']['nameSei'], ENT_QUOTES);?><br> 52 名:<?php echo htmlspecialchars($_SESSION['join']['nameMei'], ENT_QUOTES);?> 53 </dd> 54 <dt>性別</dt> 55 <dd> 56 <?php echo htmlspecialchars($_SESSION['join']['gender'], ENT_QUOTES);?> 57 </dd> 58 <dt>生年月日</dt> 59 <dd> 60 <?php echo htmlspecialchars($_SESSION['join']['year'], ENT_QUOTES);?>61 <?php echo htmlspecialchars($_SESSION['join']['month'], ENT_QUOTES);?>62 <?php echo htmlspecialchars($_SESSION['join']['day'], ENT_QUOTES);?>63 </dd> 64 <dt>〒郵便番号</dt> 65 <dd> 66 <?php echo htmlspecialchars($_SESSION['join']['address1'], ENT_QUOTES);?> 67 </dd> 68 <dt>住所</dt> 69 <dd> 70 <?php echo htmlspecialchars($_SESSION['join']['address2'], ENT_QUOTES);?> 71 </dd> 72 <dt>電話番号</dt> 73 <dd> 74 <?php echo htmlspecialchars($_SESSION['join']['phone'], ENT_QUOTES);?> 75 </dd> 76 <dt>メールアドレス</dt> 77 <dd> 78 <?php if($_SESSION['join']['email'] == ''):?> 79 <label>未入力</label> 80 <?php endif; ?> 81 <?php echo htmlspecialchars($_SESSION['join']['email'], ENT_QUOTES);?> 82 </dd> 83 <dt>お問い合わせ内容</dt> 84 <dd> 85 <?php echo htmlspecialchars($_SESSION['join']['question']); ?> 86 </dd> 87 </dl> 88 </form> 89 </body> 90</html> 91

試したこと

・DBは接続できているようです。
・どうやら、questionForm.phpのif(!empty($_POST))以降が機能していないようです。
・SESSIONにデータは保存されることは確認し、quetionForm.php内のheader('Location: Receive.php');を削除すれば、問い合わせ内容が表示できます。

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

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

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

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

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

m.ts10806

2019/04/29 09:58

>データベースを追加したい。 表現の問題かと思いますが「データベース」は「データが格納される大きな括りそのもの」ですので 実際にINSERTによって追加されるのは「データ」です(もともと「ベース」は「基地」の意味ですし) そのあたり表現調整された方が読む方も「ん?」とならなくて済むと思います。 また、PDOException を捕捉するのであれば、接続時だけでなく、SQL送信部分も含まれた方が「根本原因」調査に役立つので、PDOException を拾う位置を調整して確認した結果を追記してください。
molt

2019/04/29 12:07

下記リンクを参考に、コードを変更してみました。 結果、変化なしです。コード間違えてましたでしょうか。 https://teratail.com/questions/4366 try{ $db=new PDO('mysql:dbname=practice;host=127.0.0.1;charset=utf8','root',''); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //追記 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //追記 echo "接続OK"; if(!empty($_POST)){ $statement=$db->prepare('INSERT INTO question_form (nameSei, nameMei, gender, year, address1, address2, phone, email, question, created) values (?,?,?,?,?,?,?,?,?,NOW())'); echo $ret=$statement->execute(array( $_SESSION['join']['nameSei'], $_SESSION['join']['nameMei'], $_SESSION['join']['gender'], $_SESSION['join']['year'], $_SESSION['join'],['address1'], $_SESSION['join'],['address2'], $_SESSION['join'],['phone'], $_SESSION['join'],['email'], $_SESSION['join'],['question'], $_SESSION['join'],['created'], )); } }catch (PDOException $e){ echo 'DB接続エラー:'. $e->getMessage(); }
m.ts10806

2019/04/29 12:18

質問は編集できますので適宜調整いただければと。 あと、SQLが元から変更されてるのでSQLの構文ミスなどなければ拾えないでしょう…
molt

2019/04/29 13:07 編集

コメント記載内容がよくなかったですね。失礼しました。 >PDOException を捕捉するのであれば、接続時だけでなく、SQL送信部分も含まれた方が「根本原因」調査に役立つので、PDOException を拾う位置を調整して確認した結果を追記してください。 こちらに対して、SQL送信部分を含んだ形として、下記コードを追記しました。 PDO('mysql:dbname=practice;host=127.0.0.1;charset=utf8','root',''); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //追記 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //追記 記載内容間違っていましたでしょうか。
guest

回答2

0

自己解決

自己解決できました。
問題点は2箇所でした。

1.['join']と['created']の間に,を入力している。,を多く入力している。
2.$_SESSION['join'],['created'],に関してはPOSTしていない為、記載しない。

投稿2019/05/02 03:41

molt

総合スコア12

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

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

0

uestionForm.php の if(!empty($_POST)){ のif文を下記のようにコメントアウトするとうまく動かないでしょうか。

php

1//if(!empty($_POST)){ 2 $statement=$db->prepare('INSERT INTO question_form SET nameSei=?, nameMei=?, gender=?, year=?, address1=?, address2=?, phone=?, email=?, question=?, created=NOW()'); 3 echo $ret=$statement->execute(array( 4 $_SESSION['join']['nameSei'], 5 $_SESSION['join']['nameMei'], 6 $_SESSION['join']['gender'], 7 $_SESSION['join']['year'], 8 $_SESSION['join'],['address1'], 9 $_SESSION['join'],['address2'], 10 $_SESSION['join'],['phone'], 11 $_SESSION['join'],['email'], 12 $_SESSION['join'],['question'], 13 $_SESSION['join'],['created'], 14 )); 15 unset($_SESSION['join']); 16 17 header('Location: Receive.php'); 18 exit(); 19//}

index.php において、下記のようにセッション変数を設定してリダイレクトしていますよね。

php

1 $_SESSION['join']=$_POST; 2 header('Location:questionForm.php');

uestionForm.php が処理すべきは $_SESSION['join'] であり、$_POST ではないと思います。

投稿2019/04/29 10:34

iwamot

総合スコア1154

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

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

molt

2019/04/29 10:57

コメント有難うございます。試してみました。 結果、Receive.phpには飛ぶのですがデータはSQLに飛ばないようです。。。
iwamot

2019/04/29 11:33

よく見たらINSERT文の構文がおかしいですね。UPDATE文とごっちゃになっていませんか? `INSERT INTO question_form (nameSei, nameMei, gender, year, address1, address2, phone, email, question, created) values (?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())` とするのが正しいのではないでしょうか。
molt

2019/04/29 12:02

コメント有難うございます。 トライしてみました。データは飛ばないようです。。。
iwamot

2019/04/29 12:10 編集

うまく動かないのであれば、変数の内容を確認するなど積極的にしてみてください。`header('Location: Receive.php');` の前に `var_dump($statement);` や `var_dump($ret);` といった行を入れてみるとどうなるでしょうか?
molt

2019/04/29 12:50

コメント有難うございます。うーん。。。変わらずですね泣。 よくわかるPHPを参考にコーディングしているのですが、泥沼化しています。
iwamot

2019/04/29 12:54

いや、変数の値がどうなっているのかがわかれば、エラーの原因が突き止められるのではないか、という話です。ご自身でいろいろ調べてみてください。リダイレクトさせるのをやめて変数の内容を出力してみてエラーの原因を推測するくらいは自力でできるはずです。
molt

2019/04/29 13:01

コメント有難うございます。検討してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問