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