PHP按钮定义错误

标签 php mysql html

我遇到了 php 问题。这段代码给了我错误:

<input type="text" name="comment">
<tr>
    <input type="submit" value="Post" name="Post">
    <?php
    if ($_POST['Post']) {
        if (!isset($_COOKIE["c_user"])) {
            die("Aby komentowac musisz byc zalogowany!");
        } else {
            $user = $_COOKIE["c_user"];
            $comment = mysql_real_escape_string($_POST['comment']);
            if ($_POST['comment'] && $_POST['$user']) {
                mysql_query("INSERT INTO posts (comments, user) VALUES ('$user', '$comment')");
            }
        }
    }
    ?>

错误看起来像这样:

Notice: Undefined index: Post in C:\xampp\htdocs\index.php on line 148.

我搜索了 stackoverflow 并找到了答案。然后将代码升级到该版本后:

<?php
if (isset($_POST['Post'])) {
    if ($_POST['comment']) {
        if (!isset($_COOKIE["c_user"])) {
            die("Aby komentowac musisz byc zalogowany!");
        } else {
            $user = $_COOKIE["c_user"];
            $comment = mysql_real_escape_string($_POST['comment']);
            if ($_POST['comment'] && $_POST['$user']) {
                mysql_query("INSERT INTO posts (comments, user) VALUES ('$user', '$comment')");
            }
        }
    } else {
        echo "Komentarz nie został wpisany.";
    }
} else {
    echo "Post nie jest ustawiony!";
}
?>

它仍然不读取内部 if 语句,也不进行 cookie 检查。请帮忙。

最佳答案

您的第一个警告是由于您的表单未提交,因此超全局 $_POST 中没有元素。 - 名为“Post”的数组。通过阅读PHP: "Notice: Undefined variable", "Notice: Undefined index", and "Notice: Undefined offset"您将看到如何修复这些问题(看起来您也修复了它们)。

首先,我没有看到任何表单标签。能够通过 $_POST 提交表单,您需要将输入包装在 <form> 内标签。默认情况下,表单提交超过 $_GET (会将数据放入 URL 中),但您最可能想要的是通过 $_POST 提交,所以我们指定method -属性。

<form method="POST">
    <input type="text" name="comment">
    <input type="submit" value="Post" name="Post">
</form>

我遗漏了action属性,因为在我看来,您将 PHP 与 HTML 表单放在同一页面上。

您在 PHP 中进行了大量检查,其中一些检查会使您的脚本失败(例如,$_POST['$user'] 可能是问题的原因,因为它没有检查变量,但实际文本 $user 。此外,变量 $user永远成为 $_POST 数组的一部分),但我们可以使其更紧凑、更易于阅读。这也可以放在同一个 PHP 页面上的任何地方,您不需要将此代码放在 <form> 中。 -标签。

if (isset($_POST['Post'])) {
    if (!empty($_POST['comment'])) {
    // Only enter this code if the form has been submitted

        if (!isset($_COOKIE["c_user"]))
            die("Aby komentowac musisz byc zalogowany!");  // If  the coookie is not set, stop the script

        $user = $_COOKIE["c_user"];
        $comment = mysql_real_escape_string($_POST['comment']);

        mysql_query("INSERT INTO posts (comments, user) VALUES ('$user', '$comment')");
    } else {
        echo "Komentarz nie został wpisany.";
    }
}
<小时/>

您的脚本也容易受到 SQL-injection 的攻击,所以我强烈建议您切换到 mysqli_*或带有准备好的语句的 PDO。下面给出了带有预准备语句的面向对象 MySQLi 的示例

$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (".$mysqli->connect_errno.") ".$mysqli->connect_error;
}
$mysqli->set_charset("utf8");

$stmt = $mysqli->prepare("INSERT INTO posts (user, comments) VALUES (?, ?)");
$stmt->bind_param("ss", $user, $comment);
$stmt->execute();
$stmt->close();

引用文献:

关于PHP按钮定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34724664/

相关文章:

php - Doctrine 查询中的括号

php - 具有列条件和更新的 laravel 模型 block

php - 图库分页功能和单一 View - 如何获取 NEXT 和 PREV? (详细的)

javascript - 购物车,显示总数的功能。 [JS]

php - 如何在 symfony 4 上检索表单 ajax 请求的发布数据?

php - 从中选择两列并显示它

php - 在 EC2 中加载 php 类的最佳方式 - InstanceStore、EBS 或 S3?

mysql - 奇怪的 1264 超出范围错误

html - 使可滚动侧边栏中的标题具有粘性

javascript - 除了 PHP 或 JavaScript 之外,浏览器还有转义字符吗?