Несколько Div на основе выбранного номера (LARAVEL)

У меня проблема с моим кодом. Согласно другому сообщению: (Создание нескольких разделов на основе числа, выбранного в раскрывающемся меню) Я взял некоторые идеи для своего кода, но у меня есть проблема. Я хочу вставить в свою базу данных все входные данные из созданных div, но он записывает только последние входные данные div. Это моя настройка контроллера:

$generals= new Instance;

$generalsnames=implode("",$_POST['generalname']);

$generalstime=implode("",$_POST['generaltime']);

$generals->Name= $generalsnames;

$generals->Time= $generaltime;

$generals->save();

Вы можете помочь мне? Спасибо за совет

Вы можете предоставить данные, которые хотите сохранить? и код того, откуда придет div.

Jovs 01.07.2019 02:32

Я ответил в другом комментарии. Спасибо, сэр! :)

Alessio 01.07.2019 09:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
355
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

В коде HTML (blade) добавьте «[]» к именам полей. Таким образом, ваши имена полей должны быть следующими:

<input type = "text" name = "generalname[]">
<input type = "text" name = "generaltime[]">

вместо

<input type = "text" name = "generalname">
<input type = "text" name = "generaltime">

потому что только последнее значение добавленных div с такими именами будет включено в ваш POST-запрос к вашему маршруту, если вы не указали массив для имен ваших полей.

Затем в вашем контроллере:

public function store(Request $request)
{
   $input = $request->all();
   //you might want to combine your arrays for easier saving
   $general_time = array_combine($input['generalname'], $input['generaltime']);

   //then you will use foreach statement to save all of your data
   foreach($general_time as $general => $time)
   {
      $generals = new Instance;
      $generals->Name = $general;
      $generals->Time = $time
      $generals->save();
   }
}

Я сделал это! Теперь проблема в том, что все результаты помещаются в одну строку, а не в несколько строк... Как я могу написать разные строки для каждого блока div?

Alessio 01.07.2019 09:35

Используйте оператор foreach и не сжимайте массив, потому что в результате его схлопывания получится строка, поэтому в базу данных будет записана только одна запись.

rkg 01.07.2019 09:44

Мне нужно настроить оператор foreach на другой стороне HTML и php?

Alessio 01.07.2019 09:58

как упомянул @rkg, вам нужно [] в вашем лезвии, тогда на вашем контроллере это будет ваш код.

$input = $request->all();
for($i=0; $i<count($input['generalname']); $i++)
{
    $generals= new Instance;
    $generals->Name= $input['generalname'][$i];
    $generals->Time= $input['generaltime'][$i];
    $generals->save();
}

вы добавили [] к вашему входному имени?

Jovs 01.07.2019 10:19

да. Я сделал. Например: <input class = "form-control" name='generalname[]' id = "generalname" placeholder = "Имя генерала"/><br>

Alessio 01.07.2019 10:25

о, я думаю, потому что тот, который вы получаете, - это идентификатор, а не имя. Попробуйте сделать это с именем входа, а не с идентификатором.

Jovs 01.07.2019 10:27

извините не совсем понял. Мне тоже нужно добавить «[]» в идентификатор?

Alessio 01.07.2019 10:44

Нет, ваш jquery передает данные в контроллер или у вас есть форма, которая передает их в контроллер?

Jovs 01.07.2019 10:46

Я думаю, что мой jquery просто добавляет несколько div, и разные формы передают данные в контроллер. Я не очень разбираюсь в jquery и т. д. Я скопировал код jquery из другого сообщения, просто чтобы создать разные элементы div.

Alessio 01.07.2019 10:52

попробуйте использовать dd(request->all()); и посмотреть, получает ли ваш ввод все это

Jovs 01.07.2019 10:54

Ой. На самом деле я вижу две разные строки для каждого общего имени и общего времени: «экземпляры» => массив: 1 [▼ 0 => «Тест»] «общее имя» => массив: 2 [▼ 0 => «1111» 1 => «2222 " ] "generaltime" => array:2 [▼ 0 => "-10" 1 => "-6" ] Думаю, я разобрался. Что мне не хватает..? Спасибо

Alessio 01.07.2019 10:58

На самом деле данные вставляются в базу данных. Каждый раз, когда я перезагружаюсь, я получаю разные строки в базе данных с правильными данными, которые я вставил. Но у меня все еще есть проблема с преобразованием массива в строку... Почему?

Alessio 01.07.2019 11:37
Ответ принят как подходящий

Я заработал.

Я смешал решения @Jovs и @rkg. После нескольких настроек и перезапуска сервера у меня все заработало. Выполненные шаги:

  • Добавлено [] в теги имен в файле blade.php.
  • В контроллере я поместил код @Jovs (в операторе for вы пропустили " ' ")
$input = $request->all();
for($i=0; $i<count($input['generalname']); $i++){
   $generals= new Instance;
   $generals->Name= $input['generalname'][$i];
   $generals->Time= $input['generaltime'][$i];
   $generals->save();
}

У меня возникла проблема с преобразованием массива в строку. Я действительно ничего не трогал. Я только что перезапустил сервер, но позже у меня все заработало.

Другие вопросы по теме