有这个过程将数据插入两个表并且工作正常,但问题是如果我选择3个图像进行上传并将它们查询到db中,当我提交我的表单时,我看到3个查询在db中插入并且必须是一个表格游览和3个具有相同ID的插入游览:表poze_articol
中的图像路径具有来自行(pid
的游览中相同的ID ...这里有些错误
Php代码:
<?php
$servername = "";
$username = "";
$password = "";
$dbname = "";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if(isset($_POST['addtour']))
{
#### START FROM HERE I THINK IS THE PROBLEM ###
define ("MAX_SIZE","9000");
function getExtension($str)
{
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
$valid_formats = array("jpg", "png", "bmp","jpeg");
$uploaddir = "../../../img/carousel/"; //image upload directory
foreach ($_FILES['photos']['name'] as $name => $value)
{
$filename = stripslashes($_FILES['photos']['name'][$name]);
$size=filesize($_FILES['photos']['tmp_name'][$name]);
//get the extension of the file in a lower case format
$ext = getExtension($filename);
$ext = strtolower($ext);
if(in_array($ext,$valid_formats))
{
if ($size < (MAX_SIZE*1024))
{
$image_name=time().$filename;
$newname=$uploaddir.$image_name;
if (move_uploaded_file($_FILES['photos']['tmp_name'][$name], $newname))
{
$sql2 = "INSERT INTO tours (titlu,durata,descriere,pret,ribbon,titlu_slider,desc_slider,descriere_box,titlu_box1,desc_box1,titlu_box2,desc_box2,titlu_box3,desc_box3,titlu_box4,desc_box4) VALUES (
'".$_POST["oras_caseta"]."',
'".$_POST["durata_caseta"]."',
'".$_POST["descriere_caseta"]."',
'".$_POST["pret_caseta"]."',
'".$_POST["icon_caseta"]."',
'".$_POST["titlu_slider"]."',
'".$_POST["descriere_slider"]."',
'".$_POST["descriere_overview"]."',
'".$_POST["titlu_box1"]."',
'".$_POST["desc_box1"]."',
'".$_POST["titlu_box2"]."',
'".$_POST["desc_box2"]."',
'".$_POST["titlu_box3"]."',
'".$_POST["desc_box3"]."',
'".$_POST["titlu_box4"]."',
'".$_POST["desc_box4"]."')";
if ($conn->query($sql2) === TRUE) {
$last_id = $conn->insert_id;
echo '<div class="alert alert-success" role="alert">
<strong>Bravo!</strong> Ai adaugat cu succes un traseu pe site.
</div>';
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$sql = "INSERT INTO poze_articol (poza_articol,pid) VALUES ('img/carousel/$image_name','$last_id')";
if ($conn->query($sql) === TRUE) {}
}
}
}
}
}
$conn->close();
?>
答案 0 :(得分:-1)
如果我很了解你,你想在poze_articol
创建多个文件字段,所有这个poze_articol字段都有旅游字段的id ......
如果是,
首先,所有数据库插入都在foreach循环范围内,换句话说,foreach循环中的代码部分将执行x循环迭代的次数。 (n次他在$ _FILES ['照片'] ['名称']上有项目你的情况。)
要解决此问题, 我建议你首先在foreach之外创建巡回赛场地!
$sql2 = "INSERT INTO tours (titlu,durata,descriere,pret,ribbon,titlu_slider,desc_slider,descriere_box,titlu_box1,desc_box1,titlu_box2,desc_box2,titlu_box3,desc_box3,titlu_box4,desc_box4) VALUES (
'".$_POST["oras_caseta"]."',
'".$_POST["durata_caseta"]."',
'".$_POST["descriere_caseta"]."',
'".$_POST["pret_caseta"]."',
'".$_POST["icon_caseta"]."',
'".$_POST["titlu_slider"]."',
'".$_POST["descriere_slider"]."',
'".$_POST["descriere_overview"]."',
'".$_POST["titlu_box1"]."',
'".$_POST["desc_box1"]."',
'".$_POST["titlu_box2"]."',
'".$_POST["desc_box2"]."',
'".$_POST["titlu_box3"]."',
'".$_POST["desc_box3"]."',
'".$_POST["titlu_box4"]."',
'".$_POST["desc_box4"]."')";
if ($conn->query($sql2) === TRUE) {
$last_id = $conn->insert_id;
echo '<div class="alert alert-success" role="alert">
<strong>Bravo!</strong> Ai adaugat cu succes un traseu pe site.
</div>';
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
因为您希望确保所有文件都保存在本地磁盘和数据库上,所以您可以使用transaction来确保完整性。
创建了巡视场后的Juste,你可以进行循环
foreach ($_FILES['photos']['name'] as $name => $value)
{
$filename = stripslashes($_FILES['photos']['name'][$name]);
$size=filesize($_FILES['photos']['tmp_name'][$name]);
//get the extension of the file in a lower case format
$ext = getExtension($filename);
$ext = strtolower($ext);
if(in_array($ext,$valid_formats))
{
if ($size < (MAX_SIZE*1024))
{
$image_name=time().$filename;
$newname=$uploaddir.$image_name;
if (move_uploaded_file($_FILES['photos']['tmp_name'][$name], $newname)) {
$sql = "INSERT INTO poze_articol (poza_articol,pid) VALUES ('img/carousel/$image_name','$last_id')";
if ($conn->query($sql) === TRUE) {}
}
}
}
}