数据不进入数据库

时间:2017-01-05 23:10:23

标签: php mysql mysqli

我不确定为什么但是在我的图片上传脚本中没有任何数据被输入数据库。这是我一直使用的相同脚本,但我最近添加了if(isset))语句,以查看是否选中了某些复选框。图像正在上载到服务器,但数据库表仍为空。有线索吗?我没有收到任何错误。

if(isset($_POST['submit'])) { 
    $count = count($_FILES['img_file']['name']);

    for($i = 0; $i < $count; ++$i){
        $img_name = $_POST['img_name'];
        $img_name = str_replace(' ', '_', $img_name);
        $img_album = $_POST['img_album'];
        $img_album = str_replace(' ', '_', $img_album);
        $img_photographer = $_POST['img_photographer'];
        $img_location = $_POST['img_location'];
        if(isset($_POST['horror'])) { $horror = "1"; } else { $horror = "0"; }
        if(isset($_POST['occult'])) { $occult = "1"; } else { $occult = "0"; }
        if(isset($_POST['goth'])) { $goth = "1"; } else { $goth = "0"; }
        if(isset($_POST['industrial'])) { $industrial = "1"; } else { $industrial = "0"; }
        if(isset($_POST['fashion'])) { $fashion = "1"; } else { $fashion = "0"; }
        if(isset($_POST['fetish'])) { $fetish = "1"; } else { $fetish = "0"; }
        if(isset($_POST['avante-garde'])) { $avanteGarde = "1"; } else { $avanteGarde = "0"; }
        if(isset($_POST['cosplay'])) { $cosplay = "1"; } else { $cosplay = "0"; }
        if(isset($_POST['nude'])) { $nude = "1"; } else { $nude = "0"; }
        $file_name = $_FILES["img_file"]["name"][$i];
        $file_ext = end((explode(".", $file_name)));
        $target = $_SERVER['DOCUMENT_ROOT']."/gallery/";
        $img_rename = $img_name . '_' . $i . '.' . $file_ext;
        $target = $target . $img_rename;
        if(move_uploaded_file($_FILES['img_file']['tmp_name'][$i], $target)){
            mysqli_query($conn, "INSERT INTO gallery_img (img_name, img_album, img_photographer, img_location, horror, occult, goth, industrial, fashion, fetish, avante-garde, cosplay, nude, file_location) VALUES ('$img_name', '$img_album', '$img_photographer', '$img_location', '$horror', '$occult', '$goth', '$industrial', '$fashion', '$fetish', '$avanteGarde', '$cosplay', '$nude', '$img_rename')") ;
            echo '<div class="alert alert-success margin-top">Image "'.$file_name.'" successfully uploaded and renamed to '.$img_rename.'.</div>';
        }else {
            echo '<div class="alert alert-danger margin-top">Sorry, there was a problem uploading your images.</div>';
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您显然没有检查查询中的错误。

请注意您的某个列的连字符?似乎其他人可能没有滚动到右边(足够)看到它并通知你。

  • avante-garde

MySQL将其解释为:

  • avante 减去 garde并认为你想做数学。它应该像你对其他一些列所做的那样使用下划线重命名,或者用刻度线包装它。

即:

`avante-garde`
是的,(我不是在批评);该单词实际拼写为"avant-garde",因此请确保它实际上是实际名称。在任何一种情况下,它都会让你失望。

  • 注意:我真的希望这不是你的错字,毕竟你是/正在使用下划线。

在条件语句中对查询使用错误检查会有所帮助。

即。并为其分配一个变量:

$query = mysqli_query($conn, "INSERT INTO gallery_img (...) VALUES (...)");

然后

if($query){
  echo "Success";
} else {
 echo "Error: " . mysqli_error($conn);
 }

另一件事。确保列类型正确且长度合适。如果长度不足以容纳数据,MySQL可以无声地失败。

使用准备好的声明;您的代码目前对SQL注入开放。

<强>脚注:

您可能希望使用三元运算符而不是部分/全部if{...} else{...}语句,而且代码更短。

手册中的示例:

$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

当然,您可以将empty替换为isset

有值得注意的事情,这可能(也)阻止您的查询执行,这是查询的位置。

你有以下条件。如果您的上传失败,查询也会失败。

if(move_uploaded_file($_FILES['img_file']['tmp_name'][$i], $target)){
    mysqli_query($conn, "INSERT INTO gallery_img (...) VALUES (...)");
    echo '<div class="...">Success...</div>';
}else {
    echo '<div class="...">Error...</div>';
}

上传失败的几个可能原因,可能是以下任何一种原因:

  • 文件太大
  • 未设置要写入的文件夹的权限。
  • 文件输入的错字
  • 其他

上传错误代码/消息的参考: