我遇到了 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/