我仍然在学习PHP和MySQLI,并且想知道是否有可能在单个php页面上托管多个MySQLI删除查询,并且让url在相应的查询上行动而不会产生混淆。我在这里有这个代码,我已经在网上搜索了3天的答案,但我发现的任何东西似乎都不是我想要的。任何帮助或基于我的代码的适当描述的例子将不胜感激。
我的代码是:
<?php
session_start();
include ('dbconnect.php');
$userr = $_SESSION['usr_id'];
$uid=$_GET['pid'];
$pid=$_GET['phid'];
$user_id=$_GET['user'];
$fileID=$_GET['file'];
if($userr==$uid && $pid==$fileID){
echo "ERROR No. 9B2AP";
}else{
mysqli_query($con,"delete from images where userID='$uid' AND PhotoID='$pid'") or die (mysqli_error());
header ("location: /viewImage.php?pid=$uid");
}
if($userr==$user_id && $fileID==$pid){
echo "ERROR No. 39V41";
}else{
mysqli_query($con,"delete from music where userID='$user_id' AND Record_ID='$fileID'") or die (mysqli_error());
header ("location: /users/music-gallery/$user_id");
}
?>
无论我多少次重写此代码,当我使用此页面上的代码删除图像或歌曲时,它仅将我重定向到/users/music-gallery/
而不是正确的关联页面。我怎么能修好这个?就像我说的那样,我是PHP和MySQLI的新手,我相信应该详细描述的任何建议,所以我可能能够理解和理解我是如何犯错的,我要修复并防止它在以后的代码中再次发生。谢谢,麻烦您了。
-M.S
答案 0 :(得分:2)
出于安全原因,请勿执行此操作:
// Consider escaping the incoming data for better security
$uid=$_GET['pid'];
$pid=$_GET['phid'];
// ...
由于您使用的是MySQLi
,因此您可以使用它来转义数据:
$uid = mysqli_real_escape_string($con, $_GET['pid']);
您可以使用FILTERS
检查输入数据类型:
// If you are expecting an `INT` from $_GET['pid']
if (filter_var($_GET['pid'], FILTER_VALIDATE_INT))
{
echo 'pid is an int';
}
else
{
echo 'pid is not an int';
}
有关过滤器here的更多信息。
最重要的是,prepared mysqli statements
使用stmt
:
// prepare the statement
$stmt = $con->prepare("delete from images where userID=? AND PhotoID=?");
// bind variables to the '?' and set types --> `i` = integer
$stmt->bind_param("ii", $_GET['pid'], $_GET['phid']);
// execute query
$stmt->execute();
// Do the same for the next query
更多关于准备好的陈述here。
解决您的问题:
要在标题后面exit
添加一个程序,您需要在每个exit();
之后使用header
,如下所示:
header ("location: /viewImage.php?pid=$uid");
exit();
例如:
header ("location: /viewImage.php?pid=$uid");
// this line of code gets exucuted
// this too
// ...
header ("location: /viewImage.php?pid=$uid");
exit();
// Nothing gets executed as program terminates and redirects