SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.12.2007 08:40:05

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

как сделать вывод по первой букве

есть набор ссылок типа
0 1 2 3 4 5 6 7 8 9
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я

при нажатии на буковку должна открыватся ссылка /?action=search&qwerty=А

пробовал так: mysql_query("SELECT pole FROM table WHERE imya LIKE '".$_POST['qwerty']."'%");
непашет.

искать кривонаписанные примеры не хочу. жду достойного ответа от профи)

Неактивен

 

#2 16.12.2007 08:53:13

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: как сделать вывод по первой букве

Какая ошибка? Попробуйте так и посмотрите какая ошибка:
mysql_query("SELECT pole FROM table WHERE imya LIKE '".$_POST['qwerty']."'%") or die(mysql_error());

Если Ваша таблица так и называется table, то надо заключить ее имя в обратные кавычки "SELECT pole FROM `table` ...."

Неактивен

 

#3 16.12.2007 09:05:01

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: как сделать вывод по первой букве

немножко переделал. результат тот же.
в браузере: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\192.168.0.2\www\function.php on line 7

можно наблюдать тут: http://80.73.90.3

1. <?
2.
3. function search($qwerty){
4.    $query = "SELECT * FROM `item` WHERE itemName LIKE '".$qwerty."'%";
5.    $result = mysql_query($query);
6.    $text = 'Список:<HR>';
7.    while ($row=mysql_fetch_array($result)){
8.    $text .= $row["itemName"];
9.    $text .= '<BR>';
10.    }
11.    return $text;
12. }
13. ?>

в index.php вывожу так:

<?
if ($_GET["action"] == "search" && $_GET["qwerty"] != ''){
    $text =  file_get_contents('themplate.htm');

    $title = 'тут будет титл';
    $text = preg_replace("/%title%/", $title, $text);

    $text_center = search($_GET["qwerty"]);
    $text = preg_replace("/%center%/", $text_center, $text);


    echo $text;
?>

Отредактированно vladimirov (16.12.2007 09:08:35)

Неактивен

 

#4 16.12.2007 09:23:14

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: как сделать вывод по первой букве

rgbeast написал:

Если Ваша таблица так и называется table, то надо заключить ее имя в обратные кавычки "SELECT pole FROM `table` ...."

кавычки убрал. так как посчитал лишним. так как другие функции без кавычек замечательно работают.

Неактивен

 

#5 16.12.2007 11:43:26

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: как сделать вывод по первой букве

переписал функцию

function search($qwerty){
    $query = "SELECT itemId, itemName, itemDesc, itemPrice FROM items WHERE itemName LIKE '$qwerty'";
    $result = mysql_query($query);
    $text = 'Результат поиска:<HR>';
    while ($row=mysql_fetch_array($result)){
    $text .= $row["itemName"].' - '.$row["itemDesc"].' - '.$row["itemPrice"];
    $text .= '<BR>';
    }
    return $text;
}

если в ссылка дописывать % типа http://192.168.0.2/?action=search&qwerty=ц%
выводит список начинающийся с буквы "ц"
если полностью имя задавать типа "цитрамон"
выводит наименование

попытки записать % в селект типа $query = "SELECT itemId, itemName, itemDesc, itemPrice FROM items WHERE itemName LIKE '$qwerty'%";
не получаются
выводится ошибка Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
в чем может быть проблема?

Отредактированно vladimirov (16.12.2007 11:45:27)

Неактивен

 

#6 16.12.2007 13:24:40

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: как сделать вывод по первой букве

попытки записать % в селект типа $query = "SELECT itemId, itemName, itemDesc, itemPrice FROM items WHERE itemName LIKE '$qwerty'%";

Нужно писать процент внутри кавычек: не '$qwerty'%, а '$qwerty%'.

Кстати. Полезная есть функция mysql_error(), помогает разобраться в причинах ошибки. Например:
$result = mysql_query($query) or die(mysql_error());

Неактивен

 

#7 16.12.2007 13:28:05

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: как сделать вывод по первой букве

Вы все-таки не забывайте про обработку ошибок, хотя бы минимальную:
    $result = mysql_query($query) or die(mysql_error());

Запрос же измените, чтобы он соответствовал требованиям PHP (в том, что Вы указали процент считался интерпретатором частью имени переменной). И не забывайте про SQL-инъекции (сама переменная $querty дается вам извне и может содержать кавычки или что-то еще).
    $query = "SELECT itemId, itemName, itemDesc, itemPrice FROM items WHERE itemName LIKE '" . addslashes($qwerty) . "%'";

Неактивен

 

#8 16.12.2007 13:40:29

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: как сделать вывод по первой букве

Нужно писать процент внутри кавычек: не '$qwerty'%, а '$qwerty%'.

Виноват. Надо, конечно, процент экранировать, а то он с именем переменной сливается: '$qwery\%'

Неактивен

 

#9 16.12.2007 13:42:44

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: как сделать вывод по первой букве

уау. выдало наконец таки. спасибо.
вот результат: http://80.73.90.3

адслеш в селект добавил)

кстати, я всегда сначала делаю вывод, потом защиту, паролирование и все прочье...
правильная последовательность?

Неактивен

 

#10 16.12.2007 13:56:34

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: как сделать вывод по первой букве

защищайте сначала с помощью .htpasswd

Неактивен

 

#11 16.12.2007 14:02:22

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: как сделать вывод по первой букве

ок. спасибо.

Неактивен

 

#12 16.12.2007 14:08:22

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: как сделать вывод по первой букве

Можно (и даже, наверное, более правильно) вместо addslashes() использовать mysql_escape_string().

Неактивен

 

#13 16.12.2007 14:29:57

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: как сделать вывод по первой букве

селект приобрел, кажется, свой окончательный вариант:
    $query = "SELECT itemId, itemName, itemDesc, itemPrice FROM items WHERE itemName LIKE '".mysql_escape_string($qwerty)."%'";
что скажете?

и еще такой вопрос: а вот если с помощью формы отправлять уже не первую букву а часть слова или что еще интереснее - серединку слова - то как у меня будет выглядеть селект в этом случае?

Отредактированно vladimirov (16.12.2007 14:33:18)

Неактивен

 

#14 16.12.2007 15:20:40

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: как сделать вывод по первой букве

если с помощью формы отправлять уже не первую букву а часть слова или что еще интереснее - серединку слова - то как у меня будет выглядеть селект в этом случае?

процент с двух сторон:
"SELECT ... LIKE '%".mysql_escape_string($qwerty)."%'"

Неактивен

 

#15 16.12.2007 15:44:34

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: как сделать вывод по первой букве

ок

Неактивен

 

#16 16.12.2007 16:08:05

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: как сделать вывод по первой букве

Display MySQL query results in HTML tables
http://www.phpclasses.org:80/browse/package/4284.html

класс вышел сегодня. попробовал. очень удобная вещ.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson