переменная полученная методом GET в запросе mysql

SHTIRLITZ

Новичок
переменная полученная методом GET в запросе mysql

FreeBSD 6.1
Apache 1.3.34
PHP Version 4.4.2

Существует простейший код выборки id в соответствии с именем автора, полученным из формы. Проблема - не происходит выборка id.

При использовании нижеуказанного кода выборка НЕ происходит.
PHP:
$author = $HTTP_GET_VARS["author"];
...
$auth_query = " select `authorid` from `author` where `name`='".$author."' ";
$auth_res = mysql_query ($auth_query) or die ("Нет результата: ". mysql_error() );
$row = mysql_fetch_array ($auth_res);
print $row["authorid"];
Проверяю получение данных из формы:
PHP:
print $author;
- следовательно данные из формы получил

Код работает только в том случае если перед формированием запроса явно задать значение переменной:
PHP:
$author = "Дэн Маргулис";
$auth_query = " select `authorid` from `author` where `name`='".$author."' ";
для отладки использовал
PHP:
ini_set('display_errors',1);
error_reporting(E_ALL);
и
PHP:
var_dump ()
читал

http://phpfaq.ru/slashes
 

Wicked

Новичок
var_dump($HTTP_GET_VARS);
var_dump($auth_query);
var_dump(mysql_num_rows($result));

ЗЫ: зачем, например, в запросе пробелы внутри ' кавычек?
 

SHTIRLITZ

Новичок
var_dump($HTTP_GET_VARS);
||
string(14) " Дэн Маргулис "

var_dump($auth_query);
||
string(63) " select `authorid` from `author` where `name`=' Дэн Маргулис ' "

var_dump (mysql_num_rows($auth_res));
||
0

var_dump ($auth_res);
||
resource(3) of type (mysql result)

ЗЫ: зачем, например, в запросе пробелы внутри ' кавычек?
виноват .. правил здесь руками после копирования.. ибо они сливались в 3 одинаковые, а после отправки поста преобразовались.. поправил

-~{}~ 29.07.06 23:08:

Автор оригинала: WP
А кодировка?
думал уже про это..
файлы в 1251
mysql 1251
 

Wicked

Новичок
короче....

PHP:
$author = $HTTP_GET_VARS["author"]; 
... 
$auth_query = " select `authorid` from `author` where `name`='".$author."' ";
print $auth_query;
давай сравним с
PHP:
$author = "Дэн Маргулис"; 
$auth_query = " select `authorid` from `author` where `name`=' ".$author." ' ";
print $auth_query;
 

SHTIRLITZ

Новичок
select `authorid` from `author` where `name`=' Дэн Маргулис '

select `authorid` from `author` where `name`='Дэн Маргулис'

мде
т.е. надо слешировать?
 

Wicked

Новичок
слэшировать (mysql_real_escape_string) надо обязательно.

но к проблеме это не относится... откуда пробелы то берутся? я только в этом вижу разницу между этими двумя запросами.
 

SHTIRLITZ

Новичок
значение из формы выбирается выпадающим меню select.. может там добавляются пробелы?
 

SHTIRLITZ

Новичок
емае !!
в форме было

<option value=" <? print $row ["name"]; ?> "><? print $row ["name"]; ?></option>

а надо без пробелов

<option value="<? print $row ["name"]; ?>"><? print $row ["name"]; ?></option>


Господа, всем огромное спасибо во вклад в обучение минимальной отладке программ.
Прошу прощения за столь кхм... вопрос. На лицо первый опыт программирования .. и отладки своих косяков.

зы: НЕ вставляйте где не надо пробелов !!!
 

Wicked

Новичок
Спасибо, полковник. Не вставляю :)

вообще, вполне логичной является trim-обработка некоторых выходных строк. В частности, это помогло бы избежать проблем и в этом случае.
 
Сверху