php - 通过复选框选择无法正确删除图像

标签 php html mysql

如果用户决定不再希望在其个人资料中使用图像(头像),我很难使用复选框从 MySQL 表中删除图像 URL。

表格(有更多列)看起来像:

user_id | img                                    | user_name
 1      |  http://www.domain.com/path/to/image   |  User A
 2      |                                        |  User B
 3      |                                        |  User C

在用户个人资料中,如果 img 中存在 URL,则图像会正确显示。

我的 HTML 表单如下所示:

<form method="post" action="user/update_info.php">
  <div class="form-group">
    <label for="user_name">Username:</label>
    <input type="text" id="user_name" name="user_name" value="user_name" required>
  </div>
  <div class="form-group">
    <label for="email">Email:</label>
    <input type="email" id="email" name="email" value="email" required>
  </div>
  <div class="form-group">
    <label for="password">Password:</label>
    <input type="password" id="password" name="password" value="password" required>
  </div>
  <div class="form-group col-sm-4">
    <input type="file" name="img">
    <br>
    <label for="noav">Use no avatar.</label>
    <input type="checkbox" id="noav" name="noav" value="Yes">
  </div>
  <input type="submit" class="btn btn-warning" value="Update">
</form>

我的 PHP 文件如下所示:

<?php
$user_id = $_SESSION["user"]['user_id'];
$user_name = $_POST['user_name'];
$email = $_POST['email'];
$password = $_POST['password'];
$noav = $_POST['noav'];
$session_password = $_SESSION["user"]['password'];

if ($password != $session_password) {
  $password = password_hash($password, PASSWORD_DEFAULT);
}
$img = $_FILES["img"];
$query = "UPDATE users 
          SET user_name='$user_name', char_name='$char_name',
              user_email='$email', password='$password'
          WHERE user_id=$user_id";
mysqli_query($this->connection, $query)
  or die("Update error: " . mysqli_error($this->connection));
if($img["error"] == 0) {
  $name = "public/gallery/" . time() . $img["name"];
  $name_in_db = URL . $name;
  $tmp_name = $img["tmp_name"];
  move_uploaded_file($tmp_name,  $name);
  if ($noav = 'Yes') {
    $query = "UPDATE users SET img='' WHERE user_id=$user_id";
  } else {
    $query = "UPDATE users SET img='$name_in_db' WHERE user_id=$user_id";
  }
mysqli_query($this->connection, $query)
  or die("Update error: " . mysqli_error($this->connection));
}
?>

在我添加“noav”复选框、变量和 if 检查(仅存在底部查询)之前,一切都正常运行。

添加“noav”的东西基本上破坏了它。现在,无论如何,无论是否选中该复选框,以及是否选择了图像,它都会清除该用户的 img 列,从而不会生成任何 img。

最佳答案

问题出在这个if ($noav = 'Yes')

您正在分配而不是比较:

if ($noav == 'Yes')

引用文献:

另外,最好使用 isset() 检查复选框是否已设置。

还要确保 session 已启动;这是未知的。

如果不是,请在使用它们的所有文件中添加 session_start();

您还可能面临严重的 SQL 注入(inject)。使用准备好的语句:

关于php - 通过复选框选择无法正确删除图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42425666/

相关文章:

PHP/MySQL - 选择字段唯一的所有行

php - 使用 MySql 保持两个远距离程序同步

javascript - 如何在 Internet Explorer 6 中的输入框上有悬停效果

html - 为浏览器制作一个全宽的标题

html - 打破表格单元格内没有空格的长文本

php - 验证 MySQL 表创建 - PDO

php - 在 PHP 中使用自定义键对数组进行排序

php - SQL查询不返回值,设置为 session 变量

php - PHP 与 MYSQL 的连接繁忙?

mysql - MySQL 使用哪个版本的 UUID?