Intereting Posts
CodeIgniter: как получить вход от View и использовать его в контроллере PHP FPM возвращает HTTP 500 для всех ошибок PHP Установите изображение профиля пользователя по умолчанию на изображение их инициалов Почему Magento сохраняет только первые 1000 продуктов в категории после сохранения категории? PHP crypt () возвращает неверный ответ Как шифровать URL-адрес Не получать ответ от Paypal IPN Sandbox Обработка данных формы динамически заполняется из базы данных Реализация архитектуры и дизайн для системы уведомлений с использованием socket.io node.js и входящих сообщений PHPUnit: Как я обманываю эту файловую систему? Не удалось установить PECL Каков формат заголовков электронной почты, которые отображают имя, а не электронную почту? Неустранимая ошибка в преобразовании PPT в PNG в PHP Открыть локальный почтовый архив mbox с помощью imap_open () в PHP Перейдите на другую страницу после завершения загрузки файлов в dropzone.js v4.0

Проблема с получением данных из нескольких полей в один массив

У меня есть форма, которая выглядит так:

<form name="search" method="post" action="http://example.com/search3/"> Seach for: <input type="text" name="find[]" /> Search for stories by Type <select name="find[]"> <option value="Fiction" selected>Fiction</option> <option value="Non-Fiction">Non-Fiction</option> <option value="Essay">Essay</option> </select> <input type="submit" name="search" value="Search" /> </form> 

на php.search, я получаю данные:

 $input = array( "find" => $_POST['find'], ); 

Он почти работает, за исключением того, что он не помещает результаты в массив поиска. Вместо этого данные собираются в результаты в array2, вероятно, b / ci называют каждое поле find []. Вот var_dump:

 array(1) { ["find"]=> array(2) { [0]=> string(5) “testing1” [1]=> string(7) “testing2” } } 

Я не уверен, почему в этом случае я оставляю массив поиска пустым.

Если я изменил форму, так что имена find [] как массивы станут просто найти, то я получаю данные, чтобы войти в массив с именем find, как я хочу, ОДНАКО, будут отображены только данные формы выбора. См. Var_dump для результатов и как я получаю только один результат вместо двух:

 array(1) { ["find"]=> string(7) “testing2” } 

ТАК ВОПРОС … Как я могу получить входные данные и выбрать данные, захваченные в массиве поиска?

Когда поле именования используется с квадратными скобками [] , PHP автоматически создает вложенный массив в массиве $_POST (или $_GET ).

В вашем случае значение $ input ['find'] – это массив с двумя цифровыми клавишами.

 echo $input['find'][0]; echo $input['find'][1]; 

Вы можете предположить, что индекс 0 содержит значение, введенное в текстовом вводе, индекс 1 содержит значение, выбранное в списке.

Если вы пропустите скобки в именах полей, браузеры отправят их на сервер следующим образом:

 find=value1&find=value2 

PHP при анализе данных сначала сохраняет value1 под ключом, но когда появляется другой ключ find , он просто перезаписывает предыдущее значение новым value2 .

Попробуйте это, это поможет вам.

Название полей должно быть не таким.

 <form name="search" method="post"> Seach for: <input type="text" name="search" /> Search for stories by Type <select name="find[]" multiple> <option value="Fiction" selected>Fiction</option> <option value="Non-Fiction">Non-Fiction</option> <option value="Essay">Essay</option> </select> <input type="submit" name="submit" value="Search" /> </form> <?php if(isset($_POST['submit'])){ $input=array("find"=>$_POST['search'],'search'=>$_POST['find']); print_r($input); } ?> 
 <form name="search" method="post" action=""> Seach for: Search for stories by Type <select name="find[]"> <option value="Fiction" selected>Fiction</option> <option value="Non-Fiction">Non-Fiction</option> <option value="Essay">Essay</option> </select> <input type="text" name="find[]" /> <input type="submit" name="search" value="Search" /> </form> <?php if(isset($_POST)){ $input = array(); $var =array(); foreach ($_POST['find'] as $key => $value) { if(!empty($value)) { array_push($var, $value); } else{ continue; } } $input = array( "find" => $var, ); print_r($input); }