Php 无法为用户创建安全的数据更新方式
我正在为用户提供一种编辑数据的方式。我的第一种方法是有效的,但后来我想起它是非常不安全的,我不应该直接将数据插入数据库;至少有人告诉我了。我试图通过执行值(?,,,,,?,?)的操作使其更安全,这样数据就不会直接进入,这在我的注册页面中似乎工作得很好(如果您愿意,我可以包括该页面) 首先,这里是我的原始更新数据页面,它工作正常,但没有使用(?,,,?,?)方法: 这是我试图做的,以使它更安全,但这似乎不起作用。具体而言,Php 无法为用户创建安全的数据更新方式,php,database,mysqli,login,Php,Database,Mysqli,Login,我正在为用户提供一种编辑数据的方式。我的第一种方法是有效的,但后来我想起它是非常不安全的,我不应该直接将数据插入数据库;至少有人告诉我了。我试图通过执行值(?,,,,,?,?)的操作使其更安全,这样数据就不会直接进入,这在我的注册页面中似乎工作得很好(如果您愿意,我可以包括该页面) 首先,这里是我的原始更新数据页面,它工作正常,但没有使用(?,,,?,?)方法: 这是我试图做的,以使它更安全,但这似乎不起作用。具体而言,$query=“UPDATE usertable SET usertable
$query=“UPDATE usertable SET usertable(SkypeID、Email、Region、CRank、CRank)值(?、、?、?)其中UserID='$UserID'代码>似乎是个问题,尽管语法对我来说很好
if(isset($_POST['submit'])) {
$userid=$_SESSION['userid'];
$skype=$_POST['skype'];
$email=$_POST['email'];
$region=$_POST['region'];
$crank=$_POST['league1'];
$drank=$_POST['league2'];
if(empty($skype) || empty($email) || empty($crank) || empty($drank) || empty($region))
{
echo "Cannot leave any field blank";
}
else
{
$host= "localhost";
$dbname = "boost";
$user = "root";
$pwd = "";
$port=3306;
try
{
$mysqli= new mysqli($host, $user, $pwd, $dbname,$port);
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
$query = "UPDATE usertable SET usertable(SkypeID,Email,Region,CRank,DRank) VALUES (?,?,?,?,?) WHERE UserID = '$userid'";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("sssss",$skype,$email,$region,$crank,$drank);
$stmt->execute();
$iLastInsertId=$mysqli->insert_id;
header('Location: http://localhost/Boost/account.php');
$stmt->close();
$mysqli->close();
} catch (mysqli_sql_exception $e) {
throw $e;
}
}
}
所以我不确定问题出在哪里。根据我使用PHP的经验,语法应该很好,但我肯定遗漏了一些东西。事实上,它非常简单,您从
$query = "UPDATE usertable SET SkypeID = '$skype', Email = '$email', Region = '$region', CRank = '$crank', DRank = '$drank' WHERE UserID = '$userid'";
到
在重写时,您似乎混淆了INSERT语句和UPDATE语句,因此为了修复此问题,只需将旧语句与新样式一起使用即可
$query = "UPDATE usertable SET SkypeID = ?, Email = ?, Region = ?, CRank = ?, DRank = ? WHERE UserID = $userid";
其实很简单,你从
$query = "UPDATE usertable SET SkypeID = '$skype', Email = '$email', Region = '$region', CRank = '$crank', DRank = '$drank' WHERE UserID = '$userid'";
到
在重写时,您似乎混淆了INSERT语句和UPDATE语句,因此为了修复此问题,只需将旧语句与新样式一起使用即可
$query = "UPDATE usertable SET SkypeID = ?, Email = ?, Region = ?, CRank = ?, DRank = ? WHERE UserID = $userid";
你在使用什么数据库?SQL更新值语法是不寻常的。你确定它有效吗?为什么要改变以前更传统的语法?请尝试更新usertable SET SkypeID=?、Email=?、Region=?、CRank=?、waked=?其中UserID='$UserID'
您是否收到任何错误消息?通常这些都有助于理解错误。@Matt谢谢,这很有效!你在使用什么数据库?SQL更新值语法是不寻常的。你确定它有效吗?为什么要改变以前更传统的语法?请尝试更新usertable SET SkypeID=?、Email=?、Region=?、CRank=?、waked=?其中UserID='$UserID'您是否收到任何错误消息?通常这些都有助于理解错误。@Matt谢谢,这很有效!哦,你说得对。我以为他们会是一样的。我改成那样了。然而,当我更改代码时,我得到了一个错误:未捕获的异常“mysqli\u sql\u exception”带有消息“Duplicate entry”?“对于key”Email“Nevermind,@Matt”的代码工作正常。奇怪的是,我想(')不应该在那里?我甚至不知道还有什么正确的没有引号,我已经编辑了我的答案以反映更新的值(我很抱歉从您的原始脚本中复制粘贴工作)。哦,您的权利。我以为他们会是一样的。我改成那样了。然而,当我更改代码时,我得到了一个错误:未捕获的异常“mysqli\u sql\u exception”带有消息“Duplicate entry”?“对于key”Email“Nevermind,@Matt”的代码工作正常。奇怪的是,我想(')不应该在那里?我甚至不知道还有什么正确的没有引号,我已经编辑了我的答案,以反映更新后的值(黑客复制和粘贴工作从您的原始脚本对我的一部分,我道歉)。