用于图像的Mysql临时名称文件

时间:2017-07-26 19:11:01

标签: php mysql database image filenames

好吧所以我设置我的商店并添加项目,但由于某种原因我在数据库中获得C:wamp64 mpphpB32E.tmp图片名称而不是图片名称...无法在代码中找到错误: image

$conn = mysqli_connect('localhost', 'root', '', 'webshop');

$cat = $_POST['cat'];
$subcat = $_POST['subcat'];
$name = $_POST['name'];
$brand = $_POST['brand'];
$img = $_FILES['file']['tmp_name'];
$img = $_FILES['fileone']['tmp_name'];
$price = $_POST['price'];
$desc = $_POST['description'];
$sale = 1;

if(isset($_POST["submit"])) {
    if(mysqli_query($conn, "insert into items ( category, subcategory, name,brand, img, price, description,sale ) values ('$cat', '$subcat', '$name', '$brand','$img','$price','$desc','$sale' )") === TRUE) {
        move_uploaded_file($_FILES['file']['tmp_name'], "../img_items/" . $_FILES['file']['name']);
        move_uploaded_file($_FILES['fileone']['tmp_name'], "../img_items/" . $_FILES['fileone']['name']);
        /* success */
    } else {
        /* failure */
        printf("Insert failed: %s\n", mysqli_error($conn));
    }

}

2 个答案:

答案 0 :(得分:2)

首先,你在这里覆盖你的$img变量,所以只使用最后一个变量,你应该为每个(临时/命名)文件使用2个不同的变量。

$img=$_FILES['file']['tmp_name'];
$img=$_FILES['fileone']['tmp_name'];

如果您想使用这些临时文件:

$img_temp_1 = $_FILES['file']['tmp_name'];
$img_temp_2 = $_FILES['fileone']['tmp_name'];

并分别使用move_uploaded_file()中的内容。

然后,您尝试将文件的临时名称插入数据库,而不是名称本身。

$img_name_in_db_1 =$_FILES['file']['name'];
$img_name_in_db_2 =$_FILES['fileone']['name'];

使用上述变量之一插入数据库。

您也可以使用SQL注入,使用预准备语句:

请参阅php.net上处理文件的手册:

编辑:

取自OP的回答:(现已删除)

  

“靠近'S

这是因为SQL注入是导致这种情况的撇号,需要使用准备好的语句,或者mysqli_real_escape_string()的最小转义。

然而,准备好的陈述更好/更安全:

您也可以使用stripslashes()来保留撇号:

然而,您仍然需要防止SQL注入,并保护自己免受潜在的有害用户输入。

答案 1 :(得分:0)

试试这段代码:

$info = pathinfo($_FILES['file']['name']);
$ext = $info['extension'];
$newname = "fileone." . $ext;
if (move_uploaded_file($_FILES["file"]["tmp_name"], $newname)) {
                            $path = "../img_items/" . $newname;
} else {
printf("Insert failed: %s\n", mysqli_error($conn));
}