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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

解決済

3回答

3756閲覧

完了画面の段階でデータベースに登録したいです。

berukokoko

総合スコア12

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

0クリップ

投稿2017/03/29 00:49

編集2017/03/29 00:54

###前提・実現したいこと
確認画面であるform2.phpで
データベースに保存できるか試しにやってみたところ登録できたのですが、
完了画面のform3.phpの段階でデータベースに登録したいです。
sectionを使って行いたいのですが、が、上手くできません。

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

form3.php

1Notice: Undefined index: name in C:\xampp\htdocs\reservation\form3.php on line 68 2Notice: Undefined index: np in C:\xampp\htdocs\reservation\form3.php on line 69 3Notice: Undefined index: tel in C:\xampp\htdocs\reservation\form3.php on line 70 4Notice: Undefined index: mail in C:\xampp\htdocs\reservation\form3.php on line 71 5Notice: Undefined index: monthly in C:\xampp\htdocs\reservation\form3.php on line 72 6Notice: Undefined index: daily in C:\xampp\htdocs\reservation\form3.php on line 73 7Notice: Undefined index: are in C:\xampp\htdocs\reservation\form3.php on line 74 8Notice: Undefined index: kan in C:\xampp\htdocs\reservation\form3.php on line 75 9SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null

###該当のソースコード
form.phpは入らなかったので省略しました。htmlだけです。

php

1form2.php 2<?php 3// セッションの開始 4 session_start(); 5?> 6 7<doctype html> 8<html class="export" lang="jp"> 9<head> 10 <meta charset="utf-8"> 11 <meta name="viewport" content="width=device-width"> 12 <meta name="Keywords" content=""> 13 <meta name="description" content=""> 14 <link rel="stylesheet" type="text/css" href="fonts/font-awesome-4.3.0/css/font-awesome.min.css" /> 15 <link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/earlyaccess/roundedmplus1c.css" /> 16 <link rel="stylesheet" type="text/css" href="../fonts/vicons/vicons-font.css" /> 17 <link rel="stylesheet" type="text/css" href="../css/reset.css" media="screen"> 18 <link rel="stylesheet" type="text/css" href="../css/common.css" media="screen"> 19 <link rel="stylesheet" type="text/css" href="../css/reservation.css" media="screen"> 20 <script src="../js/jquery.min.js" type="text/javascript"></script> 21 <title>ご予約</title> 22 <style> 23 </style> 24</head> 25<body> 26 <header> 27 <div id="topLogo"><img src="../img/logo.svg"></div> 28 <nav> 29 <button> 30 <img src="../img/mobileBtn.png" width="60" height="60"> 31 </button> 32 <ul> 33 <a href="#"><li>トップ</li></a> 34 <a href="#"><li>こだわり</li></a> 35 <a href="#"><li>メニュー</li></a> 36 <a href="#"><li>スタッフブログ</li></a> 37 <a href="#"><li>アクセス</li></a> 38 <a href="#"><li>ご予約</li></a> 39 <li id="closeMenu">ご予約</li> 40 </ul> 41 </nav> 42 </header> 43 44<div id="wrapper"> 45 <h1>確認画面</h1> 46<form method="post" action="form3.php"> 47<p>必須項目を確認の上、</p> 48<p>以下の条件でお間違いなければ送信してください。</p> 49 50 51<table border="1"> 52<!-- 名前 --> 53<tr> 54<th><p>お名前:</p></th> 55<td> 56<?php 57$name=$_POST['name']; 58if($name===""){ 59print 'お名前が入力されていません。'; 60}else{ 61print $name.'さん'; 62} 63?> 64</td></tr> 65 66<!-- 人数 --> 67<tr><th><p>人数:</p></th><td><?php 68$np =$_POST['np']; 69print $np.'人'; 70?></td></tr> 71 72<!-- 電話番号 --> 73<tr><th><p>電話番号:</p></th><td> 74<?php 75$tel = $_POST['tel']; 76print $tel; 77if($tel === ""){ 78header('Location: ./form.php');//入力されていなかったら元の画面に戻る。 79print '電話番号が入力されていません'; 80}else{ 81print $tel; 82} 83?></td></tr> 84 85 86<!-- メールアドレス --> 87<tr><th><p>Eメールアドレス:</p></th><td><?php 88$mail = $_POST['mail']; 89if($mail === ""){ 90print ''; 91}else{ 92print $mail; 93} 94?></td></tr> 95 96<!-- 予約月日 --> 97<tr><th><p>予約日時:</p></th><td> 98<?php 99$monthly = $_POST['monthly']; 100switch($monthly){ 101case 'a': 102print '1'; 103break; 104case 'b': 105print '2'; 106break; 107case 'c': 108print '3'; 109break; 110case 'd': 111print '4'; 112break; 113case 'e': 114print '5'; 115break; 116case 'f': 117print '6'; 118break; 119case 'g': 120print '7'; 121break; 122case 'h': 123print '8'; 124break; 125case 'i': 126print '9'; 127break; 128case 'j': 129print '10'; 130break; 131case 'k': 132print '11'; 133break; 134case 'l': 135print '12'; 136break; 137} 138?>139 140<?php 141$daily = $_POST['daily']; 142switch($daily){ 143case 'a': 144print '1'; 145break; 146case 'b': 147print '2'; 148break; 149case 'c': 150print '3'; 151break; 152case 'd': 153print '4'; 154break; 155case 'e': 156print '5'; 157break; 158case 'f': 159print '6'; 160break; 161case 'g': 162print '7'; 163break; 164case 'h': 165print '8'; 166break; 167case 'i': 168print '9'; 169break; 170case 'j': 171print '10'; 172break; 173case 'k': 174print '11'; 175break; 176case 'l': 177print '12'; 178break; 179} 180?>181<?php 182$daily = $_POST['time']; 183switch($daily){ 184case 'a': 185print '1'; 186break; 187case 'b': 188print '2'; 189break; 190case 'c': 191print '3'; 192break; 193case 'd': 194print '4'; 195break; 196case 'e': 197print '5'; 198break; 199case 'f': 200print '6'; 201break; 202case 'g': 203print '7'; 204break; 205case 'h': 206print '8'; 207break; 208case 'i': 209print '9'; 210break; 211case 'j': 212print '10'; 213break; 214case 'k': 215print '11'; 216break; 217case 'l': 218print '12'; 219break; 220} 221?>時頃 222</td></tr> 223 224 225<!-- アレルギーの有無 --> 226<tr><th><p>アレルギーの有無:</p></th><td> 227<?php 228$checkbox = $_POST['checkbox']; 229 230foreach ((array)$checkbox as $value) { 231print $value . '<br>'; 232print '<input type="hidden" name="checkbox[]" value="' . $value . '">'; 233} 234?> 235</td></tr> 236 237 238 239<!-- あると答えた方へ --> 240<tr><th>あると答えた方へ</th> 241<td> 242<?php 243$are=$_POST['are']; 244if($are === ""){ 245print ''; 246}else{ 247print $are; 248} 249?> 250</td> 251</tr> 252 253 254<!-- その他 --> 255<tr><th><p>ご感想:</p></th><td> 256<?php 257$kan=$_POST['kan']; 258if($kan === ""){ 259print ''; 260}else{ 261print $kan; 262} 263?></td></tr> 264</table> 265 266<input type="submit" value="確定"> 267<input type="button" onclick="history.back()" value="戻る"> 268</form> 269 270<?php 271$_SESSION['name'] = $_POST['name']; 272print '中身は'.$name.'です'.'<br>'; 273print 'セッションの中身は'.$_SESSION['name'].'です'.'<br>'; 274?> 275 276 277 278 279 280</div><!-- #wrapper --> 281<footer> 282 Copyright@2007-2015 All Rights Reserved 283</footer> 284<script src="../js/style.js"></script> 285 286</body> 287</html> 288

php

1form3.php 2<?php 3session_start(); 4?> 5 6<doctype html> 7<html class="export" lang="jp"> 8<head> 9<meta charset="utf-8"> 10 <meta name="viewport" content="width=device-width"> 11 <meta name="Keywords" content=""> 12 <meta name="description" content=""> 13 <link rel="stylesheet" type="text/css" href="fonts/font-awesome-4.3.0/css/font-awesome.min.css" /> 14 <link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/earlyaccess/roundedmplus1c.css" /> 15 <link rel="stylesheet" type="text/css" href="../fonts/vicons/vicons-font.css" /> 16 <link rel="stylesheet" type="text/css" href="../css/reset.css" media="screen"> 17 <link rel="stylesheet" type="text/css" href="../css/common.css" media="screen"> 18 <link rel="stylesheet" type="text/css" href="../css/reservation.css" media="screen"> 19 <script src="../js/jquery.min.js" type="text/javascript"></script> 20 <title>ご予約</title> 21 <style> 22 </style> 23</head> 24<body> 25 <header> 26 <div id="topLogo"><img src="../img/logo.svg"></div> 27 <nav> 28 <button> 29 <img src="../img/mobileBtn.png" width="60" height="60"> 30 </button> 31 <ul> 32 <a href="#"><li>トップ</li></a> 33 <a href="#"><li>こだわり</li></a> 34 <a href="#"><li>メニュー</li></a> 35 <a href="#"><li>スタッフブログ</li></a> 36 <a href="#"><li>アクセス</li></a> 37 <a href="#"><li>ご予約</li></a> 38 <li id="closeMenu">ご予約</li> 39 </ul> 40 </nav> 41 </header> 42 43<div id="wrapper"> 44 45 46<!-- DBへデータを登録する。 --> 47<?php 48$db_user ="root"; 49$db_pass = ''; 50$db_host="localhost"; 51$db_name="sample01"; 52$db_type="mysql"; 53$dsn="$db_type:host=$db_host; dbname=$db_name;charset=utf8"; 54 55try{ 56$pdo = new PDO($dsn,$db_user,$db_pass); 57$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 58$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 59print '接続成功しました'; 60} 61 62catch(PDOException $Exception){ 63die("接続エラー:{$Exception->getMessage()}"); 64} 65try{ 66$pdo->beginTransaction(); 67$sql="INSERT INTO formtable(name,np,tel,mail,monthly,daily,are,kan)VALUES(:name,:np,:tel,:mail,:monthly,:daily,:are,:kan)"; 68$stmh=$pdo->prepare($sql); 69$stmh->bindValue(':name',$_POST['name'],PDO::PARAM_STR); 70$stmh->bindValue(':np',$_POST['np'],PDO::PARAM_STR); 71$stmh->bindValue(':tel',$_POST['tel'],PDO::PARAM_INT); 72$stmh->bindValue(':mail',$_POST['mail'],PDO::PARAM_STR); 73$stmh->bindValue(':monthly',$_POST['monthly'],PDO::PARAM_STR); 74$stmh->bindValue(':daily',$_POST['daily'],PDO::PARAM_INT); 75$stmh->bindValue(':are',$_POST['are'],PDO::PARAM_STR); 76$stmh->bindValue(':kan',$_POST['kan'],PDO::PARAM_STR); 77$stmh->execute(); 78$pdo->commit(); 79print "データを".$stmh->rowCount()."件入れました。"; 80} 81catch(PDOException $Exception){ 82$pdo->rollBack(); 83print $Exception->getMessage(); 84} 85?> 86 87<h1>送信完了</h1> 88<p>完了いたしました。</p> 89<p>ありがとうございます。</p> 90</div><!-- #wrapper --> 91<footer> 92 Copyright@2007-2015 All Rights Reserved 93</footer> 94<script src="../js/style.js"></script> 95 96</body> 97</html> 98

###補足情報(言語/FW/ツール等のバージョンなど)
XAMPPを使っています。

###試したこと
調べてもよくわからず
何日も悩んでいるのでどうすればよいか教えていただきたいです。
いろいろおかしいところがあるかもしれませんがよろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

以下のように行えると思いますが、いかがでしょう。
0. form1.phpから受け取ったデータをform2.phpでセッション変数に格納する。
0. セッション変数に格納したデータをform3.phpで使う。

form1.php

PHP

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="utf-8"> 5 <title>タイトル</title> 6 <style type="text/css"> 7 * { 8 margin: 0; 9 padding: 0; 10 } 11 </style> 12</head> 13<body> 14<form action="form2.php" method="post"> 15 <label>項目1: 16 <input type="text" name="text1"> 17 </label> 18 <label>項目2: 19 <input type="text" name="text2"> 20 </label> 21 <input type="submit"> 22</form> 23</body> 24</html>

form2.php

PHP

1<?php 2session_start(); 3if ($_SERVER["REQUEST_METHOD"] === "POST") { 4 if (isset($_POST["text1"]) && isset($_POST["text2"])) { 5 $_SESSION["text1"] = $_POST["text1"]; 6 $_SESSION["text2"] = $_POST["text2"]; 7 } 8} 9?> 10<!DOCTYPE html> 11<html lang="ja"> 12<head> 13 <meta charset="utf-8"> 14 <title>タイトル(確認画面)</title> 15</head> 16<body> 17<ul> 18 <li><?php echo htmlspecialchars($_SESSION["text1"], ENT_QUOTES, "UTF-8"); ?></li> 19 <li><?php echo htmlspecialchars($_SESSION["text2"], ENT_QUOTES, "UTF-8"); ?></li> 20</ul> 21<form action="form3.php" method="post"> 22 <input type="submit"> 23</form> 24</body> 25</html>

form3.php

PHP

1<?php 2session_start(); 3echo htmlspecialchars($_SESSION["text1"], ENT_QUOTES, "UTF-8") . ","; 4echo htmlspecialchars($_SESSION["text2"], ENT_QUOTES, "UTF-8");

投稿2017/03/29 01:37

s8_chu

総合スコア14731

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

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

berukokoko

2017/03/29 03:48 編集

回答ありがとうございました! 回答の通り見よう見まねでやってみたところ、上手く登録できました! ありがとうございます
guest

0

ユーザーから送られてきたデータをバリデートしたら
セッションに保管しておかなくては意味がありません。
再度formで送られてきたらまたバリデートが必要です。
登録ページでは基本的にセッションからデータを受け取り
登録が完了すればセッションデータを消して登録完了ページへ
セッションデータが不足しているようであれば
登録失敗ページへ飛ぶのがよいでしょう。
そうしておけば登録完了のページをリロードされて
二重登録になるのも防げます

投稿2017/03/29 02:15

yambejp

総合スコア114779

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

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

berukokoko

2017/03/29 03:58

回答ありがとうございました! バリデートというのはバリデーションチェックのことなのでしょうか・・・? リロードすると二重登録になる恐れがあるのですね・・・
guest

0

Undefined index: name
は、nameがPOSTの中にないのではないでしょうか?
みたところ、form2.phpにname用のhiddenがありませんでした。

さらに$_POST['name']がnullのため、DBに登録する際に、columnのnameがnot nullのため
怒られているように見えます。

投稿2017/03/29 01:09

s.t.

総合スコア2021

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

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

berukokoko

2017/03/29 03:46

回答ありがとうございました! おっしゃる通り、nameが来てないと思います・・・ 質問なのですがhiddenはなんのために行うのでしょうか・・・? データを隠すものと出てきたのですがそれを書く意味が分からず・・・
s.t.

2017/03/30 02:00

hiddenは極端にいってしまうと、確認画面に埋め込まれる隠しフォームだと思ってください。 最初のフォームはテキストエリアやチェックボックスをPOSTで送信していますが、 確認画面ではnameなどは表示されているだけですね。 確認画面から完了画面へまたPOSTで送信するために、 formを利用してhiddenで与えたパラメータを送ってあげるのです。 つまり、 <input type="hidden" name="name" value="hoge"> としておけば、 次のページで$_POST["name"]にhogeという値が入ることになります。 hiddenになっているのでHTML上には表示されません。
berukokoko

2017/04/02 06:31 編集

お返事遅くなって申し訳ありません。 なるほど、hiddenもデータを送る方法の1つなのですね! 表には見えないけど仕組むことで次のページにデータを送ることが 可能なのですね。 理解できました。 わざわざ回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問