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

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

ただいまの
回答率

90.34%

  • PHP

    21312questions

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

  • MySQL

    6162questions

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

  • phpMyAdmin

    685questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 723

berukokoko

score 5

前提・実現したいこと

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

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

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

該当のソースコード

form.phpは入らなかったので省略しました。htmlだけです。

form2.php
<?php
// セッションの開始
 session_start();
?>

<doctype html>
<html class="export" lang="jp">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <meta name="Keywords" content="">
  <meta name="description" content="">
  <link rel="stylesheet" type="text/css" href="fonts/font-awesome-4.3.0/css/font-awesome.min.css" />
  <link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/earlyaccess/roundedmplus1c.css"  />
  <link rel="stylesheet" type="text/css" href="../fonts/vicons/vicons-font.css" />
  <link rel="stylesheet" type="text/css" href="../css/reset.css" media="screen">
  <link rel="stylesheet" type="text/css" href="../css/common.css" media="screen">
  <link rel="stylesheet" type="text/css" href="../css/reservation.css" media="screen">
  <script src="../js/jquery.min.js" type="text/javascript"></script>
  <title>ご予約</title>
  <style>
  </style>
</head>
<body>
  <header>
    <div id="topLogo"><img src="../img/logo.svg"></div>
    <nav>
      <button>
        <img src="../img/mobileBtn.png" width="60" height="60">
      </button>
      <ul>
        <a href="#"><li>トップ</li></a>
        <a href="#"><li>こだわり</li></a>
        <a href="#"><li>メニュー</li></a>
        <a href="#"><li>スタッフブログ</li></a>
        <a href="#"><li>アクセス</li></a>
        <a href="#"><li>ご予約</li></a>
        <li id="closeMenu">ご予約</li>
      </ul>
    </nav>
  </header>

<div id="wrapper">
    <h1>確認画面</h1>
<form method="post" action="form3.php">
<p>必須項目を確認の上、</p>
<p>以下の条件でお間違いなければ送信してください。</p>


<table border="1">
<!-- 名前 -->
<tr>
<th><p>お名前:</p></th>
<td>
<?php
$name=$_POST['name'];
if($name===""){
print 'お名前が入力されていません。';
}else{
print $name.'さん';
}
?>
</td></tr>

<!-- 人数 -->
<tr><th><p>人数:</p></th><td><?php
$np =$_POST['np'];
print $np.'人';
?></td></tr>

<!-- 電話番号 -->
<tr><th><p>電話番号:</p></th><td>
<?php
$tel = $_POST['tel'];
print $tel;
if($tel === ""){
header('Location: ./form.php');//入力されていなかったら元の画面に戻る。
print '電話番号が入力されていません';
}else{
print $tel;
}
?></td></tr>


<!-- メールアドレス -->
<tr><th><p>Eメールアドレス:</p></th><td><?php
$mail = $_POST['mail'];
if($mail === ""){
print '';
}else{
print $mail;
}
?></td></tr>

<!-- 予約月日 -->
<tr><th><p>予約日時:</p></th><td>
<?php
$monthly = $_POST['monthly'];
switch($monthly){
case 'a':
print '1';
break;
case 'b':
print '2';
break;
case 'c':
print '3';
break;
case 'd':
print '4';
break;
case 'e':
print '5';
break;
case 'f':
print '6';
break;
case 'g':
print '7';
break;
case 'h':
print '8';
break;
case 'i':
print '9';
break;
case 'j':
print '10';
break;
case 'k':
print '11';
break;
case 'l':
print '12';
break;
}
?><?php
$daily = $_POST['daily'];
switch($daily){
case 'a':
print '1';
break;
case 'b':
print '2';
break;
case 'c':
print '3';
break;
case 'd':
print '4';
break;
case 'e':
print '5';
break;
case 'f':
print '6';
break;
case 'g':
print '7';
break;
case 'h':
print '8';
break;
case 'i':
print '9';
break;
case 'j':
print '10';
break;
case 'k':
print '11';
break;
case 'l':
print '12';
break;
}
?><?php
$daily = $_POST['time'];
switch($daily){
case 'a':
print '1';
break;
case 'b':
print '2';
break;
case 'c':
print '3';
break;
case 'd':
print '4';
break;
case 'e':
print '5';
break;
case 'f':
print '6';
break;
case 'g':
print '7';
break;
case 'h':
print '8';
break;
case 'i':
print '9';
break;
case 'j':
print '10';
break;
case 'k':
print '11';
break;
case 'l':
print '12';
break;
}
?>時頃
</td></tr>


<!-- アレルギーの有無 -->
<tr><th><p>アレルギーの有無:</p></th><td>
<?php
$checkbox = $_POST['checkbox'];

foreach ((array)$checkbox as $value) {
print $value . '<br>';
print '<input type="hidden" name="checkbox[]" value="' . $value . '">';
}
?>
</td></tr>



<!-- あると答えた方へ -->
<tr><th>あると答えた方へ</th>
<td>
<?php
$are=$_POST['are'];
if($are === ""){
print '';
}else{
print $are;
}
?>
</td>
</tr>


<!-- その他 -->
<tr><th><p>ご感想:</p></th><td>
<?php
$kan=$_POST['kan'];
if($kan === ""){
print '';
}else{
print $kan;
}
?></td></tr>
</table>

<input type="submit" value="確定">
<input type="button" onclick="history.back()" value="戻る">
</form>

<?php
$_SESSION['name'] = $_POST['name'];
print '中身は'.$name.'です'.'<br>';
print 'セッションの中身は'.$_SESSION['name'].'です'.'<br>';
?>





</div><!-- #wrapper -->
<footer>
  Copyright@2007-2015  All Rights Reserved
</footer>
<script src="../js/style.js"></script>

</body>
</html>
form3.php
<?php
session_start();
?>

<doctype html>
<html class="export" lang="jp">
<head>
<meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <meta name="Keywords" content="">
  <meta name="description" content="">
  <link rel="stylesheet" type="text/css" href="fonts/font-awesome-4.3.0/css/font-awesome.min.css" />
  <link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/earlyaccess/roundedmplus1c.css"  />
  <link rel="stylesheet" type="text/css" href="../fonts/vicons/vicons-font.css" />
  <link rel="stylesheet" type="text/css" href="../css/reset.css" media="screen">
  <link rel="stylesheet" type="text/css" href="../css/common.css" media="screen">
  <link rel="stylesheet" type="text/css" href="../css/reservation.css" media="screen">
  <script src="../js/jquery.min.js" type="text/javascript"></script>
  <title>ご予約</title>
  <style>
  </style>
</head>
<body>
  <header>
    <div id="topLogo"><img src="../img/logo.svg"></div>
    <nav>
      <button>
        <img src="../img/mobileBtn.png" width="60" height="60">
      </button>
      <ul>
        <a href="#"><li>トップ</li></a>
        <a href="#"><li>こだわり</li></a>
        <a href="#"><li>メニュー</li></a>
        <a href="#"><li>スタッフブログ</li></a>
        <a href="#"><li>アクセス</li></a>
        <a href="#"><li>ご予約</li></a>
        <li id="closeMenu">ご予約</li>
      </ul>
    </nav>
  </header>

<div id="wrapper">


<!-- DBへデータを登録する。 -->
<?php
$db_user ="root";
$db_pass = '';
$db_host="localhost";
$db_name="sample01";
$db_type="mysql";
$dsn="$db_type:host=$db_host; dbname=$db_name;charset=utf8";

try{
$pdo = new PDO($dsn,$db_user,$db_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
print '接続成功しました';
}

catch(PDOException $Exception){
die("接続エラー:{$Exception->getMessage()}");
}
try{
$pdo->beginTransaction();
$sql="INSERT INTO formtable(name,np,tel,mail,monthly,daily,are,kan)VALUES(:name,:np,:tel,:mail,:monthly,:daily,:are,:kan)";
$stmh=$pdo->prepare($sql);
$stmh->bindValue(':name',$_POST['name'],PDO::PARAM_STR);
$stmh->bindValue(':np',$_POST['np'],PDO::PARAM_STR);
$stmh->bindValue(':tel',$_POST['tel'],PDO::PARAM_INT);
$stmh->bindValue(':mail',$_POST['mail'],PDO::PARAM_STR);
$stmh->bindValue(':monthly',$_POST['monthly'],PDO::PARAM_STR);
$stmh->bindValue(':daily',$_POST['daily'],PDO::PARAM_INT);
$stmh->bindValue(':are',$_POST['are'],PDO::PARAM_STR);
$stmh->bindValue(':kan',$_POST['kan'],PDO::PARAM_STR);
$stmh->execute();
$pdo->commit();
print "データを".$stmh->rowCount()."件入れました。";
}
catch(PDOException $Exception){
$pdo->rollBack();
print $Exception->getMessage();
}
?>

<h1>送信完了</h1>
<p>完了いたしました。</p>
<p>ありがとうございます。</p>
</div><!-- #wrapper -->
<footer>
  Copyright@2007-2015  All Rights Reserved
</footer>
<script src="../js/style.js"></script>

</body>
</html>

補足情報(言語/FW/ツール等のバージョンなど)

XAMPPを使っています。

試したこと

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+3

以下のように行えると思いますが、いかがでしょう。

  1. form1.phpから受け取ったデータをform2.phpでセッション変数に格納する。
  2. セッション変数に格納したデータをform3.phpで使う。

form1.php

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>タイトル</title>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
<form action="form2.php" method="post">
    <label>項目1:
        <input type="text" name="text1">
    </label>
    <label>項目2:
        <input type="text" name="text2">
    </label>
    <input type="submit">
</form>
</body>
</html>

form2.php

<?php
session_start();
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    if (isset($_POST["text1"]) && isset($_POST["text2"])) {
        $_SESSION["text1"] = $_POST["text1"];
        $_SESSION["text2"] = $_POST["text2"];
    }
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>タイトル(確認画面)</title>
</head>
<body>
<ul>
    <li><?php echo htmlspecialchars($_SESSION["text1"], ENT_QUOTES, "UTF-8"); ?></li>
    <li><?php echo htmlspecialchars($_SESSION["text2"], ENT_QUOTES, "UTF-8"); ?></li>
</ul>
<form action="form3.php" method="post">
    <input type="submit">
</form>
</body>
</html>

form3.php

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/29 12:48 編集

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

    キャンセル

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/29 12:46

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

    キャンセル

  • 2017/03/30 11:00

    hiddenは極端にいってしまうと、確認画面に埋め込まれる隠しフォームだと思ってください。

    最初のフォームはテキストエリアやチェックボックスをPOSTで送信していますが、
    確認画面ではnameなどは表示されているだけですね。

    確認画面から完了画面へまたPOSTで送信するために、
    formを利用してhiddenで与えたパラメータを送ってあげるのです。

    つまり、
    <input type="hidden" name="name" value="hoge">
    としておけば、
    次のページで$_POST["name"]にhogeという値が入ることになります。
    hiddenになっているのでHTML上には表示されません。

    キャンセル

  • 2017/04/02 15:30 編集

    お返事遅くなって申し訳ありません。

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

    キャンセル

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/29 12:58

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

    キャンセル

同じタグがついた質問を見る

  • PHP

    21312questions

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

  • MySQL

    6162questions

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

  • phpMyAdmin

    685questions

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