[英]Prevent updating mysql data if is not received from the form
我有一个简单的表单来更新数据库中的用户数据。 我将数据发布到另一个页面以更新数据库。 但是,如果我直接直接转到该页面(例如:update2.php?userid = 30),则数据库将更新为空数据。
这是我的update2.php文件中包含的内容
$userid=$_GET["userid"];
$username = $_POST["username"];
$email = $_POST["email"];
$phone = $_POST["phone"];
include("connect.php");
$updateuser=mysql_query("update users username='$username', email='$email', phone='$phone', where ID=$userid");
if($updateuser){
echo "Done";
}
else{
echo "Failed";
}
这是因为当您直接转到页面时,您是在执行“ GET”操作,而不是“ POST”。 通过表单发送信息时,可以选择是否要通过“ POST”发送(例如: <form action="action_page.php" method="POST">
)或“ GET”(例如: <form action="action_page.php" method="GET">
)。 GET方法将变量放在URL中(例如:“ update2.php?userid = 30&phone = 12345”),而POST则没有。
解决方案不是那么具体,而是使用$ _REQUEST而不是$_POST
或$_GET
。 $ _REQUEST从$ _POST和$ _GET读取:
$userid=$_REQUEST["userid"];
$username = $_REQUEST["username"];
$email = $_REQUEST["email"];
$phone = $_REQUEST["phone"];
PS: 我假设您的代码无法从外部访问,并且/或者它不是重要的数据库,并且/或者您出于理解目的而简化了代码。 我这样说是因为它很容易受到SQL注入的攻击。 如果我访问update2.php?userid=1 OR 1=1
或更糟糕的update2.php?userid=1;DROP TABLE an_important_table
更新:
我认为我误解了这个问题。 我以为您要在直接访问时更新数据库,但是正在使用空值更新数据。 现在,我了解到您不会允许任何人直接更新。
因此,请检查您是通过POST(表单)还是GET(直接通过浏览器)获取响应。 您可以检查是否为此设置了$_POST["userid"]
或使用$_SERVER['REQUEST_METHOD']
if ($_SERVER['REQUEST_METHOD'] != "POST") { // OR if isset($_POST["userid"])
echo "You can't access this directly!";
}
else {
$userid=$_GET["userid"];
$username = $_POST["username"];
$email = $_POST["email"];
$phone = $_POST["phone"];
include("connect.php");
$updateuser=mysql_query("update users username='$username', email='$email', phone='$phone', where ID=$userid");
if($updateuser){
echo "Dode";
}
else{
echo "Failed";
}
}
试试看
if(isset($_POST['username']) && isset($_POST['email']) && isset($_POST['phone'])) {
$userid=$_GET["userid"];
$username = $_POST["username"];
$email = $_POST["email"];
$phone = $_POST["phone"];
include("connect.php");
$updateuser=mysql_query("update users username='$username', email='$email', phone='$phone', where ID=$userid");
if($updateuser){
echo "Done";
}
else{
echo "Failed";
}
}
else {
echo "Please use the form";
}
您始终可以在表单中添加隐藏字段:
<input type="hidden" name="action" value="UPDATE" />
然后在进行任何更新之前对其进行验证
if ($_POST["action"] == "UPDATE") {
//update script
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.