【问题标题】:PHP, MySQL Update TablePHP、MySQL 更新表
【发布时间】:2014-01-31 21:18:17
【问题描述】:

我尝试设置一个脚本,当表单向 PHP 文件提交信息时,它将更新 MySQL 表。但是如果 Post 为空白/空,我试图让它不更新数据库。但它没有更新表格。

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
$nickname = $_POST['nickname'];
$user = $_POST['user'];

$enc_pass = md5($password);

$con=mysqli_connect("","","","");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
if (!isset($name)){
mysqli_query($con,'UPDATE members SET name="$name"
WHERE username="$user"');
}
if(!$email == ""){
mysqli_query($con,'UPDATE members SET username="$email"
WHERE username="$user"');
}
if(!$password == ""){
mysqli_query($con,'UPDATE members SET password="$enc_pass"
WHERE username="$user"');
}
if(!$nickname == ""){
mysqli_query($con,'UPDATE members SET nickname="$nickname"
WHERE username="$user"');
}
mysqli_close($con);
?>

为了安全起见,我删除了 MySQL 凭据。 谁能帮我解决这个问题?

问候 驯服提玛

【问题讨论】:

  • 您没有进行任何错误检查,因此您永远不会知道您的查询是否失败。参见例如Catching Mysqli Errors
  • 另外,我希望您不要认真对待使用 MD5 作为密码。
  • 您必须检查表单是否已提交 if(isset($_POST['submit'])){ REST OF YOUR CODE HERE };
  • 深思:您正在使用的代码; md5 已经过时了,你可能(最终)被黑了。您确实需要对此使用准备好的语句。 Read thisthis too

标签: php mysql sql


【解决方案1】:

我认为您的某些逻辑是不正确的。例如:

if (!isset($name)) {
    mysqli_query($con,'UPDATE members SET name="$name" WHERE username="$user"');
}

这就是说“如果 $name 未设置任何值,请更新数据库中的名称”。 $name 总是会被设置为 something,因为你在一开始就对其进行了初始化。我认为您需要的更多是:

if ($name != '')) {
    mysqli_query($con,'UPDATE members SET name="$name" WHERE username="$user"');
}

但是,请记住,您并未验证 POST 数据,因此您很容易受到 SQL 注入攻击。始终将提交的数据视为不可信数据并在对数据库执行任何操作之前对其进行清理,例如:

$name = mysqli_real_escape_string($_POST['name'];

【讨论】:

    【解决方案2】:

    您的代码有很多错误,但我更正了一些。试试这个

       if (isset($name) and $name != ''){
           mysqli_query($con,'UPDATE members SET name="'.$name.'"
                              WHERE username="'.$user.'"');
                        }
       if($email != ""){
           mysqli_query($con,'UPDATE members SET username="'.$email.'"
                              WHERE username="'.$user.'"');
                       }
       if($password != ""){
           mysqli_query($con,'UPDATE members SET password="'.$enc_pass.'"
                              WHERE username="'.$user.'"');
                       }
       if($nickname != ""){
           mysqli_query($con,'UPDATE members SET nickname="'.$nickname.'"
                              WHERE username="'.$user.'"');
                       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-03
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 2014-03-01
      • 2017-01-06
      相关资源
      最近更新 更多