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 :: Работа с файлами и массивами

 PHP.SU

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


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

> Без описания
inna22
Отправлено: 28 Апреля, 2016 - 18:41:58
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Апр. 2016  


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




Здравствуйте. Написала обработчик формы, чтобы данные с нее записывались в файл и позже выводились в таблицу, но вот возникла проблема, уже неделю не могу решить никак - если пользователь пропустил что-то в форме (ничего не указал), то у меня всё сдвигается потом в таблице.
Например надо записать ФИО, пользователь отправил ИО, получится у меня в поле Фамилии запишется его имя, а отчество в поле имени итд.

Проблемы в коде - как сделать / исправить, чтобы если поле не заполнено, то писалось "не заполнено" и чтобы если нет картинки то писалось тоже "нет картинки", а не путь к картинке
Вот сама форма
CODE (html):
скопировать код в буфер обмена
  1. <form action="Form.php" method="POST" enctype="multipart/form-data"><br>
  2.                         <div>
  3.                                 <center>
  4.                                 <h2>Фамилия</h2>
  5.                                         <input type="text" name="sename" style="width:170px"><br>
  6.                                 <h2>Имя</h2>
  7.                                         <input type="text" name="name" style="width:170px"><br>
  8.                                                
  9.                                 <b>Год рождения</b>
  10.                                                 <select name="data">
  11.                                                 <option selected disabled>Я родился в</option>
  12.                                                 <option value="1994">1994</option>
  13.                                                 <option value="1995">1995</option>
  14.                                                 <option value="1996">1996</option>
  15.                                                 </select><br>
  16.                                                         <b>Я</b>
  17.                                                         Мальчик <input type="radio" name="pol" value="М">
  18.                                                         Девочка <input type="radio" name="pol" value="Ж"><br>
  19.                                                                 <b>Занимаюсь</b><br>
  20.                                                                 Спортом <input type="checkbox" name="hobby[]" value="Спорт">
  21.                                                                 Делами <input type="checkbox" name="hobby[]" value="Дела">
  22.                                                                 Ничем <input type="checkbox" name="hobby[]" value="Ничего"><br>
  23.                                                                         <b>Моя фотография</b>
  24.                                                                         <input type="file" name="photo"><br><hr>
  25.                                                                         <input type="submit" name="apply" value="Отправить">
  26.                                 </center>                                                                      
  27.                         </div>
  28.                 </form>


Вот мой php код весь
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include("Sravnenie.php");
  3. if (sizeof ($_POST)>0)
  4.         {
  5.         foreach($_POST as $key=>$mass)
  6.         {
  7.                 if ($key=='apply')
  8.                         continue;
  9.                 if (is_array($mass))
  10.                 {
  11.                         foreach ($mass as $mass1)
  12.                                 $mass0.=$mass1.';';
  13.                                 $mass0.=',';
  14.                 }
  15.                 else
  16.                         $mass0.=$mass.',';
  17.                 }
  18.                 move_uploaded_file($_FILES['photo']['tmp_name'], 'Image//'.$_FILES['photo']['name']);
  19.                 $mass0.='/Lab4/Image/'.$_FILES['photo']['name'];
  20.                 file_put_contents('users.txt',$mass0."\r\n",FILE_APPEND);
  21.         }
  22. //============================================
  23. $users=file('users.txt');      
  24.         foreach($users as $key=>$fileusers)
  25.                 {
  26.                         $element[]=explode(',',$fileusers);
  27.                 }
  28. echo '<table border=1';
  29.         echo '<tr>';
  30.          echo '<td>Фамилия <br>
  31.          <a href="Form.php?field=fam_down">А-Я</a><br>
  32.          <a href="Form.php?field=fam_up">Я-А</a><br>
  33.          </td>';
  34.           echo '<td>Имя<br>
  35.           <a href="Form.php?field=name_down">А-Я</a><br>
  36.           <a href="Form.php?field=name_up">Я-А</a><br>
  37.           </td>';
  38.            echo '<td>Год</td>';
  39.             echo '<td>Пол</td>';
  40.              echo '<td>Занятия</td>';
  41.               echo '<td>Фотография </td>';
  42.         echo '</tr>';
  43.         foreach($element as $key=>$mass)
  44.         {
  45.         echo '<tr>';
  46.         foreach($mass as $k=>$year)
  47.         {
  48.                 if ($year==''||$year=='Выберите Год')
  49.                         echo '<td>Не указано</td>';
  50.                 else
  51.                         {
  52.                                 echo '<td>';
  53.                 if ($k!=5)
  54.                         {
  55.                                 echo $year;
  56.                         }
  57.                 else
  58.                         {
  59.                                 str_replace('D:\PFiles\VertrigoServ\www\Lab4\Image\\','',$year);
  60.                                 echo '<img src="'.$year.'">';
  61.                         }
  62.                                 echo '</td>';
  63.                         }
  64.         }
  65.         echo '</tr>';
  66.         }
  67. echo '</table>';
  68. //============================================
  69. if (isset ($_GET["field"]))
  70.         {
  71.                 $field=$_GET["field"];
  72.         }
  73. else
  74.         {
  75.                 return 0;
  76.         }
  77. //============================================                                 
  78. switch ($field):
  79.                 case "fam_down":
  80.                         usort($element, "fam_down");
  81.                 break;         
  82.                 case "fam_up":
  83.                         usort($element, "fam_up");
  84.                 break;         
  85.                 case "name_down":
  86.                         usort($element, "name_down");
  87.                 break;         
  88.                 case "name_up":
  89.                         usort($element, "name_up");
  90.                 break;
  91. endswitch;
  92. //============================================
  93. ?>

(Отредактировано автором: 28 Апреля, 2016 - 18:43:37)

 
 Top
Pinkya_rabbit
Отправлено: 28 Апреля, 2016 - 19:29:03
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Апр. 2016  
Откуда: Minsk перебираюсь в Питер


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




Логично нужно прикрутить валидатор форм на JS какой-то, например на JQuery есть валидатор. Лучше чем изобретать велосипед использовать готовые варианты
 
My status
 Top
kuller
Отправлено: 28 Апреля, 2016 - 20:15:39
Post Id



Частый посетитель


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


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




Pinkya_rabbit пишет:
валидатор форм на JS какой-то, например на JQuery


а если js отключить, и все нет проверки )))

условие if проверит заполнено поле или нет.

PHP:
скопировать код в буфер обмена
  1.  
  2. if(empty($_POST['sename'])) exit('нет фамилии');
  3.  


и так далее
 
 Top
Pinkya_rabbit
Отправлено: 28 Апреля, 2016 - 21:36:53
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Апр. 2016  
Откуда: Minsk перебираюсь в Питер


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




kuller пишет:
а если js отключить, и все нет проверки )))

Так а зачем пользователь будет отключать если это хинты для пользователя, а не обработчик? Я так понял тут просто нужны подсказки, что пользователь забыл, а что нет.
 
My status
 Top
kuller
Отправлено: 29 Апреля, 2016 - 16:54:52
Post Id



Частый посетитель


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


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




Pinkya_rabbit пишет:
kuller пишет:
а если js отключить, и все нет проверки )))

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


погрешность искать в php. мало ли js не пропускает что та, а это может повлиять на уязвимость. Вообще не зависимо какая там валидация на js, любые приходящие дынные должны проверяться на стороне сервера, а не клиента.
 
 Top
difight
Отправлено: 29 Апреля, 2016 - 17:46:03
Post Id



Посетитель


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


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




Цитата:
а если js отключить, и все нет проверки )))

ну как вариант запретить вход на сайт с отключенным js =).
Ну в любом случае, конечно, все равно нужно проверять все приходящие данные на сервере.
 
My status
 Top
inna22
Отправлено: 02 Мая, 2016 - 07:10:50
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Апр. 2016  


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




К сожалению, решения с js и обязательным полем для заполнения не подходят.
Преподаватель дал подсказку - проверить массив ( или строку? ) и если там пусто, то писать, что не заполнено.
Только не могу понять как это реализовать. Знаю о isset, !empty итд, но как ими воспользоватся?
Получается на данный момент, что с пустыми полями у меня записывается вот так:
,,/Lab4/Image/
т.е не всё. По идее должно быть
Фамилия,Имя,Год,Пол,Интерес1;Интерес2,Картинка
значит пустым должно быть
,,,,,картинка
или же если ничего не заполнено
пусто,пусто,пусто,пусто,пусто,пусто.
Подскажите как исправить, прошу вас Огорчение
 
 Top
ytrewq123
Отправлено: 02 Мая, 2016 - 16:49:44
Post Id


Посетитель


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


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




Пока кто то умнее появится, попробуйте так, может поможет вам ещё что то придумать.



PHP:
скопировать код в буфер обмена
  1.  
  2.   foreach ($mass as $mass1)
  3.   $dlinna  = strlen($mass1);
  4.  
  5. if($dlinna  <1)
  6. {
  7.         $mass1 = ‘Пусто’;
  8.         $mass0.=$mass1.';';
  9.          $mass0.=',';
  10.  
  11. }
  12. else
  13.           {
  14.           $mass0.=$mass1.';';
  15.           $mass0.=',';
  16.            }
  17.  


То есть если $mass1 ничего нет. Присваиваем ему $mass1 = ‘Пусто’;
Вместо strlen ни empty ни ! isset не проходит.
Попробуйте. Сам тоже только учусь.
 
 Top
Viper
Отправлено: 02 Мая, 2016 - 17:27:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




0.
PHP:
скопировать код в буфер обмена
  1. if (is_array($mass))
  2.                 {
  3.                         foreach ($mass as $mass1)
  4.                                 $mass0.=$mass1.';';
  5.                                 $mass0.=',';
  6.                 }
  7.                 else
  8.                         $mass0.=$mass.',';
  9.                 }

Это ваш препод вам подсказал так делать? Или сами сообразили до такого?

1. Чтобы не делать так ($year==''||$year=='Выберите Год') для html-списка задается значение(value) по умолчанию - либо пустое, либо прочерк. При проверке числа приводятся к integer, строковые значения к string(хотя бы для начала, о тонкостях приведений к типам в php можете сами поискать).
2. if ($key=='apply') данная проверка ничего вам не дает.
3. возвращаясь к пункту 0 - если работаете с массивом, то работайте с массивом!
4. один только isset ничего вам не даст. Нужно либо isset && !empty либо вместо isset - array_key_exists
5. 'Image//'.$_FILES['photo']['name'] - никогда не пишите путь к файлам/директориям в php с использованием двойных слешей. Windows понимает одинарный обратный слеш. Исключение составляют unc-пути(//share/folder/).

ytrewq123 пишет:
Вместо strlen ни empty ни ! isset не проходит.
кодировка?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 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