|
|
|
| Доброй ночи, господа.
у меня написана простенькая гостевая. на Денвере всё работает замечательно, при переносе на хостинг с 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 ?
Спасибо всем ответившим. | |
|
|
|
|
|
|
|
для: Arktur
(30.04.2009 в 00:57)
| |
<?
//...
if( (!empty($name)) && !empty($u_comment)) {
// добавляем комментарий в базу данных
$query3 = "INSERT into ..... )";
//запись в базу выполнять в теле условия, а не вне его
$result3 = mysql_query($query3);
}
|
Но так нельзя делать, впихивая в базу все без проверки, и не обрабатывая строки.
Да и вообще, забудьте вы о такой Гостевой - плакать потом придется долго. Скачайте готовый код гостевой (их в сети много), узучите код, напишите на базе его что-то свое простое, но уже основываясь хоть на минимальных знаниях. | |
|
|
|
|
|
|
|
для: sim5
(30.04.2009 в 06:18)
| | из строк удаляются кавычки и html тэги, проверяется правильность формата e-mail, вставляются символы смайликов и тд. весь код не имеет смысла приводить.
1) что ещё должно проверяться?
2) "забудьте вы о такой Гостевой - плакать потом придется долго"
можно развернуть что принципиально не так?
скачал штук 5 простейших гостевых, всё делается точно так же.
3) самое главное, почему у меня не выполняются циклы проверки
if( (!empty($name)) && !empty($u_comment)) {
я не услышал.
Если можно, разверните более детально. Спасибо. | |
|
|
|
|
|
|
|
для: Arktur
(30.04.2009 в 16:16)
| | Вот это - if( (!empty($name)) && !empty($u_comment)), при соблюдении условия будет работать везде, в любой версии РНР. Ну а остальное не знаю, если у вас все ОК - значит ОК. | |
|
|
|
|
|
|
|
для: sim5
(30.04.2009 в 16:24)
| | Работает только на домашнем компютере с Денвер и PHP 4. На хостинге нет. isset тоже не работает на хостинге, но здесь она не нужна. В другом скрипте на этом же хостинге не работает arsort.
Не знаю. Первый раз сталкиваюсь с ситуацией, когда даже нет идей "почему так происходит" :-)
Была версия, что проблема с кодировками(данные в базе гостевой хранятся в cp1251) но без проверки if всё отправляется и затем отображается нормально. | |
|
|
|
|
|
|
|
для: 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. Вы вместо условия этого и записи, выведите значения этих переменных на экран, определите где ошибка. | |
|
|
|
|
|
|
|
для: 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.
Спасибо за посильную помощь. Всё работает. | |
|
|
|
|
|
|
|
для: Arktur
(01.05.2009 в 02:54)
| | Обрамляйте свой код тегами [сode][/сode] - ошибку будут заменты, иначе читать его просто.... | |
|
|
|