Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Не передается значение из формы через $_POST

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
surrealistic pillow
Отправлено: 29 Октября, 2014 - 20:22:16
Post Id


Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Март 2014  


Помог: 0 раз(а)




Решаю задачу, уже всю голову сломал, тк в функцию не передается значение из формы.

вот условие:
Имеется файл с содержимым (книга|автор|издательство|состояние) например:
PHP 5 объектно-ориентированное программирование|Шишов Алексей|БХВ|1
MySQL: неподъемная книга разработчика|Шишов Алексей|БХВ|0
Справочник всего Г в России|Пупкин Вася|Пупкин и к0|1
Написать функцию, считывающую из файла построчно данные и разбивающую их на многомерный массив вида:
array(
array(title => [книга], author => [автор], print => [издательство], status => [состояние]),
array(title => [книга], author => [автор], print => [издательство], status => [состояние]),
array(title => [книга], author => [автор], print => [издательство], status => [состояние]),
);
Также функция должна обрабатывать массив книг и возвращать книги с запрошенным (с помощью формы) состоянием в удобочитаемом виде (таблицей).

Вот мой код, и он работает, если аргумент для myfunc() подставлять в коде (то есть например myfunc(0) выводит таблицу с книгами у которых состояние 0, myfunc(1) выводит соответственно книги с 1). Но не работает когда я пытаюсь передать его из формы с помощью $_POST. Ошибка: Warning: Invalid argument supplied for foreach()

PHP:
скопировать код в буфер обмена
  1.  
  2. function myfunc($st){
  3.         $handle = fopen('file.txt', 'r');
  4.         if ($handle) {
  5.                 while (($buffer = fgets($handle, 4096)) !== false) {
  6.                         $pieces = explode('|', $buffer);
  7.                        
  8.                         $pieces['title']=$pieces[0];unset($pieces[0]);
  9.                         $pieces['author']=$pieces[1];unset($pieces[1]);
  10.                         $pieces['print']=$pieces[2];unset($pieces[2]);
  11.                         $pieces['status']=$pieces[3];unset($pieces[3]);
  12.                        
  13.                         if($pieces['status']==$st){
  14.                                 $global[] = $pieces;
  15.                         }              
  16.                 }
  17.         }
  18.         fclose($handle);
  19.         echo'<table>
  20.                         <tr>
  21.                                 <th>Название</th>
  22.                                 <th>Автор</th>
  23.                                 <th>Издательство</th>
  24.                                 <th>Состояние</th>
  25.                         </tr>';
  26.         foreach($global as $pieces){
  27.                 echo'<tr>
  28.                                 <td>'.$pieces['title'].'</td>
  29.                                 <td>'.$pieces['author'].'</td>
  30.                                 <td>'.$pieces['print'].'</td>
  31.                                 <td>'.$pieces['status'].'</td>
  32.                         </tr>';
  33.         }
  34.         echo'</table>';
  35.         /*echo'<pre>';
  36.         print_r($global);
  37.         echo'</pre>';*/
  38. }
  39.  
  40. echo"<p>Выберите значение</p>
  41. <form method='post' action='raschet.php'>
  42.         <select name='status'>
  43.                 <option value='0'>0</option>
  44.                 <option value='1'>1</option>
  45.         </select>
  46.         <input type='submit' value='Отправить запрос'>
  47. </form>
  48. ";
  49.  
  50. if(isset($_POST['status'])){
  51.         $post=$_POST['status'];
  52.         myfunc($post);
  53. }
  54.  

Где ошибка кроется?

(Отредактировано автором: 29 Октября, 2014 - 21:17:20)

 
 Top
dXdYdZ
Отправлено: 29 Октября, 2014 - 21:32:55
Post Id


Посетитель


Покинул форум
Сообщений всего: 271
Дата рег-ции: Нояб. 2013  


Помог: 11 раз(а)




Ошибка кроется в том, что при попытке разделения

в конце строк $buffer попадается символ перевода строки. В итоге, в $pieces['status'] попадает не просто строка с цифрой, а, опять таки, строка с цифрой и с переводом строки.
В итоге, равеноство не выполняется
PHP:
скопировать код в буфер обмена
  1. if($pieces['status']==$st){
  2.                                 $global[] = $pieces;
  3.                         }

Когда равенство не выполняется ни разу, массив $global не создаётся, следовательно, его нельзя перебрать с помощью foreach в строке 26.
Для исправления, необходимо
PHP:
скопировать код в буфер обмена
  1. $pieces['status']=$pieces[3];unset($pieces[3]);

Заменить на
PHP:
скопировать код в буфер обмена
  1. $pieces['status']=trim($pieces[3]);unset($pieces[3]);

А также желательно предварительно создавать пустой массив $global перед его наполнением.
В итоге, получается следующее:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function myfunc($st){
  4.         $handle = fopen('file.txt', 'r');
  5.         if ($handle) {
  6.                                 $global=array();
  7.                 while (($buffer = fgets($handle, 4096)) !== false) {
  8.                         $pieces = explode('|', $buffer);
  9.                        
  10.                         $pieces['title']=$pieces[0];unset($pieces[0]);
  11.                         $pieces['author']=$pieces[1];unset($pieces[1]);
  12.                         $pieces['print']=$pieces[2];unset($pieces[2]);
  13.                         $pieces['status']=trim($pieces[3]);unset($pieces[3]);
  14.                         if($pieces['status']==$st){
  15.                                 $global[] = $pieces;
  16.                         }              
  17.                 }
  18.         }
  19.         fclose($handle);
  20.         echo'<table>
  21.                        <tr>
  22.                                <th>Название</th>
  23.                                <th>Автор</th>
  24.                                <th>Издательство</th>
  25.                                <th>Состояние</th>
  26.                        </tr>';
  27.         foreach($global as $pieces){
  28.                 echo'<tr>
  29.                                <td>'.$pieces['title'].'</td>
  30.                                <td>'.$pieces['author'].'</td>
  31.                                <td>'.$pieces['print'].'</td>
  32.                                <td>'.$pieces['status'].'</td>
  33.                        </tr>';
  34.         }
  35.         echo'</table>';
  36.         /*echo'<pre>';
  37.         print_r($global);
  38.         echo'</pre>';*/
  39. }
  40.  
  41. echo"<p>Выберите значение</p>
  42. <form method='post' action='raschet.php'>
  43.        <select name='status'>
  44.                <option value='0'>0</option>
  45.                <option value='1'>1</option>
  46.        </select>
  47.        <input type='submit' value='Отправить запрос'>
  48. </form>
  49. ";
  50.  
  51. if(isset($_POST['status'])){
  52.         $post=$_POST['status'];
  53.         myfunc($post);
  54. }

(Отредактировано автором: 29 Октября, 2014 - 21:41:06)

 
 Top
surrealistic pillow
Отправлено: 29 Октября, 2014 - 21:56:17
Post Id


Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Март 2014  


Помог: 0 раз(а)




dXdYdZДа, вы правы, все заработало! Спасибо Радость
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB