MySQLにデータが追加できません。 - PHPプロ!Q&A掲示板

2768

  • 0P

MySQLにデータが追加できません。

質問日時 / 2010年6月18日 10:39    回答数 / 2件

Questioner:  satoshi_iso  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

データベースを使ってゲストブックを作りつつ、
PHPの勉強をしていますが、データベースにデータが追加されずデータ追加エラーが出ます。
どうすればよいのか教えていただけるでしょうか?

環境は
データベースはMySQLを使用しています。
PHPMyadminでテーブルを作りました。
PHPは5.3.1
XAMPP1.7.3
です。

コードは以下の通りです。

  1. <html>
  2. <head>
  3. <title>ゲストブック</title>
  4. </head>
  5. <body>
  6. <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>">
  7.   <table border="1">
  8.     <tr>
  9.       <td>お名前</td>
  10.       <td><input type="text" name="g_name" size="30"></td>
  11.     </tr>
  12.     <tr>
  13.       <td>メールアドレス</td>
  14.       <td><input type="text" name="g_mail" size="30"></td>
  15.     </tr>
  16.     <tr>
  17.       <td>メッセージ</td>
  18.       <td>
  19.       <textarea rows="5" cols="30" name="g_mes"></textarea>
  20.       </td>
  21.     </tr>
  22.     <tr>
  23.       <td colspan="2">
  24.       <input type="submit" value="書き込む">
  25.       </td>
  26.     </tr>
  27.   </table>
  28. </form>
  29.  
  30. <?php
  31. // 接続設定(サーバ/データベース/ユーザ/パスワード)
  32. $sv = "localhost";
  33. $dbname = "guestbook";
  34. $user = "******";
  35. $pass = "******";
  36.  
  37. // データベースに接続する
  38. $conn = mysql_connect($sv$user$pass) or die("接続エラー");
  39. mysql_select_db($dbname) or die("接続エラー");
  40. ?>
  41.  
  42. <?php
  43. // POSTメソッドで送信された場合は書き込み処理を実行する
  44. if ($_SERVER["REQUEST_METHOD"]  == "POST") {
  45.     // フォームからデータを受け取る
  46.     $g_name = cnv_dbstr($_POST["g_name"]);
  47.     $g_mail = cnv_dbstr($_POST["g_mail"]);
  48.     $g_mes = cnv_dbstr($_POST["g_mes"]);
  49.  
  50.     // 名前とメッセージが入力されていればデータの追加を実行する
  51.     if (!empty($g_name) and !empty($g_mes)) {
  52.         // データを追加する
  53.         $sql = "INSERT INTO guestdata(g_name, g_mail, g_mes, g_date) ";
  54.         $sql .= "VALUES(";
  55.         $sql .= "'" . $g_name . "',";
  56.         $sql .= "'" . $g_mail . "',";
  57.         $sql .= "'" . $g_mes . "',";
  58.         $sql .= "'" . date("Y/m/d H:i:s") . "'";
  59.         $sql .= ")";
  60. echo $sql;
  61.         $res = mysql_query($sql$conn) or die("データ追加エラー");
  62.         if ($res) {
  63.             echo "<p>書き込みありがとうございました</p>";
  64.         }
  65.     }
  66.     // 名前やメッセージが空白の場合はエラーメッセージを出力する
  67.     else {
  68.         echo "<p><b>お名前とメッセージを入力してください</b></p>";
  69.     }
  70. }
  71.  
  72. // SQLコマンド用の文字列に変換する関数
  73. function cnv_dbstr($string) {
  74.     // タグを無効にする
  75.     $string = htmlspecialchars($string);
  76.  
  77.     // magic_quotes_gpcがONの場合はエスケープを解除する
  78.     if (get_magic_quotes_gpc()) {
  79.         $string = stripslashes($string);
  80.     }
  81.  
  82.     // SQLコマンド用の文字列にエスケープする
  83.     $string = mysql_real_escape_string($string);
  84.     return $string;
  85. }
  86. ?>

エラー個所を探すために
echo $sql;
を追加し、
 $res = mysql_query($sql, $conn) or die("データ追加エラー");

 $res = mysql_query($sql, $conn) or die("mysql_error()");

にしてみましたが、
INSERT INTO guestdata(g_name, g_mail, g_mes, g_date) VALUES('aaa','aaa','aaa','2010/06/18 10:13:01')mysql_error()

と表示されてしまいます。

どこが悪いのでしょうか?よろしくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01shimix>$res = mysql_query($sql, $conn) or die("データ追
 ┗A01-1satoshi_isoshimixさん。ありがとうございました。 エラーメッ

回答一覧

並び替え:

A01 満足
answerershimix [6月18日 11:55] (最終編集:6月18日 14:46)

>$res = mysql_query($sql, $conn) or die("データ追加エラー");
>↓
>$res = mysql_query($sql, $conn) or die("mysql_error()");

エラーの内容を知りたければ

  1. $res = mysql_query($sql, $conn) or die(mysql_error());

としてください。mysql_error()関数であればエラーの内容を返してくれると思います。"mysql_error()"という文字列(リテラル)ではダメです・・。

この意見に回答する

ツリーへ TOPへ

A01-1
replyersatoshi_iso [6月18日 17:20]

shimixさん。ありがとうございました。

エラーメッセージが表示されて、
エラー内容が特定され、問題解決いたしました。

単純なスペルミスでした。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
include されたファイルの変数
 このエントリーをはてなブックマークに追加 
A
出来ます。include(require)は、その部分に読み込むファイルの内容を展開したのと同義です。エディタでファイル読み込み(あるいはコピペ)した状態と同じだと考えていいです。 #defineや変数定義だけの共通フ...

>>続きを読む

shimix様、いつもわかりやすい説明をありがとうございます。 「includeはエディタでコピペした状態と同じ」 この表現、私も授業で使わせていただきたいと思います。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)