Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的当前登录用户记录更新错误_Php_Html_Mysql_Css - Fatal编程技术网

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">
        &nbsp;
        </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 ";