我的“管理员”面板出现问题。我有一个问题,当您尝试通过具有用户首选项来更新配置文件时,它倾向于使用户数据保持不变。我没有任何问题。
下面列出的是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);
}
?>
答案 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]
上。但是我认为您还需要对现有代码进行少量更改。您可以尝试这样-
在使用$_POST
分配isset()
变量之前是否存在检查值,这里我已经分配了空字符串,您可以根据自己的需要进行更改需求。另请参阅如何使用http://php.net/manual/en/mysqli.real-escape-string.php
在这种情况下,我使用$_SESSION['email']
,将您的$sess_email
变量放入一个新变量。 (这将更具可读性)
删除在,
查询中添加的多余逗号(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注入。