我有什么:一个包含2个表的数据库:Reactions和ReactionImages。 用户可以使用某些图像发布反应。所以表Reactions有一个自动增量id。表ReactionACT有一个名为:Reaction_id的列。通过这种方式,他们是相互联系的。请参阅下面的代码我如何上传反应+图像:
if(isset($_POST['react_btn'])){
unset($q1);
$q1['reactie'] = $app->check_string($_POST['editor1']);
$q1['topic_id'] = $app->check_string($_POST['topicid']);
$q1['klant_id'] = $app->check_string($_POST['klantid']);
$q1['ledenpagina_id'] = $app->check_string($_POST['ledenpaginaid']);
$q1['onderreactie_id'] = $app->check_string($_POST['onderreactieID']);
$app->insert_query('reacties', $q1, 'id');
if(!empty($_FILES['files']['name'])){
foreach($_FILES["files"]["tmp_name"] as $key=>$tmp_name){
$file_name=$_FILES["files"]["name"][$key];
$file_name = $app->makeurlshop($file_name);
$file_name = $app->check_string($file_name);
$file_tmp=$_FILES["files"]["tmp_name"][$key];
if(($_FILES['files']['error'][$key] == 1) or ($_FILES['files']['error'][$key] == 2)){
echo '<script>alert("<div class="alert alert-error alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4><i class="icon fa fa-exclamation-triangle"></i> Mislukt</h4>
Je foto is te groot, verklein de foto eerst in bijvoorbeeld paint of photoshop.
</div>");</script>';
}
$gelukt = $app->fotoupload($file_tmp, $file_name, 'assets/images/reactiefotos', 800);
if($gelukt == 'ok'){
unset($q1);
$q1['reactie_id'] = $database->lastInsertId();
$q1['foto'] = $file_name;
$app->insert_query2('fotoreactie', $q1);
} else {
echo '<script>alert("'.$gelukt.'");</script>';
}
}
}
}
我的问题是:当我上传2个或更多图片的反应时。第一个图像得到正确的reaction_id。但是第二个图像得到的是在此图像之前上传的图像中的id。我知道为什么会发生这种情况,因为我使用$database->lastInsertId();
但是如何使其上传例如2个图像并使两个图像得到相同的reaction_id呢?
答案 0 :(得分:0)
我会暂时找到一个基本的解决方案,在foreach
创建类似$photoUploaded = false;
之类的变量之前,然后当你得到最后一个插入ID时,将其设置为true然后有一个if语句事先检查它是否为真,如果是,则使用最后一个插入ID ...如此:
$photoUpload = false;
foreach($_FILES["files"]["tmp_name"] as $key=>$tmp_name){
$file_name=$_FILES["files"]["name"][$key];
$file_name = $app->makeurlshop($file_name);
$file_name = $app->check_string($file_name);
$file_tmp=$_FILES["files"]["tmp_name"][$key];
if(($_FILES['files']['error'][$key] == 1) or ($_FILES['files']['error'][$key] == 2)){
echo '<script>alert("<div class="alert alert-error alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4><i class="icon fa fa-exclamation-triangle"></i> Mislukt</h4>
Je foto is te groot, verklein de foto eerst in bijvoorbeeld paint of photoshop.
</div>");</script>';
}
$gelukt = $app->fotoupload($file_tmp, $file_name, 'assets/images/reactiefotos', 800);
if($gelukt == 'ok'){
unset($q1);
if($photoUpload){
$q1['foto'] = $file_name;
$app->insert_query2('fotoreactie', $q1);
}
else{
$q1['reactie_id'] = $database->lastInsertId();
$q1['foto'] = $file_name;
$app->insert_query2('fotoreactie', $q1);
$photoUpload = true;
}
} else {
echo '<script>alert("'.$gelukt.'");</script>';
}
}
答案 1 :(得分:0)
我建议在插入查询后立即获取最后一个插入ID,并将其保存在变量中供以后使用。
答案 2 :(得分:0)
只需将反应ID放入变量
即可 $app->insert_query('reacties', $q1, 'id');
$reactie_id = $database->lastInsertId();
然后在循环中使用它。
$q1['reactie_id'] = $reactie_id;