【问题标题】:Mysql temp name file for image图像的Mysql临时名称文件
【发布时间】:2017-07-26 19:11:00
【问题描述】:

好的,所以我设置了我的商店并添加了项目,但由于某种原因,我在数据库中得到了 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));
    }

}

【问题讨论】:

  • 你需要回溯到它工作的地方以及事情开始向南发展的时间。
  • 您还覆盖了您的 $_FILES 临时数组,并且它的 HTML 将是给定的。
  • 它从来没有用过......我得到的其他项目是我通过 phpmyadmin 手动添加的......我在我的 img 文件夹中获得了图像,(2 张图像)带有他们的名字,所以没问题......但在数据库中是 tmp.name ...idk 为什么...
  • 我建议在这里看看我的答案:stackoverflow.com/questions/38509334/… 它会教你很多关于安全和图像上传的知识。底部还有一个库可以为您处理所有这些。
  • 您还尝试插入文件的临时文件而不是其实际名称,并且缺少斜杠。

标签: php mysql database image filenames


【解决方案1】:

首先,您要在此处覆盖 $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 注入并保护自己免受潜在的有害用户输入。

【讨论】:

    【解决方案2】:

    试试这个代码:

    $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));
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 1970-01-01
      • 2013-11-05
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      相关资源
      最近更新 更多