проблема со вставкой с последним вставленным идентификатором - PullRequest
0 голосов
/ 12 июня 2018

Что у меня есть: База данных с 2 таблицами: Reactions и ReactionImages.Пользователь может опубликовать реакцию с некоторыми изображениями.Таким образом, таблица Реакции имеет идентификатор автоинкремента.А в таблице ReactionImages есть столбец с именем: 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 или более изображениями.Первое изображение get - это правильный response_id.Но второе изображение получает идентификатор из изображения, которое было загружено до этого.Я знаю, почему это происходит, потому что я использую $database->lastInsertId(); Но как мне заставить его загружать, например, 2 изображения и получать оба изображения, чтобы получить один и тот же response_id?

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Я бы порекомендовал получить последний идентификатор вставки сразу после запроса на вставку и сохранить его в переменной для дальнейшего использования.

0 голосов
/ 12 июня 2018

Просто поместите идентификатор реакции в переменную

$app->insert_query('reacties', $q1, 'id'); $reactie_id = $database->lastInsertId();

А затем внутри цикла используйте его.

$q1['reactie_id'] = $reactie_id;

0 голосов
/ 12 июня 2018

Я бы пока остановился на базовом решении, прежде чем foreach создаст переменную, такую ​​как $photoUploaded = false;, затем, когда вы получите последний идентификатор вставки, установите для него значение true, а затем предварительно получите оператор if, проверяющий еговерно или нет, если это правда, используйте последний идентификатор вставки ... Примерно так:

$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>';
    }
}
...