使用UPDATE更新MySQL中的用户数据

时间:2018-07-03 15:52:47

标签: php html mysql

我的“管理员”面板出现问题。我有一个问题,当您尝试通过具有用户首选项来更新配置文件时,它倾向于使用户数据保持不变。我没有任何问题。

下面列出的是user.php的代码

<?php

    include 'includes/db.php';
    include 'includes/protect.php';

    if(isset($_POST['submit_update'])){

        $firstName = $_POST['fname'];
        $lastName = $_POST['lname'];
        $email = $_POST['email'];
        $aboutMe = $_POST['about_me'];

        $query = "UPDATE users 
                  SET firstName = '$firstName', 
                      lastName = '$lastName', 
                      email = '$email', 
                      about_me = '$aboutMe', 
                  WHERE email = '$_SESSION[email]'";

        $edit_query = mysqli_query($conn, $query);
    }   
?>

3 个答案:

答案 0 :(得分:1)

在双引号中使用数组时,需要在括号两边加上花括号。

$query = "UPDATE users SET firstName = '$firstName', lastName = '$lastName', email = '$email', about_me = '$aboutMe' WHERE email = '{$_SESSION['email']}'";

答案 1 :(得分:1)

正如@halfer在评论中指出的那样。您应该认真地更改生成SQL语句的方法,以避免使用SQL Injection attacks。基本上,用户可以输入任何文本,可以规避查询并编写自己的SQL语句。就像用户将'; DROP TABLE users; --添加为他们的firstName

最简单的开始方法是利用PHP Prepared Statements。这样不仅可以保护代码安全,还可以减少在处理查询语句的引号时出现语法错误的可能性。

答案 2 :(得分:0)

确定的问题出在您的$_SESSION[email]上。但是我认为您还需要对现有代码进行少量更改。您可以尝试这样-

  1. 在使用$_POST分配isset()变量之前是否存在检查值,这里我已经分配了空字符串,您可以根据自己的需要进行更改需求。另请参阅如何使用http://php.net/manual/en/mysqli.real-escape-string.php

  2. 逃生
  3. 在这种情况下,我使用$_SESSION['email'],将您的$sess_email变量放入一个新变量。 (这将更具可读性)

  4. 删除在,查询中添加的多余逗号(UPDATE)。

<?php
    $firstName = isset($_POST['fname']) ? $_POST['fname'] : "" ;
    $lastName = isset($_POST['lname']) ? $_POST['lname'] : "";
    $email = isset($_POST['email']) ? $_POST['email'] : "";
    $aboutMe = isset($_POST['about_me']) ? $_POST['about_me'] : "";
    $ses_email = isset($_SESSION['email']) ? $_SESSION['email'] : "";

    $query = "UPDATE users SET firstName = '$firstName', lastName = '$lastName', email = '$email', about_me = '$aboutMe' WHERE email = '$sess_email'";
    $edit_query = mysqli_query($conn, $query);
?>
    

我还敦促您看看如果在PHP中使用Prepared Statements可以轻松地防止SQL注入。