Перейти к содержимому

Реферальная программа Мегаплана


При передаче переменной методом post через форму она пустая

#1 Kuchuluk

Kuchuluk
  • Пользователь
  • 315 сообщений
  • Репутация: 5
0

Отправлено 05 Февраль 2012 - 18:39

вот такая форма

<form action="comment.php" method="post" name="form_com">
<p><label>Ваше имя: </label><input name="author" type="text" size="30" maxlength="30"></p>
<p><label>Текст комментария: <br><textarea name="text" cols="40" rows="4"></textarea></label></p>
<p style="border:1px solid black;">Введите сумму с картинки<br><img style='margin-top:20px;' src="<? echo $myrow4['img']; ?>" width="80" height="40">
  <input style='margin-bottom:25px;' name="pr" type="text" size="5" maxlength="5"></p>
<input name="id" type="hidden" value="<? echo "$id"; ?>">
<p><input name="sub_com" type="submit" value="Комментировать"></p>
</form>

Эта форма передает данные обработчику comment.php, который заносит их в базу. При обновлении страницы должен появляться новый комментарий, но он не появляется. Проверил на вывод все переменные таким кодом:


if (isset ($_POST['author'])) { $author = $_POST['author']; }
if (isset ($_POST['text'])) { $text = $_POST['text']; }
if (isset ($_POST['pr'])) { $pr = $_POST['pr']; }
if (isset ($_POST['sub_com'])) { $sub_com = $_POST['sub_com']; }
if (isset ($_POST["$id"])) { $id = $_POST["$id"]; }
echo '<pre>';
var_dump($_POST);

выдает такой результат:

array(5) {
["author"]=>
string(0) ""
["text"]=>
string(0) ""
["pr"]=>
string(1) "3"
["id"]=>
string(1) "3"
["sub_com"]=>
string(14) "Комментировать"
}
Проверил переменную id таким кодом if (empty ($id)) {echo "Переменная id пустая";}
оказалось переменная id пустая. Почему она не передалась?

 

 

  • 0

#2 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 05 Февраль 2012 - 18:53


if (isset ($_POST["$id"])) { $id = $_POST["$id"]; }

Проверил переменную id таким кодом if (empty ($id)) {echo "Переменная id пустая";}
оказалось переменная id пустая. Почему она не передалась?

Потому что правильно не $_POST["$id"], а $_POST["id"]
  • 1


#3 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 05 Февраль 2012 - 20:26

спасибо, теперь переменная id передается. Но комментарий в базу так и не заносится. дальше в обработчике идет такой код:

if (isset ($sub_com))
{
if (isset($author)) { trim($author); }
else {$author = "";}
if (isset($text)) { trim($text); }
else {$text = "";}
if (empty($author) or empty($text))
{ exit ("<p>Вы ввели не всю информацию, вернитесь назад и заполните все поля.</p><br> <input name='back' type='button' value='вернуться назад' onclick='javascript:self.back();'>"); }
$result = mysql_query ("SELECT sum FROM comments_setting",$db);
$myrow = mysql_fetch_array($result);
echo '<pre>';
var_dump($myrow);
if ($pr == $myrow["sum"])
{
$date = date("Y-m-d");
$result2 = mysql_query("INSERT INTO comments (post,author,text,date) VALUES ('$id','$author,'$text','$date')",$db);
}
else
{
exit ("<p>Вы ввели сумму с картинки неправильно, вернитесь назад и перепроверьте.</p><br> <input name='back' type='button' value='вернуться назад' onclick='javascript:self.back();'>");
}
$myrow2 = mysql_fetch_array($result2);
echo '<pre>';
var_dump($myrow2);
}
выдается сообщение об ошибке:
array(2) {
[0]=>
string(1) "3"
["sum"]=>
string(1) "3"
}


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:homelocalhostwwwphpblogcomment.php on line 45

bool(false)
то есть я так понимаю, что новые поля не были добавлены в таблицу БД?
  • 0

#4 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 05 Февраль 2012 - 21:28

Сама ошибка говорит, что в функцию mysql_fetch_array() попадает не то, что должно, а именно - булев тип false вместо ресурса. Следовательно, ошибку нужно искать в запросах.
После каждого запроса нужно ставить проверки, чтобы проще отлавливались ошибки, об этом уже говорилось:
$result = mysql_query ("SELECT sum FROM comments_setting",$db) or die(mysql_error());

то есть я так понимаю, что новые поля не были добавлены в таблицу БД?

Почему? Вполне может быть, что добавилось - достаточно легко проверить это... просто посмотри в БД ;) . В скрипте я вижу 2 запроса. Ошибка, скорее всего, идет на второй из них ($result2), поскольку он добавляет данные и фетчить добавление просто бессмысленно.
  • 0


#5 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 05 Февраль 2012 - 22:00

matroskin8, как ты и предполагал, ошибка оказалась во втором запросе. выдал вот такую ошибку You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'g','2012-02-05')' at line 1
  • 0

#6 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 05 Февраль 2012 - 22:26

Ну тогда вот отличный метод отладки запросов:
1) формируем текст запроса;
2) выводим текст запроса на экран, останавливая работу скрипта;
3) смотрим текст запроса и ищем ошибки - сравниваем имена полей в запросе с именами полей в БД, смотрим, что попадает в каждое конкретное значение поля и т.д.
В коде это выглядит так:
$query = "INSERT INTO comments (post,author,text,date) VALUES ('$id','$author,'$text','$date')"; // формируем текст запроса
echo $query; // распечатываем текст запроса
exit; // останавливаем на этом выполнение скрипта
4) после устранения всех ошибок - уже отсылаем сам запрос, убирая распечатку и выход из программы:
$query = "INSERT INTO comments (post,author,text,date) VALUES ('$id','$author,'$text','$date')"; // формируем текст запроса
$res = mysql($query) or die(mysql_error()); // отправляем запрос

  • 1


#7 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 06 Февраль 2012 - 17:14

блин, такая тупая ошибка оказалась))) оказывается в запросе после $author апостроф не стоял. спасибо большое!
  • 0

#8 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 06 Февраль 2012 - 17:49

Пожалуйста ;)
  • 0


#9 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 09 Март 2012 - 15:12

Здравствуйте еще раз.
делаю вот такой запрос на вывод из тыблицы БД:

$result0 = mysql_query("SELECT id, name, mini_biography, mini_portrait FROM authors WHERE cat='$cat'",$db);
вроде все написано правильно, но выдает такую синтаксическую ошибку - Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in Z:homelocalhostwwwhavebookview_cat.php on line 48 - именнов этой строке.
переменная cat передается в этот файл методом GET, но ее я уже до этого вывел в простую переменную $cat. не пойму в чем ошибка, запрос же правильный.
  • 0

#10 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 09 Март 2012 - 15:23

Где-то перед этой строкой, скорее всего, не закрыта инструкция, т.е., в конце строки пропущена точка с запятой. На сам запрос не ругается.
  • 1


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru