[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: странная ошибка
denkut
Выдает странную ошибку, очень нужна ваша помощ!!!!:( два дня мучаюсь:(
Вот ошибка: Notice: Undefined variable: id in d:\home\localhost\www\gbrksite\vote_res_books.php on line 17
PHP
<? 

include (
"blocks/db.php");

if (isset(
$_POST['score']))
{
$score $_POST['score'];
}

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

/*(7 линия)*/ $result mysql_query("SELECT rating,q_vote FROM stat WHERE id='$id'");

if (!
$result)
{
echo 
"<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору  <br> <strong>Код ошибки:</strong></p>";
exit(
mysql_error());
}

if (
mysql_num_rows($result) > 0)

{
$myrow mysql_fetch_array($result); 

$new_rating $myrow['rating'] + $score;
$new_q_vote $myrow['q_vote'] + 1;
$update mysql_query("UPDATE stat SET rating = '$new_rating', q_vote = '$new_q_vote'  WHERE id='$id'"); 

if (
$update)
{
echo 
"<html><head>
<meta http-equiv='Refresh' content='0; URL=view_post.php?id=$id'>
</head></html>"
;
exit();

}


}

else
{
echo 
"<p>Информация по запросу не может быть извлечена в таблице нет записей.</p>";
exit();
}






пожалуйста помогите!!!!!!! sad.gif sad.gif sad.gif



Спустя 11 минут, 9 секунд (31.05.2009 - 14:38) waldicom написал(а):
PHP
if (isset($_POST['id']))
{
$id = $_POST['id'];
}
else{
die(
'Не передана переменная ID. Но она нужна, так что все капут');
}

Спустя 5 часов, 11 минут, 3 секунды (31.05.2009 - 19:49) denkut написал(а):
нечего не понял!:( что нужно сделать?
P.S Из за чего она может быть не передана? Вроде все правильно делаю!

Спустя 1 минута, 1 секунда (31.05.2009 - 19:50) vasa_c написал(а):
Вам перевести, что PHP написал?

Спустя 3 минуты, 42 секунды (31.05.2009 - 19:53) denkut написал(а):
нет, я понял что PHP написал, я непонял из за чего id не передается!

Спустя 9 минут, 20 секунд (31.05.2009 - 20:03) Grazor написал(а):
Цитата (denkut @ 31.05.2009 - 19:53)
я непонял из за чего id не передается!

по этому коду невозможно сказать. проверьте свою форму, метод, которым передаются данные, названия полей

Спустя 20 минут, 5 секунд (31.05.2009 - 20:23) denkut написал(а):
давайте я вам представлю форму!!!
HTML
<form action="vote_res_books.php" method="post" name="vv">
<p align="center" class="pvote">Оцените заметку: 1
<input name="score" type="radio" value="1">
2
<input name="score" type="radio" value="2">
3
<input name="score" type="radio" value="3">
4
<input name="score" type="radio" value="4">
5
<input name="score" type="radio" value="5" checked>
<input class="sub_vote" name="submit" type="submit" value="Оценить">
<input name="id2" type="hidden" value="<?php echo "$id";?>">
</p>


ПОмогите!!!!:(

Спустя 25 минут, 23 секунды (31.05.2009 - 20:48) Grazor написал(а):
PHP
if (isset($_POST['id2']))
{
$id = $_POST['id2'];
}
else{
die(
'Не передана переменная ID. Но она нужна, так что все капут');
}


поле-то называется id2
HTML
<input name="score" type="radio" value="5" checked>

biggrin.gif скромненько

Спустя 2 часа, 36 минут, 1 секунда (31.05.2009 - 23:24) denkut написал(а):
всеравно не пашет:(

Спустя 1 час, 4 минуты, 12 секунд (1.06.2009 - 00:28) waldicom написал(а):
Что не пашет-то? Бля блин, ну имейте уважение к другим, пытающимся вам помочь. Опишите конкретно, что не идет и какая ошибка при этом вылазиет.
Призовите на помощь великий debug...

Спустя 12 часов, 6 минут, 38 секунд (1.06.2009 - 12:35) vedmed написал(а):
Линию 17 в студию, пожалуйста!
А вообще такие вещи:
PHP
$update = mysql_query("UPDATE stat SET rating = '$new_rating', q_vote = '$new_q_vote'  WHERE id='$id'");

Надо делать так:
PHP
$update = mysql_query("UPDATE stat SET rating = '{$new_rating}', q_vote = '{$new_q_vote}'  WHERE id='{$id}'");

Спустя 39 минут, 30 секунд (1.06.2009 - 13:15) waldicom написал(а):
Цитата (vedmed @ 1.06.2009 - 10:35)
Линию 17 в студию, пожалуйста!
А вообще такие вещи:
PHP
$update = mysql_query("UPDATE stat SET rating = '$new_rating', q_vote = '$new_q_vote'  WHERE id='$id'");

Надо делать так:
PHP
$update = mysql_query("UPDATE stat SET rating = '{$new_rating}', q_vote = '{$new_q_vote}'  WHERE id='{$id}'");

Я бы такие вещи делал так:

PHP
$clear_id = (int)$id;
$query = "UPDATE stat SET `rating` = '" . $new_rating . "', `q_vote` = '" . $new_q_vote . "'  WHERE `id`='" . $clear_id ."'";
$update = mysql_query($query);


ну и не забывать очистить также $new_rating и $new_q_vote

Спустя 6 минут, 47 секунд (1.06.2009 - 13:21) vedmed написал(а):
Цитата (waldicom @ 1.06.2009 - 10:15)

Я бы такие вещи делал так:

PHP
$clear_id = (int)$id;
$query = "UPDATE stat SET `rating` = '" . $new_rating . "', `q_vote` = '" . $new_q_vote . "'  WHERE `id`='" . $clear_id ."'";
$update = mysql_query($query);


ну и не забывать очистить также $new_rating и $new_q_vote


А чем мой способ плох? Я вообще пользуюсь и таким и таким способом, все зависит от случая, но согласись писать полный запрос, обозначая скобками {}, гораздо удобнее, чем делать конкатенацию строк, запрос выглядит целым и более читаемым.

Спустя 17 минут, 54 секунды (1.06.2009 - 13:39) glock18 написал(а):
Ну вообще, принято конкатенацией строки получать. Хотя, конечно, с {} читается запрос, пожалуй лучше. У этого подхода есть минус - ты не сможешь в скобки поместить функцию. То есть самый простой вариант, когда тебе нужно "заэскейпить" переменную тебя все равно принудит использовать конкатенацию строк wink.gif

2denkut
убедись, что имена полей соответствуют тому, что ты ждешь в скрипте.
если не поможет, выведи содержимое $_POST и проверь, что приходит.

Спустя 21 минута, 20 секунд (1.06.2009 - 14:01) waldicom написал(а):
Цитата (vedmed @ 1.06.2009 - 11:21)
Цитата (waldicom @ 1.06.2009 - 10:15)

Я бы такие вещи делал так:

PHP
$clear_id = (int)$id;
$query = "UPDATE stat SET `rating` = '" . $new_rating . "', `q_vote` = '" . $new_q_vote . "'  WHERE `id`='" . $clear_id ."'";
$update = mysql_query($query);


ну и не забывать очистить также $new_rating и $new_q_vote


А чем мой способ плох? Я вообще пользуюсь и таким и таким способом, все зависит от случая, но согласись писать полный запрос, обозначая скобками {}, гораздо удобнее, чем делать конкатенацию строк, запрос выглядит целым и более читаемым.

Я бы не сказал, что он плох, может быть просто не так удобен.
К уже упоминавшейся невозможности использовать функции, нельзя также просто вывести запрос (например для лога при ошибке).

Спустя 1 час, 5 минут, 3 секунды (1.06.2009 - 15:06) sergeiss написал(а):
Цитата (denkut @ 31.05.2009 - 15:27)
if (isset($_POST['id']))
{
$id = $_POST['id'];
}

/*(7 линия)*/ $result = mysql_query("SELECT rating,q_vote FROM stat WHERE id='$id'");

Даже если предположить, что поле в форме называется id, то всё равно тут есть логическая ошибка. Потому что если ничего не передано (нету поля id), то на этапе формирования запроса переменная $id не будет определена!!! Либо если значение неизвестно.
Я бы сделал (примерно) так (0-предполагаемая величина по умолчанию, индикатор пустого места):
PHP
$id=isset( $_POST['id'] ) ? intval$_POST['id'] : 0;

Это даёт:
1. Защиту от SQL-инъекций
2. Гарантию того, что переменная $id будет определена.
3. Возможность при формировании запроса проанализировать величину $id. Если ноль, то можно вывести сообщение об ошибке.

А вот с этим не соглашусь!
Цитата (vedmed @ 1.06.2009 - 13:35)
А вообще такие вещи:

PHP
$update mysql_query(\"UPDATE stat SET rating = '$new_rating', q_vote = '$new_q_vote'  WHERE id='$id'\");


Надо делать так:

PHP
$update mysql_query(\"UPDATE stat SET rating = '{$new_rating}', q_vote = '{$new_q_vote}'  WHERE id='{$id}'\");

В данном случае, для простых переменных вообще без разницы. А фигурные скобки нужны только в случае сложных переменных каких-то (например, если выводим элемент массива), или переменных переменных.

Спустя 22 минуты, 25 секунд (1.06.2009 - 15:28) vasa_c написал(а):
denkut
читаем здесь - http://phpfaq.ru/debug
и здесь - http://phpfaq.ru/slashes

распри в этой теме не читаем - ничего интересного

Спустя 16 часов, 31 минута, 31 секунда (2.06.2009 - 08:00) Guest написал(а):
Всем большое спасибо!!!!! заработало!!! УРААААА!! только я сам незнаю не чего, что-то удалил из кода и пошло!:) Еще раз спасибо!!!!

Спустя 6 часов, 41 минута, 16 секунд (2.06.2009 - 14:41) vedmed написал(а):
Цитата (waldicom @ 1.06.2009 - 11:01)
Я бы не сказал, что он плох, может быть просто не так удобен.
К уже упоминавшейся невозможности использовать функции, нельзя также просто вывести запрос (например для лога при ошибке).

1. Насчет функции согласен, но я как уже говорил, для каждой цели можно использовать свой способ. Запрос нагляднее выглядит, как написал я.Тем более если нужно вызвать функцию то можно использовать такой способ:
PHP
$var=return_variable();
- как пример просто.
2. Ну а здесь совсем не соглашусь, запрос спокойно выводится, пример:
PHP
<?php
$t
="TABLE1";
$p="VAR1";
$s="VAR2";
$query="SELECT {$p} FROM {$t} WHERE col1={$s}";
echo 
$query;

И запрос выводится в том виде, в котором был отправлен БД.

Спустя 11 минут, 27 секунд (2.06.2009 - 14:52) twin написал(а):
1. Конкатенация работает в полтора раза быстрее.
2. Она нагляднее даже по тому, что подсвечивается редакторами.
Как выясняется, далеко не все знают о фигурных скобках, а значит
3. Этот способ менее прозрачен.
По совокупности приговор - способ со скобками менее оптимален, нежели с конкатенацией.

Спустя 30 минут, 53 секунды (2.06.2009 - 15:23) glock18 написал(а):
Добавлю и я))))
Сам использую конкатенацию и преимущественно одинарные кавычки.

1. +1. Именно поэтому ее и использую.
2. Использовать надо нормальные редакторы, а в плохой можно и такой найти, где конкатенация не подсветится.
3. В плане читаемости строки, я соглашусь vedmed'ом - скобочки позволяют не разрывать строку, и запрос кажется монолитным. Однако, если есть привычка писать/читать с запросы с конкатенацией - они читаются не хуже.

И еще одно - читаемость запросов добивается не только и не столько применением скобок или конкатенаций, а форматированием. Думаю, не нужно приводить примеры плохого и хорошего форматирования - все их и так видели очень много.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.