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

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

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

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

Q&A

解決済

2回答

5166閲覧

【PHP】お問い合わせフォームに入力されたデータをデータベースに格納するプログラムについて

bh_C

総合スコア31

PHP

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

0グッド

0クリップ

投稿2015/04/28 03:32

・前回、myAdminを使用して作成したテーブルをPHPファイルとリンクについて質問させていただきました。
mysql関数が非推奨とのご指摘も頂きましたがまずこれを使って完成させたく思ってます。
・データベースの接続には成功したのです、SQLにつながりません。これはmyadminで作ったものが正しくないのか、
ソースコードが間違っているのか、あるいはやはり関数が非推奨だからなのか

ご存知の方が居られましたらご教授ください

lang

1 2<?php 3//フォームから格納されたかを判定 4if(isset($_POST['name']) && isset($_POST['phone']) && isset($_POST['mail']) && isset($_POST['message'])){ 5 6 $hostname = "localhost"; //ホスト名 7 $userid = "ユーザ名"; //データベースユーザ名 8 $passwd = ""; //接続パスワード 9 $dbname = "データベース名"; //データベース名 10 $DB = mysql_connect($hostname,$userid,$passwd,$dbname); //db接続に必要な情報を変数に入れる 11 12 //データベースに接続 13 if(!$DB){ 14 echo "接続失敗<br />"; 15 exit; 16 }else{ 17 echo "接続成功<br />"; 18 } 19 20 //データベース選択 21 $db_selected = mysql_select_db($dbname, $DB); 22 if (!$db_selected){ 23 echo "db選択失敗<br />"; 24 exit; 25 }else{ 26 echo "db選択成功<br />"; 27 } 28 29 //mysqlの文字コード設定 30 mysql_set_charset('utf8'); 31 32 //実行するクエリを変数に入れる 33 $sql = "INSERT INTO contact_tbl(name,phone,mail,message,) VALUES ('" . $_POST['name'] . "','" . $_POST['phone'] ."','" . $_POST['mail'] . "','" . $_POST['message'] . "')"; 34 35 //クエリを実行して、フォームから入力されたデータをデータベースに挿入 36 $result_reg = mysql_query($sql); 37 if(!$result_reg){ 38 echo "SQL失敗<br />"; 39 exit; 40 }else{ 41 echo "SQL成功<br />"; 42 } 43 //データベース接続を切断 44 mysql_close($DB); 45 exit; 46} 47

・画面に表示されるエラーメッセージ

接続成功
db選択成功
Notice: Undefined index: name in C:\xampp\htdocs\form.php on line 32
Notice: Undefined index: phone in C:\xampp\htdocs\form.php on line 32
Notice: Undefined index: mail in C:\xampp\htdocs\form.php on line 32
Notice: Undefined index: message in C:\xampp\htdocs\form.php on line 32
SQL失敗

online32→$sql = "INSERT INTO contact_tbl(・・・)の行

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

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

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

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

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

guest

回答2

0

ベストアンサー

Noticeは配列にそんなインデックスは存在しませんということを言っています。
したがって、今回実行しているSQLは以下のようになります。

lang

1INSERT INTO contact_tbl(name,phone,mail,message,) VALUES ('','','','')

maisumakunさんが言っているようにカンマが余計なため、SQLが失敗するのだと思います。
SQL失敗と出力している箇所に以下を追記してみてください。

lang

1echo mysql_error();

上記コードでSQLの実行に失敗する理由が表示されますので、それを参考に直してみてください。
なお、今回SQLの実行に失敗することと関数が非推奨であることは関係ないと思われます。

また、maisumakunさんがおっしゃているように、POSTなど、外部から来たデータをそのままMySQLに投げるということは、絶対にやってはいけません。mysqlライブラリでプリペアドステートメントは利用できないので以下のようにすると少しはましです。

lang

1$sql = "INSERT INTO contact_tbl(name,phone,mail,message) VALUES ('" . mysql_real_escape_string($_POST['name']) . "','" . mysql_real_escape_string($_POST['phone']) ."','" . mysql_real_escape_string($_POST['mail']) . "','" . mysql_real_escape_string($_POST['message']) . "')";

投稿2015/04/28 04:27

orange0190

総合スコア1698

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

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

bh_C

2015/04/29 13:34

ご回答頂きましてありがとうございます! SQLの’’とテキストの””がごっちゃになっており、ちゃんと書けてなかったのがひとつ。 そして32行目は確認画面ファイルと連動しているためPOSTではなくSESSIONに変えました。(そもそも$_POSTは何処にあるのか?という問題でした) コードを書いてくださりありがとうございます。今後の参考にさせて頂きます!
guest

0

ざっと見たところですが、INSERT INTO contact_tbl(name,phone,mail,message,) の最後にあるコンマは余計ですね。

あと、POSTなど、外部から来たデータをそのままMySQLに投げるということは、絶対にやってはいけません(どんなSQL文でも実行できてしまいますので、DBを破壊、任意のデータを抽出される危険もあります)。エスケープをかける、もしくは(mysqlライブラリでは非対応ですが)プリペアードステートメントを使うことを行ってください。

投稿2015/04/28 04:11

maisumakun

総合スコア145183

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

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

bh_C

2015/04/29 13:29

ご回答頂きましてありがとうございます! 気づきませんでした…! そしてエスケープ、プリペアードステートメントについて教えてくださってありがとうございます。 現在はローカルホストでただプログラムを書いて実行できるかどうか試している段階ですが、今後はそういったことにも注意していきたいと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問