0

这是我的PHP代码,我想问题出在$_POST[...]

PHP:

<?php
require('connect.php');
$name = $_POST['name'];
$comment = $_POST['comment'];
$submit = $_POST['submit'];
if($submit)
{
    if($name&&$comment)
    {
    $query=mysql_query("INSERT INTO comment (id,name,comment) VALUES ('','$name','$comment')");
    header("Location: success.php");
    }
    else
    {
        echo "Lūdzu aizpildi visus logus.";
    }
}
?>

字段和文本区域的形式。

HTML:

<form action="help-add-comment.php" method="POST">
  <label>Jūsu vārds:  </label><br /><input type="text" name="name" size="25" value="<?php echo "$name" ?>" /><br /><br />
  <label>Ziņojums:  </label><br /><textarea name="comment" cols="25" rows="7"></textarea><br /><br />
  <input type="submit" class="button button-red" name="submit" value="Pievienot" /><br/>
</form>

这是我的结果: 未定义索引

4

3 回答 3

3

检查是否首先定义了您的值,它有效,因为这不是错误,它只是一个警告。

这样做:

<?php
if (!empty($_POST["name"]) && !empty($_POST["comment"]) && isset($_POST["submit"])) {
    require('connect.php');
    //Get Post value
    $name = $_POST['name'];
    $comment = $_POST['comment'];
    $submit = $_POST['submit'];
    //Execute query
    $query=mysql_query("INSERT INTO comment (id,name,comment) VALUES ('','$name','$comment')");
    header("Location: success.php");
}else{
    //one of the value is not set (undefined)
    echo "Ludzu aizpildi visus logus.";
}
?>

了解有关ifif/elseisset()empty()的更多信息


PS:

您的代码容易受到 SQL 注入的影响,而且mysql 现在已弃用您应该使用 mysqli 扩展或 PDO。 这很严重,因为您很容易被黑客入侵。

于 2014-01-04T20:49:04.953 回答
2

您正在尝试访问$_POST数组中不存在的字段,警告是正确的。您应该只在它们实际存在时处理这些字段,因此当您实际响应表单回发时,通过检查请求方法:

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
  $name = $_POST['name'];
  $comment = $_POST['comment'];
  $submit = $_POST['submit'];
  // Handle rest of postback
}

请注意,这仍然允许恶意用户通过伪造请求来触发警告,从而了解您的应用程序内部结构。您可以通过安全地检索 POST 值来解决此问题:

function getPostValue($name, $default = null)
{
  return isset($_POST[$name]) ? $_POST[$name] : $default;
}
$name = getPostValue('name');

您可以通过使用错误抑制运算符 ( @) 来实现相同的效果,但它不利于性能,并且对于像这样的简单情况被认为是不好的风格。

于 2014-01-04T20:48:51.150 回答
0

尝试这个:

  <?php
    require('connect.php');
    $name = isset($_POST['name']) ? $_POST['name']: '' ;
    $comment = isset($_POST['comment']) ? $_POST['comment'] : '' ;;
    $submit = isset($_POST['submit']) ? $_POST['submit'] : '' ;;
    if($submit)
    {
        if($name&&$comment)
        {
        $query=mysql_query("INSERT INTO comment (id,name,comment) VALUES ('','$name','$comment')");
        header("Location: success.php");
        }
        else
        {
            echo "Lūdzu aizpildi visus logus.";
        }
    }
    ?>
于 2014-01-04T20:50:47.160 回答