Rambler's Top100
, : |

! : http://dreamweaver.net.ru/new-forum/

| FAQ | | |

Сваял поисковый скрипт, но не все устраивает

 
  ,         .     ,        .     Форум Macromedia Dreamweaver -> Динамические страницы
 
Maxim
Новичок

Новичок


: 46

: 14.03.2007
: 29

: 13, 2007 5:08 pm     : Сваял поисковый скрипт, но не все устраивает

Вот код самого скрипта:
[code:1:b3edb44ced]<?php
print("<table border='1' cellspacing='2' cellpadding='1' class='search'><caption align=top class='search'>Результат поиска:</caption><tr><td width='35%' class='search_top' align='center'><b>Наименование товара</b></td><td width='20%' class='search_top' align='center'><b>Страница в каталоге</b></td><td width='30%' class='search_top' align='center'><b>Группа товаров</b></td></tr>");


//connection to MySQL
$db_host = "localhost";
$db_user = "login";
$db_password = "password";
$db_name = "my_db";
$connection = mysql_connect ($db_host, $db_user, $db_password) or die ('error connection');
mysql_select_db($db_name, $connection);



//variables
@$id =$_GET['id'];
@$name =$_GET['name'];
@$page =$_GET['page'];
@$group_production =$_GET['group_production'];

//chekboxes
if (isset($id)) {
$srch='id';} //id - имя столбца в таблице
if (isset($name)) {
$srch='name';} //name - имя столбца в таблице
if (isset($page)) {
$srch='page';} //page - имя столбца в таблице
if (isset($group_production)) {
$srch='group_production';} //group_production - имя столбца в таблице


@$query = "SELECT * FROM production WHERE $srch like '%$name%' ";
$result = mysql_query($query) or die('Ошибка запроса');
while($t = @mysql_fetch_array($result)) {


print("
<tr>
<td width='35%' class='search'><font color='#CC0000'>$t[name]</font></td>
<td width='20%' class='search'><font color='#0000CC'>$t[page]</font></td>
<td width='30%' class='search'><font color='#CC0000'>$t[group_production]</font></td>
</tr>

");

}


print("</table>");


?>[/code:1:b3edb44ced]
Поиск в принципе работает неплохо, однако хотелось бы улучшить вот по каким параметрам:
1.Результат выводится в виде 3-х колонок:"наименование товара", "страница в каталоге", "группа товаров"; колонка "страница в каталоге" выводит адрес страницы по которому это наименование находится, однако при этом этот адрес не является ссылкой, чтобы можно было бы по ней переадресоваться к найденой позиции в каталоге. Как это можно сделать?
2.Большая посьба оценить код самого скрипта и если на взгляд сведующих в php людей найдутся недостатки просьба на них указать.
Кстати работу самого скрипта можно посмотреть на http://www.el-eko.ru/Price.php
И еще момент, вот структура моей БД:
Поле Тип Ноль По умолчанию
id int(7) Нет 0000000
name varchar(255) Да NULL
group_production varchar(255) Да NULL
page varchar(255) Да NULL
Индексы : Имя ключа Тип Количество элементов Поле
PRIMARY PRIMARY 1400 id
Денис
Модератор

Модератор


: 42

: 21.08.2004
: 1490
: Санкт-Петербург

: 13, 2007 8:31 pm     :

Если под $t[page] Вы подразумеваете имено ссылку типа http://www.... и так далее, то есть смысл сделать так:

[code:1:164a9a3e62]<td width='20%' class='search'><font color='#0000CC'><a href=\"$t[page]\" title=\"Перейти на страницу\">Ссылка</a></font></td> [/code:1:164a9a3e62]

Кстати, зачем было спрашивать, если сами все сделали?
Maxim
Новичок

Новичок


: 46

: 14.03.2007
: 29

: 14, 2007 11:13 am     :

Ты поздно прочитал, однако и в таком виде не все устраивает, На самом деле не нужен поиск по всем столбцам таблицы. Достаточно поиска только по наименованию(т.е. по "name"), однако после вывода результата хотя бы в виде 2-х столбцов "name" и "page"(в значении "перейти") нужно переходя по ссылке непросто попадать на нужную страницу, а так чтобы выделялась искомая позиция на этой странице, для этого как мне объяснили нужно было присвоить "id" каждой единице товара. Так вот я создал файл view.php:[code:1:65e289acc1]<?php
if(!is_numeric($_GET['id'])) die('Это не число');

$query=mysql_query("SELECT * FROM production WHERE id='".int($_GET['id']."'") or die(mysql_error());
if(mysql_num_rows($query)<1)die('Ничего не найдено');
//далее выводишь через mysql_result особенности товара
?>[/code:1:65e289acc1]
его задачей будет в зависимости от посланного в URL уникального индификатора товара(id) выдавать пользователю информацию о нем, а в файле search.php внес изменение
[code:1:65e289acc1]print("
<tr>
<td width='35%' class='search'><font color='#CC0000'>$t[name]</font></td>
<td width='20%' class='search'><font color='#0000CC'><a href=view.php?id=".$t['id'].">перейти</a></font></td>
<td width='30%' class='search'><font color='#CC0000'>$t[group_production]</font></td>
</tr>

");[/code:1:65e289acc1]
в результате при переходе по ссылке "перейти" открывается файл view.php с сообщением: Parse error: syntax error, unexpected ';' in /home/elekoru3/public_html/view.php on line 4.
Что не так?
Денис
Модератор

Модератор


: 42

: 21.08.2004
: 1490
: Санкт-Петербург

: 14, 2007 7:50 pm     :

Проверяйте синтаксис скрипта. У Вас неожиданная точка с запятой в четвертой строке view.php/ Учтите при этом, что ошибка может быть и не в этой строке.
Maxim
Новичок

Новичок


: 46

: 14.03.2007
: 29

: 15, 2007 12:40 pm     :

Решил отказаться от поиска товара по id заново восстановил код до прежнего состояния[code:1:580ab71ce5]<?php
print("<table border='1' cellspacing='2' cellpadding='1' class='search'><caption align=top class='search'>Результат поиска:</caption><tr><td width='35%' class='search_top' align='center'><b>Наименование товара</b></td><td width='20%' class='search_top' align='center'><b>Страница в каталоге</b></td><td width='30%' class='search_top' align='center'><b>Группа товаров</b></td></tr>");


//connection to MySQL
$db_host = "localhost";
$db_user = "login";
$db_password = "password";
$db_name = "my_db";
$connection = mysql_connect ($db_host, $db_user, $db_password) or die ('error connection');
mysql_select_db($db_name, $connection);



//variables
@$id =$_GET['id'];
@$name =$_GET['name'];
@$page =$_GET['page'];
@$group_production =$_GET['group_production'];

//chekboxes
if (isset($id)) {
$srch='id';} //id - имя столбца в таблице
if (isset($name)) {
$srch='name';} //name - имя столбца в таблице
if (isset($page)) {
$srch='page';} //page - имя столбца в таблице
if (isset($group_production)) {
$srch='group_production';} //group_production - имя столбца в таблице


@$query = "SELECT * FROM production WHERE $srch like '%$name%' ";
$result = mysql_query($query) or die('Ошибка запроса');
while($t = @mysql_fetch_array($result)) {


print("
<tr>
<td width='35%' class='search'><font color='#CC0000'>$t[name]</font></td>
<td width='20%' class='search'><font color='#0000CC'><a href=$t[page]>Найти на странице</a></font></td>
<td width='30%' class='search'><font color='#CC0000'>$t[group_production]</font></td>
</tr>

");
}


print("</table>");


?>[/code:1:580ab71ce5]
Ссылка "Найти на странице" ведет нас на ту страницу где находится выбранный товар, так вот нужно чтобы эта страница открывалась и показывала при помощи выделения каким-нибудь цветом тот самый выбранный товар. И еще, что и куда надо вставить в скрипт, если поиск завершился ничем т.е. товар не найден и выводилась бы фраза типа: "По вашему запросу ничего не найдено"
Денис
Модератор

Модератор


: 42

: 21.08.2004
: 1490
: Санкт-Петербург

: 15, 2007 7:58 pm     :

Передайте по ссылке ID товара. На странице вывода проверяйте совпадение ID из ссылки с ID из БД. При совпадении - меняйте стиль оформления названия товара.

Если ничего не найдено:

1. Сделайте две функции. Первая - вывод товара, к примеру print_tovar(). Вторая - вывод сообщения, если поиск не дал рез-тов, к примеру no_search()
2. Создайте условие:

[code:1:b13fb5ee6a]
if (mysql_num_rows($result)==0)
{
no_search();
}
else
{
print_tovar();
}
[/code:1:b13fb5ee6a]
Maxim
Новичок

Новичок


: 46

: 14.03.2007
: 29

: 18, 2007 4:01 pm     :

По первой части вопроса, так должна выглядеть строка передачи id по ссылке:[code:1:c09a6ee463]<td width='20%' class='search'><font color='#0000CC'><a href=$t(page($_GET['id']))>Найти на странице</a></font></td>[/code:1:c09a6ee463]???
По второй части вопроса: тот код который Ты мне написал должен что-то и где-то заменить в моем, но что и где??? Прошу прощения за некоторую мою тупость-плохо разбираюсь в PHP
Денис
Модератор

Модератор


: 42

: 21.08.2004
: 1490
: Санкт-Петербург

: 18, 2007 9:20 pm     :

Нет, не так. Если у тебя в массив $t записываются названия полей из запроса, то ID должен выглядеть так:

[code:1:c1d54aa713]href="\$t[page]\"?id=\"$t[id]\"[/code:1:c1d54aa713]

или как там у тебя называется этот столбец.

Второй вопрос: Вообще, это другая концепция твоего кода. Я же уже писал:

Денис ():
Первая - вывод товара, к примеру print_tovar()


В эту функцию мы помещаем функцию print()

Денис ():
если поиск не дал рез-тов, к примеру no_search()


В эту функцию мы помещаем сообщение о неудачном поиске. Стоять этот код должен после фразы


Maxim ():
$result = mysql_query($query) or die('Ошибка запроса');


Maxim ():
Прошу прощения за некоторую мою тупость-плохо разбираюсь в PHP


Не стоит извиняться. Главное стремиться к результату, а не ждать, пока кто-нибудь приведет тебя за ручку к нему.
Maxim
Новичок

Новичок


: 46

: 14.03.2007
: 29

: 19, 2007 12:09 pm     :

Денис, огромный тебе респект за помощь!!!
Денис
Модератор

Модератор


: 42

: 21.08.2004
: 1490
: Санкт-Петербург

: 19, 2007 7:28 pm     :

Если что - обращайся, чем смогу - помогу
:   
  ,         .     ,        .     Форум Macromedia Dreamweaver -> Динамические страницы : GMT + 2
1 1

 


Powered by phpBB © 2001, 2005 phpBB Group
phpBB


/ : 134918 / 0

Rambler's Top100 @Mail.ru