Можно ли зациклить функцию $ request-> hasFile () и не получить дубликаты данных? - PullRequest
1 голос
/ 16 апреля 2019

Мне нужно зациклить функцию $request->hasFile() как часть модуля обновления как такового;

foreach ($answers as $a) {
    $ansid = 0;
    $ansid = $a['id'];
    $ans['quiz_content'] = $data['quiz_content_'.$a['id']];
    $ans['quiz_is_answer'] = 0;
    if ($data['radio-group8'] == "radio-group8_".$a['id']) {
        $ans['quiz_is_answer'] = 1;
    }
    if ($request->hasFile('quiz_img_'.$ansid) && $data['quiz_content_'.$ansid] == null && !empty($data['quiz_img_'.$ansid])) {
        $project_image = $request->file('quiz_img_'.$ansid);
        $filename = $ansid.'answer'.time().'.'.$project_image->getClientOriginalExtension();
        $destinationPath = public_path('/uploads/elearning/answers');
        $project_image->move($destinationPath, $filename);
        $ans['quiz_image_name'] = $filename;
        $ans['quiz_content_type'] = 2;
    } elseif ($request->hasFile('quiz_img_'.$ansid) && $data['quiz_content_'.$ansid] != null && !empty($data['quiz_img_'.$ansid])) {
        $project_image = $request->file('quiz_img_'.$ansid);
        $filename = $ansid.'answer'.time().'.'.$project_image->getClientOriginalExtension();
        $destinationPath = public_path('/uploads/elearning/answers');
        $project_image->move($destinationPath, $filename);
        $ans['quiz_content'] = $data['quiz_content_'.$ansid];
        $ans['quiz_image_name'] = $filename;
        $ans['quiz_content_type'] = 3;
    }

    QuizOption::where('id', $ansid)->update($ans);
}

Однако, когда я обновляю свои варианты викторины, скажем, у меня есть три варианта, a, b и c.Если бы я установил изображение на a, b и c получили бы то же изображение и тот же тип контента.Если бы я установил изображение на b, c получил бы то же изображение и тип контента, что и b.Я знаю, что проблема заключается в условии if($request->hasFile()).но как мне его кодировать, чтобы у каждой опции, a, b и c, был уникальный ответ и картинка?

1 Ответ

2 голосов
/ 16 апреля 2019

Проблема, с которой вы столкнулись, на самом деле связана с тем, как вы устанавливаете переменную $ans в цикле, а не вызов $request->hasFile().Поскольку вы никогда не сбрасываете данные внутри $ans - только устанавливаете определенные индексы - любой набор данных во время условия, который не совпадает в будущих циклах, никогда не изменяется.

Вот упрощенный пример проблемы ( просмотр результатов на 3v4l.org ):

$data = array();

for ($i = 0; $i < 5; $i++) {
    $data['id'] = $i;

    if ($i === 2) {
        $data['foobar'] = $i;
    }

    var_dump($data);
}

Когда условное условие if проходит при $i = 2, оно устанавливает индекс foobar для массива.Ни один из будущих циклов не изменит этот индекс и не сбросит массив $data.

Я бы предложил поместить $ans = []; или аналогичный сброс в начало вашего цикла, чтобы каждый получал свежие данные, связанные столько его ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...