php - 使用 PHP 更新 MySQL

标签 php mysql sql

我想用输入表单更新 MySQL 数据库,本质上是一个设置页面,用户可以在其中更新/更改他们的信息。使用下面的代码,底部的 echo 运行并且我没有收到任何错误,但数据库没有更新。我在我的本地机器和服务器上都测试了它,但两者都不起作用,尽管我不确定这与它有什么关系。 $_SESSION['yourName'] 已在用户登录时设置,因此它将等于数据库中的当前值。我知道这里有大量的 sql 注入(inject)漏洞,但这只是一个概念验证代码,还没有准备好上线。我尝试在 phpMyAdmin 中运行查询,它运行良好。

PHP

if(isset($_POST['name']) || isset($_POST['password']) || isset($_POST['location']) || isset($_POST['img'])) {
 //put this in an external file for a little extra security
 $username = "my_username";
 $password = "my_password";
 $database = "database_name";
 $con = mysql_connect('localhost',$username,$password);
 if (!$con) {
    die('Oh poop.... Could not connect: ' . mysql_error());
 }
 //print item from database
 mysql_select_db($database, $con);

 if(isset($_POST['name'])) {
    $query = 'UPDATE users SET username=' . $_POST['name'] . 'WHERE username=' . $_SESSION['yourName'];
    mysql_query($query);
    $_SESSION['yourName'] = $_POST['name'];
 }
 if(isset($_POST['password'])) {
    $query = 'UPDATE users SET password=' . $_POST['password'] . 'WHERE username=' . $_SESSION['yourName'];
    mysql_query($query);
 }
 if(isset($_POST['location'])) {
    $query = 'UPDATE users SET location=' . $_POST['location'] . 'WHERE username=' . $_SESSION['yourName'];
    mysql_query($query);
    $_SESSION['location'] = $_POST['location'];
 }
 if(isset($_POST['img'])) {
    $query = 'UPDATE users SET img=' . $_POST['img'] . 'WHERE username=' . $_SESSION['yourName'];
    mysql_query($query);
    $_SESSION['img'] = $_POST['img'];
 }
 echo '<script type="text/javascript">alert("changes saved")</script>';
}

HTML

<form method="post">
    new name: <input type="text" name="name" /><br />
    new password: <input type="text" name="password" /><br />
    new location: <input type="text" name="location" /><br />
    new img: <input type="text" name="img" /><br />
    <input type='submit' name='save' value='save' />
    <input type='submit' name='logout' value='logout' />
</form>

最佳答案

尝试使用双引号而不是单引号来修改您的 php 语句。

$query = "UPDATE users SET username='" . $_POST['name'] . "' WHERE username= '" . $_SESSION['yourName'] . "'";

但是上面的查询存在SQL注入(inject)漏洞,请阅读下面的文章,

关于php - 使用 PHP 更新 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13831256/

相关文章:

php - 通过复选框删除数据库条目

php - php脚本通过ajax执行完成后如何停止setInterval

php - 如何将字符串变量放在 mysql_resutl 字段中?

php - 在 foreach() 迭代期间修改数组

php - INSERT IGNORE INTO - 插入的行数

mysql - 为什么 InnoDB 无法正确读取或写入计数?

MySQL:通过三个主键中的两个选择行

mysql - 错误 : Specified key was too long; max key length is 1000 bytes

sql - ORA-29908 : missing primary invocation for ancillary operator

sql - SQL中为什么没有 "product()"聚合函数?