【发布时间】:2021-10-29 03:20:36
【问题描述】:
我正在研究 PHP 中的不喜欢评级系统。
// if user clicks like or dislike button
if (isset($_POST['action'])) {
if (isset($_SESSION['uid'])) {
$action = $_POST['action'];
switch ($action) {
case 'like':
$sql = "INSERT INTO rating (uid, pid, action)
VALUES ($uid, $pid, 'like')
ON DUPLICATE KEY UPDATE action='like'";
break;
case 'dislike':
$sql = "INSERT INTO rating (uid, pid, action)
VALUES ($uid, $pid, 'dislike')
ON DUPLICATE KEY UPDATE action='dislike'";
break;
case 'unlike':
$sql = "DELETE FROM rating WHERE uid=$uid AND pid=$pid";
break;
case 'undislike':
$sql = "DELETE FROM rating WHERE uid=$uid AND pid=$pid";
break;
default:
break;
}
// execute query to effect changes in the database ...
mysqli_query($con, $sql);
echo getRating($pid);
exit(0);
} else {
header("location:login.php");
}
}
如果用户已登录,则工作正常,但当用户未登录时,包含 PHP 标头函数的 else 部分将无法正常工作,也不会显示任何错误,甚至不会将数据插入数据库。
如果有其他选择,请告诉
【问题讨论】:
-
警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough!
-
header()调用之前的任何其他 HTML/PHP 内容? -
在这个脚本之前什么都没有。
标签: php switch-statement