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 :: Ошибки при считывании с input

 PHP.SU

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


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

> Без описания
Нуб
Отправлено: 21 Июля, 2012 - 20:53:24
Post Id


Гость


Покинул форум
Сообщений всего: 83
Дата рег-ции: Июль 2012  


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




Вновь проблема с mysql, точнее с запросами php. Когда считываю поле "Автор", которое выглядит следующим образом:
CODE (html):
скопировать код в буфер обмена
  1. <input type='text' size=40 name="user" value=''>

Вот кусок кода:
PHP:
скопировать код в буфер обмена
  1. $filename = $_FILES['userfile']['name']; # Получаем название файла (включая его расширение).
  2. $ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); # Получаем расширение имени файла.
  3. $file_strip = str_replace(" ","_",$filename); # Замещаем пробелы в названии файла
  4. $file = $dir.$file_strip;
  5.  
  6. if (move_uploaded_file($_FILES['userfile']['tmp_name'], $dir . $file_strip)) {
  7. $db_author = "Anon"; # "Стандартный" пользователь, который загружает файл
  8. if ($_POST['user'] <> 0) # Если поле "Автор" не пустое
  9. {
  10. # Тогда считываем поле "Автор"
  11. $db_author = html_entity_decode( stripslashes( $_POST['user'] ) );
  12. }
  13.  
  14. $db_filename = $file_strip; # Имя файла для бд
  15. $db_description = html_entity_decode( stripslashes( $_POST['description'] ) );
  16. $db_password = html_entity_decode( stripslashes( $_POST['pass'] ) );
  17. $db_downloads = 0;
  18. $db_expire = 0;
  19. $db_timestamp = 0;
  20.  
  21. #mysql_close($query);
  22. mysql_query("INSERT INTO files (author, filename, description, password, downloads, expire, timestamp) VALUES ('{$db_author}','{$db_filename}','{$db_description}','{$db_password}','{$db_downloads}','{$db_expire}','{$db_timestamp}')");


Когда указываешь в поле "Автор" что-либо, обычно в бд записывается пустое значение...

(Отредактировано автором: 21 Июля, 2012 - 20:54:12)

 
 Top
KingStar
Отправлено: 21 Июля, 2012 - 21:04:00
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


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




попробуй



что выйдет??

и что за манера писать то одинарные ковычки, то двойные, то вообще не использовать???

CODE (html):
скопировать код в буфер обмена
  1. <input type='text' size=40 name="user" value=''>

(Отредактировано автором: 21 Июля, 2012 - 21:16:35)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
Hawkmoth
Отправлено: 21 Июля, 2012 - 21:08:16
Post Id


Посетитель


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


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




Нуб пишет:
if ($_POST['user'] <> 0)

PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['user']) && !empty($_POST['user']))

Нуб пишет:
html_entity_decode( stripslashes( $_POST['description'] ) )

По-моему, здесь вполне достаточно mysql_real_escape_string(). Всё остальное можно добавить при выводе .

(Отредактировано автором: 21 Июля, 2012 - 21:28:35)

 
 Top
KingStar
Отправлено: 21 Июля, 2012 - 21:13:38
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


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




Нуб пишет:
if ($_POST['user'] <> 0)


по его коду видно, что даже если условие не сработает, то должно заполнится именем по умолчанию, хотя согласен с тобой, что лучше использовать проверку через isset и empty

PHP:
скопировать код в буфер обмена
  1. $db_author = "Anon"; # "Стандартный" пользователь, который загружает файл

(Отредактировано автором: 21 Июля, 2012 - 21:15:51)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
Hawkmoth
Отправлено: 21 Июля, 2012 - 21:19:52
Post Id


Посетитель


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


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




KingStar пишет:
Нуб пишет:
if ($_POST['user'] <> 0)


по его коду видно, что даже если условие не сработает, то должно заполнится именем по умолчанию


А что вернет такое условие, если придет пустая строка?
Впрочем, false, ну да.
Но все равно коробит, когда нечисловые значения проверяют таким образом.

(Отредактировано автором: 21 Июля, 2012 - 21:23:49)

 
 Top
LIME
Отправлено: 21 Июля, 2012 - 21:48:33
Post Id


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


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


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




KingStar пишет:
хотя согласен с тобой, что лучше использовать проверку через isset и empty
почему?
Hawkmoth пишет:
Но все равно коробит, когда нечисловые значения проверяют таким образом.
почему?

(Отредактировано автором: 21 Июля, 2012 - 21:49:05)

 
 Top
KingStar
Отправлено: 21 Июля, 2012 - 22:08:35
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


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




LIME пишет:
KingStar пишет:
хотя согласен с тобой, что лучше использовать проверку через isset и empty
почему?


потому что если не будет передана переменная $_POST['user'], будет вызвана ошибка, для этого и проверяется isset, а чтобы проверить пуста она или нет - empty придумали

(Отредактировано автором: 21 Июля, 2012 - 22:09:31)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
PATCH
Отправлено: 21 Июля, 2012 - 22:16:03
Post Id



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


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


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




а зачем и потом?
PHP:
скопировать код в буфер обмена
  1. if(isset($_POST['user']) and empty($_POST['user'])) {
  2.            die('вы ввели пустое значение в поле user');
  3. }

(Отредактировано автором: 21 Июля, 2012 - 22:16:35)

 
 Top
Hawkmoth
Отправлено: 21 Июля, 2012 - 22:17:06
Post Id


Посетитель


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


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




LIME пишет:
Hawkmoth пишет:
Но все равно коробит, когда нечисловые значения проверяют таким образом.
почему?


Гм. По чисто субъективным моментам - удобочитаемости кода, например. При взгляде на код с таким вариантом проверки у меня лично "напрашивается" числовое значение проверяемого элемента. Если я не прав и существуют ситуации, когда принципиально именно таким образом проверять на не-пустоту другие типы данных - поправьте.

(Отредактировано автором: 21 Июля, 2012 - 22:18:20)

 
 Top
KingStar
Отправлено: 21 Июля, 2012 - 22:20:17
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


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




PATCH пишет:
а зачем и потом?
PHP:
скопировать код в буфер обмена
  1. if(isset($_POST['user']) and empty($_POST['user'])) {
  2.            die('вы ввели пустое значение в поле user');
  3. }



я в упор не вижу этого кода у автора

(Отредактировано автором: 21 Июля, 2012 - 22:20:59)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
LIME
Отправлено: 21 Июля, 2012 - 22:25:06
Post Id


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


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


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




KingStar пишет:
потому что если не будет передана переменная $_POST['user'], будет вызвана ошибка,
не будет
нотайс не ошибка
Hawkmoth пишет:
Если я не прав и существуют ситуации, когда принципиально именно таким образом проверять на не-пустоту другие типы данных - поправьте.
хз...я не парюсь пишу переменную просто
не всегда но бывает
 
 Top
KingStar
Отправлено: 21 Июля, 2012 - 22:26:02
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


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




Hawkmoth пишет:
LIME пишет:
Hawkmoth пишет:
Но все равно коробит, когда нечисловые значения проверяют таким образом.
почему?


Гм. По чисто субъективным моментам - удобочитаемости кода, например. При взгляде на код с таким вариантом проверки у меня лично "напрашивается" числовое значение проверяемого элемента. Если я не прав и существуют ситуации, когда принципиально именно таким образом проверять на не-пустоту другие типы данных - поправьте.


обрати внимание на имя input, и на имя по умолчанию - не пахнет здесь числом

LIME пишет:
не будет
нотайс не ошибка


почему не будет??? я не утверждаю что это фатальная ошибка, но если нет переменной такой, пых тебе обязательно об этом скажет, что нет такой переменной (Undefinid index), и не доказывай, я сам на этом не раз ловился

стоит только пееред ней сделать проверку isset - и проблем нет

(Отредактировано автором: 21 Июля, 2012 - 22:32:42)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
LIME
Отправлено: 21 Июля, 2012 - 22:36:26
Post Id


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


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


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




KingStar повторяю
нотайс является предупреждением а никак не ошибкой
на продакшене вывод ошибок вообще следует отключать
(Добавление)
KingStar пишет:
я сам на этом не раз ловился
бедняга))
 
 Top
Hawkmoth
Отправлено: 21 Июля, 2012 - 22:38:59
Post Id


Посетитель


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


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




KingStar пишет:
обрати внимание на имя input, и на имя по умолчанию - не пахнет здесь числом

Да я вижу, что не пахнет. Я говорю о том, что при беглом взгляде на код, точнее конкретно на строку с условием типа if ($bla_bla_bla<>0), складывается впечатление, что проверяется какое-то числовое значение. Насколько я понял, технически разницы нет, но (повторюсь) по моим чисто субъективным представлениям, проверка строки на не-пустоту с помощью empty() нагляднее и логичнее. (Ну, там, "... склонный к насилию психопат ..." и все дела Закатив глазки )
(Добавление)
LIME пишет:
if ($_POST['user'] ){}

Всё гениальное просто Улыбка

(Отредактировано автором: 21 Июля, 2012 - 22:48:21)

 
 Top
KingStar
Отправлено: 21 Июля, 2012 - 22:41:53
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


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




LIME пишет:
KingStar повторяю
нотайс является предупреждением а никак не ошибкой
на продакшене вывод ошибок вообще следует отключать
(Добавление)
KingStar пишет:
я сам на этом не раз ловился
бедняга))


блин, ну не строй из себя дурака, ты прекрасно понял о чем я Улыбка

(Отредактировано автором: 21 Июля, 2012 - 22:44:15)



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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB