PHP中的当前登录用户记录更新错误
我希望当登录用户需要时,他们可以更改他们的记录(地址等)。为此,我为当前登录用户制作了一个自动填写表单。现在的问题是数据不会被更新 我的表格代码是PHP中的当前登录用户记录更新错误,php,html,mysql,css,Php,Html,Mysql,Css,我希望当登录用户需要时,他们可以更改他们的记录(地址等)。为此,我为当前登录用户制作了一个自动填写表单。现在的问题是数据不会被更新 我的表格代码是 <?php session_start(); include 'conn.php'; include '../includes/layouts/header.php'; if(!isset($_SESSION['user'])) { header("location:signin.php"); } $sql="SELECT * FROM
<?php session_start();
include 'conn.php';
include '../includes/layouts/header.php';
if(!isset($_SESSION['user']))
{
header("location:signin.php");
}
$sql="SELECT * FROM signup";
$qry=mysql_query($sql);
$rows=mysql_fetch_array($qry);
?>
<div id="main">
<div id="navigation">
</div>
<div id="page">
<h2>Login Section</h2>
<p>Welcome to LMS</p>
<form method="post" action="update.php">
<div class="reg_section">
<h3>Your Personal Information</h3>
<input type="text" name="fname" value="<?php echo $rows[1];?>" placeholder="First Name"><br>
<input type="text" name="lname" value="<?php echo $rows[2];?>" placeholder="Last Name"><br>
<input type="text" name="uname" value="<?php echo $rows[3];?>" placeholder="Desired Username"><br>
<input type="text" name="email" value="<?php echo $rows[4];?>" placeholder="Email"><br>
<input type="text" name="department" value="<?php echo $rows[5];?>" placeholder="Department"><br>
<input type="text" name="id" value="<?php echo $rows[6];?>" placeholder="Id #"/><br>
<input type="text" name="phone" value="<?php echo $rows[7];?>" placeholder="Phone #"/><br>
</div>
<div class="reg_section">
<h3>Your Password</h3>
<input type="password" name="pass" value="<?php echo $rows[8];?>" placeholder="Your Password"><br>
<input type="password" name="cpass" value="<?php echo $rows[8];?>" placeholder="Confirm Password">
</div>
<div class="reg_section">
<h3>Your Address</h3>
<input type="text" name="address" value="<?php echo $rows[9];?>" placeholder="Address">
</div>
<p class="submit"><input type="submit" name="submit" value="Update Info"></p>
</form>
</div>
</div>
登录部分
欢迎来到LMS
您的个人信息
正如我在上面的第一条评论中提到的,您在如何构造查询方面存在问题。您使用的是双美元字符($$
),这没有任何意义。结果是运行一个空查询,解释为什么不更新记录
第一步,如下更改查询:
$qry = "UPDATE signup SET
First_Name='$fname', Last_Name='$lname', Username='$user',
Email='$email', Department='$depart', Employe_Id='$id',
Phone='$phone', Password='$pass', Address='$address'
WHERE Username='$user'";
您没有实现任何形式的错误处理,这就是为什么您看不到从mysql得到的错误。请看一些关于如何做到这一点的教程
还考虑我关于防止SQL注入的第二个评论。至少,作为某种“热修复”,您应该在集成到查询中的所有用户输入上使用
mysql\u real\u ecape()。但如前所述,唯一真正的解决办法是转向“事先准备好的声明” 试试这个sql
$qry="UPDATE signup
SET First_Name='$fname', Last_Name='$lname', Username='$user', Email='$email',Department='$depart', Employe_Id='$id', Phone='$phone', Password='$pass', Address='$address'
WHERE Username='$user' LIMIT 1 ";
双美元字符在那里做什么($$
)?旁注:您的代码对sql注入非常开放,这是一个高安全风险!您正在使用不推荐使用的数据库驱动程序。请切换到更现代、更安全的mysqli
php扩展,了解“准备好的语句”的优点!缺少表单上的所选用户SELECT*FROM signup
,因此除非只有一个用户,否则它总是会得到错误的用户,而不是登录的用户,在第二个代码上双击$
和SQL注入,更不用说您没有使用单引号来定义每个变量的范围,这很可能会破坏查询。@webeno请在任何变量上使用空格来尝试您的代码,您就会知道原因。当我们知道数据库中只有一条记录时,这会减少SQL执行时间表。这实际上取决于该表上的索引。@arkascha索引的作用很小,除非它是唯一的字段,MySQL识别并停止它,我不知道它是否这样做,我无法确认它,如果它这样做,它将与LIMIT的作用类似。唯一键自动生成索引。但无论如何,性能确实不是问题所在。@arkascha是的,但我想说的是,一旦发现记录,限制将使其停止,而不使用限制可能不会使其停止在唯一字段上,除非MySQL知道它应该停止,这是我不确定的,这就是我想说的。
$qry="UPDATE signup
SET First_Name='$fname', Last_Name='$lname', Username='$user', Email='$email',Department='$depart', Employe_Id='$id', Phone='$phone', Password='$pass', Address='$address'
WHERE Username='$user' LIMIT 1 ";