0

私のmysqlデータベースにデータを挿入しようとしています。データは正常に挿入されますが、問題はページをロードするたびに次のエラーが表示されることです。

   Notice: Undefined index: comment in 
   C:\wamp\www\CMS\addnews.php on line 42
   Call Stack
   #    Time    Memory  Function    Location
   1    0.0004  674184  {main}( )   ..\addnews.php:0

私は、mysql 拡張機能が公式に減価償却されていることを認識しているので、それについてコメントしないでください。

これが私のコードです

               <form id="insNews" name="insNews" method="POST" action="addnews.php">


                           <textarea rows="20" cols="90" name="comment"></textarea>
                           <input type="submit" name="InsertNews" id="InsertNews">
                       <?php
                          include 'db.php';
                          $comment=$_POST['comment']; // **ERROR HERE**
                          $tablename="news";
                          $sql="INSERT INTO $tablename(news_content)VALUES('$comment')";

                             if(isset($_POST['InsertNews'])) 
                             {
                             mysql_query($sql);
                            }

                      ?>
4

4 に答える 4

2

これは$_POST['comment']定義されていないことを意味します。つまり、指定されたフィールドの値がcommentフォームから送信されていません。

したがって、次のいずれかを行います。

  1. ユーザーにエラーをスローし、コメントが必須フィールドであることを伝え、データベースに送信する前に値が提供されていることを確認する必要があります

  2. 変数に値を代入する前に、値があるかどうかを確認してください。存在しない場合は、デフォルト値を割り当てます。

参考までに、新しいコードで関数を使用しないでくださいmysql_*。それらはもはや保守されておらず、公式に非推奨です赤いボックスが見えますか? 代わりにプリペアド ステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事はどちらを使用するかを決めるのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。

また、 SQL インジェクションに対して広くオープンです

于 2013-03-18T12:36:56.647 に答える
1

フォームを含む HTML ドキュメントを生成するときに、フォームからデータを読み取ろうとしているようです。

この時点ではフォームは送信されていないため、データは存在しません。

次のいずれかを実行できます。

  1. フォーム処理を別のスクリプトに移動し、そのスクリプトの URI をaction
  2. 既存のスクリプト内でロジックを分岐します。リクエスト メソッドが POST かどうかをテストしてから、フォーム データを処理するかどうか、および/またはそれに基づいてフォームを表示するかどうかを決定します。

いずれにしても、配列キーを読み取ろうとする前に、それらが存在するかどうかをテストしてください。そうでない場合は、ユーザーで生の PHP エラーをチェックするのではなく、独自のエラー状態を提供してください。

于 2013-03-18T12:37:28.580 に答える
1

$_POST['comment'] が成功したかどうかを確認してから、クエリを実行する必要があります

if isset($_POST['comment']){
$comment=$_POST['comment'];
$tablename="news";
$sql="INSERT INTO $tablename(news_content)VALUES('$comment')";

     mysql_query($sql);

}
于 2013-03-18T12:37:31.000 に答える
0

変数が存在するかどうかを確認する必要があります。

<form id="insNews" name="insNews" method="POST" action="addnews.php">
    <textarea rows="20" cols="90" name="comment"></textarea>
    <input type="submit" name="InsertNews" id="InsertNews">
</form>

<?php
include 'db.php';
if (!empty($_POST['comment'])) {
    $comment   = $_POST['comment']; // **ERROR HERE**
    $tablename = "news";
    $sql="INSERT INTO $tablename(news_content)VALUES('" . mysql_real_escape_string($comment) . "')";

    if(isset($_POST['InsertNews'])) 
    {
        mysql_query($sql);
    }
}

?>

ただし、mysql_*libは非推奨になっていることをお知らせします。これの代わりにPDOまたはmysqliを使用してください。また、SQLインジェクションに注意してください。mysql_*関数を使用する場合は、mysql_real_escape_stringを使用してください。

于 2013-03-18T12:38:55.833 に答える