Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Глюк в гостевой при отправлении данных? empty не выполняется?
 
 автор: Arktur   (30.04.2009 в 00:57)   письмо автору
 
 

Доброй ночи, господа.

у меня написана простенькая гостевая. на Денвере всё работает замечательно, при переносе на хостинг с PHP 5 начинаются проблемы.
сама форма гостевой и обработка отосланных данных находятся в одном php файле

кратенько код выглядит так

$connect = @mysql_connect($host,$user,$password);
@mysql_query ("SET NAMES `cp1251`");
mysql_select_db($database) or die("Не могу подключиться к базе.");

$name = $_POST["name"];
$u_comment = $_POST["u_comment"];
$u_ip = $_SERVER["REMOTE_ADDR"];

if (empty($name) and (!empty($u_comment)) ) {
?>
<SCRIPT>
alert('Поле "Имя" не указано!');
</SCRIPT>
<?php
}

if( (!empty($name)) and (!empty($u_comment)) ) {
// добавляем комментарий в базу данных
$query3 = "INSERT into message VALUES (
'".($Zap+1)."',
'".$name."',
'".$u_comment."',
'".$u_ip."',
)";
}
$result3 = mysql_query($query3);

Дальше идет таблица и в ней форма для ввода комментария
<FORM action='gb.php' method=post name="guestbook">
<INPUT type="text" maxLength=30 size=28 name=name>
<TEXTAREA name=u_comment rows=5 wrap=VIRTUAL cols=84>
</form>
и дальше вывод данных уже из базы гостевой.
------------------------
Так вот на Денвере с PHP 4 при тестировании всё работает замечательно, при переносе на хостинг c PHP 5 кусочки кода с проверкой
if (empty($name) and (!empty($u_comment)) ) {
не выполняются и данные из гостевой в базу не добавляются, без проверки if данных тоже нормально добавляются в базу.
В чём тут причина и как корректно проверить не пусты ли поля name и _comment ?

Спасибо всем ответившим.

  Ответить  
 
 автор: sim5   (30.04.2009 в 06:18)   письмо автору
 
   для: Arktur   (30.04.2009 в 00:57)
 

<?
//...
if( (!empty($name)) && !empty($u_comment)) {
  
// добавляем комментарий в базу данных
  
$query3 "INSERT into ..... )";
  
//запись в базу выполнять в теле условия, а не вне его 
  
$result3 mysql_query($query3);
}

Но так нельзя делать, впихивая в базу все без проверки, и не обрабатывая строки.
Да и вообще, забудьте вы о такой Гостевой - плакать потом придется долго. Скачайте готовый код гостевой (их в сети много), узучите код, напишите на базе его что-то свое простое, но уже основываясь хоть на минимальных знаниях.

  Ответить  
 
 автор: Arktur   (30.04.2009 в 16:16)   письмо автору
 
   для: sim5   (30.04.2009 в 06:18)
 

из строк удаляются кавычки и html тэги, проверяется правильность формата e-mail, вставляются символы смайликов и тд. весь код не имеет смысла приводить.
1) что ещё должно проверяться?
2) "забудьте вы о такой Гостевой - плакать потом придется долго"
можно развернуть что принципиально не так?
скачал штук 5 простейших гостевых, всё делается точно так же.
3) самое главное, почему у меня не выполняются циклы проверки
if( (!empty($name)) && !empty($u_comment)) {
я не услышал.

Если можно, разверните более детально. Спасибо.

  Ответить  
 
 автор: sim5   (30.04.2009 в 16:24)   письмо автору
 
   для: Arktur   (30.04.2009 в 16:16)
 

Вот это - if( (!empty($name)) && !empty($u_comment)), при соблюдении условия будет работать везде, в любой версии РНР. Ну а остальное не знаю, если у вас все ОК - значит ОК.

  Ответить  
 
 автор: Arktur   (30.04.2009 в 16:40)   письмо автору
 
   для: sim5   (30.04.2009 в 16:24)
 

Работает только на домашнем компютере с Денвер и PHP 4. На хостинге нет. isset тоже не работает на хостинге, но здесь она не нужна. В другом скрипте на этом же хостинге не работает arsort.
Не знаю. Первый раз сталкиваюсь с ситуацией, когда даже нет идей "почему так происходит" :-)
Была версия, что проблема с кодировками(данные в базе гостевой хранятся в cp1251) но без проверки if всё отправляется и затем отображается нормально.

  Ответить  
 
 автор: sim5   (30.04.2009 в 16:52)   письмо автору
 
   для: Arktur   (30.04.2009 в 16:40)
 

empty() это конструкция языка, с чего бы она не работала в РНР 5.

Возвращаемые значения
Returns FALSE if var has a non-empty and non-zero value.

The following things are considered to be empty:
"" (an empty string)
0 (0 as an integer)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)

Без условий у вас все что угодно будет записываться в базу.

PS. Вы вместо условия этого и записи, выведите значения этих переменных на экран, определите где ошибка.

  Ответить  
 
 автор: Arktur   (01.05.2009 в 02:54)   письмо автору
 
   для: sim5   (30.04.2009 в 16:52)
 

идея пошаговой проверки скрипта была правильная :-)

ошибка номер 1 была здесь:
<FORM action='gb.php' method=post name="guestbook">
<INPUT type="text" maxLength=30 size=28 name=name>

после замены имени поля формы на
<INPUT type="text" maxLength=30 size=28 name=u_name>
стали выполняться циклы if empty()

ошибка номер 2 была всё же в кодировке.
данные из формы отправлялись с кодировкой cp1251, на хостинге по умолчанию utf-8, хоть для базы и выставлено cp1251.

Спасибо за посильную помощь. Всё работает.

  Ответить  
 
 автор: sim5   (01.05.2009 в 07:54)   письмо автору
 
   для: Arktur   (01.05.2009 в 02:54)
 

Обрамляйте свой код тегами [сode][/сode] - ошибку будут заменты, иначе читать его просто....

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования