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

时间:2015-01-25 22:42:32

标签: php mysql

我有一个简单的表单来更新数据库中的用户数据。我将数据发布到另一个页面以更新我的数据库。但是,如果我直接直接访问该页面(例如: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";
}

3 个答案:

答案 0 :(得分:1)

那是因为当你直接进入页面时,你正在进行“GET”动作,而不是“POST”。当您通过表单发送信息时,您可以选择是否要通过“POST”(例如:<form action="action_page.php" method="POST">)或“GET”(例如:<form action="action_page.php" method="GET">)发送。 GET方法将变量放在URL中(例如:“update2.php?userid = 30&amp; 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";
}
}

答案 1 :(得分:1)

试试

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";
}

答案 2 :(得分:-1)

您始终可以在表单中添加隐藏字段:

<input type="hidden" name="action" value="UPDATE" />

然后在进行任何更新之前验证它

if ($_POST["action"] == "UPDATE") { 
     //update script
}