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