繁体   English   中英

如果未从表单接收到更新,则阻止更新mysql数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM