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_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

您还对SQL 注入持开放态度

于 2013-03-18T12:36:56.647 回答
1

当您生成包含表单的 HTML 文档时,您似乎正在尝试从表单中读取数据。

由于此时尚未提交表单,因此数据将不存在。

您可以:

  1. 将您的表单处理移动到不同的脚本,并在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 回答