Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Поиск по базе с parent_url (вложенными страницами), не могу вывести корректный УРЛ (http://www.flasher.ru/forum/showthread.php?t=88523)

Americanets 24.11.2006 22:55

Поиск по базе с parent_url (вложенными страницами), не могу вывести корректный УРЛ
 
не знаю как при поиске вывести корректный URL

ищу так

PHP код:

$query="SELECT * from pages where content LIKE '%$poisk%'";
$query = mysql_query($query) or die (mysql_error());



WHILE (
$dat=mysql_fetch_array($query))
     {
    print 
"<li>".$dat[content]."URL".$dat[name_url];} 

база

Код:

CREATE TABLE `pages` (`id` int(11) NOT NULL auto_increment, `name_url` varchar(255) NOT NULL default '', `content` text,`parent` int(11) NOT NULL default '0',  PRIMARY KEY  (`id`));
INSERT INTO `pages` VALUES (1, 'home','просто страница', 0);
INSERT INTO `pages` VALUES (2, 'pod','просто подстраница', 1);
INSERT INTO `pages` VALUES (3, 'podstr3','просто подстраница3', 2);
INSERT INTO `pages` VALUES (5, 'satranica', 'просто подстраница 2', 0);
INSERT INTO `pages` VALUES (6, 'podstresho', 'просто подстраница 2osds', 5);
INSERT INTO `pages` VALUES (7, 'podstresho', 'просто подстраница isho i ischo', 6);


Skubent 27.11.2006 12:27

А чего добиться-то хочешь ?

rtm 27.11.2006 13:39

А добиться автор по всей видимости хочет построения URL, то есть при поиске строки "isho i ischo" он хочет от скрипта получить URL "http://example.com/satranica/podstresho/podstresho/".

Если мои телепатические способности не подвели меня, то необходимо что-то типа этого:
PHP код:

function BuildFullPath($curId,$url="/") {
    while (
true) {
        
$query="SELECT `id`,`name_url`,`parent` from pages where `id`=$curId"; 
        
$query = mysql_query($query) or die (mysql_error());
        
$pr = mysql_fetch_row($query);
        
$url = $pr['name_url']."/".$url;
        if (
$res[2]==0) {
            break;
        }
    }
    return 
$url;
}
query="SELECT * from pages where content LIKE '%$poisk%'"; 
$query = mysql_query($query) or die (mysql_error());
WHILE (
$dat=mysql_fetch_array($query))  { 
    print 
"<li>".$dat['content']."URL: ".BuildFullPath($dat['id'],'http://example.com')."<br>\n";
} 

P.S. работоспособность приведенного кода я не гарантирую так как проверять мне его не начем, но думаю суть ясна.

Americanets 27.11.2006 19:58

Цитата:

Сообщение от rtm
А добиться автор по всей видимости хочет построения URL, то есть при поиске строки "isho i ischo" он хочет от скрипта получить URL "http://example.com/satranica/podstresho/podstresho/".

Если мои телепатические способности не подвели меня, то необходимо что-то типа этого:
PHP код:

function BuildFullPath($curId,$url="/") {
    while (
true) {
        
$query="SELECT `id`,`name_url`,`parent` from pages where `id`=$curId"; 
        
$query = mysql_query($query) or die (mysql_error());
        
$pr = mysql_fetch_row($query);
        
$url = $pr['name_url']."/".$url;
        if (
$res[2]==0) {
            break;
        }
    }
    return 
$url;
}
query="SELECT * from pages where content LIKE '%$poisk%'"; 
$query = mysql_query($query) or die (mysql_error());
WHILE (
$dat=mysql_fetch_array($query))  { 
    print 
"<li>".$dat['content']."URL: ".BuildFullPath($dat['id'],'http://example.com')."<br>\n";
} 

P.S. работоспособность приведенного кода я не гарантирую так как проверять мне его не начем, но думаю суть ясна.

да все верно буду пробовать

Americanets 28.11.2006 00:26

что-то не работает :(

Americanets 28.11.2006 00:36

совсем, выдает /http://example.com

etc 28.11.2006 00:58

Замени $url = $pr['name_url']."/".$url; на $url = $url.'/'.$pr['name_url'];

rtm 28.11.2006 16:37

Цитата:

Сообщение от __etc
Замени $url = $pr['name_url']."/".$url; на $url = $url.'/'.$pr['name_url'];

В корне не верное предложение, так как в этом случае получится обратный порядок вложенности страниц.
Нужно переписать функцию так:
PHP код:

function BuildFullPath($curId,$base_path="/") { 
    
$url = "";
    while (
true) { 
        
$query="SELECT `id`,`name_url`,`parent` from pages where `id`=$curId"; 
        
$query = mysql_query($query) or die (mysql_error()); 
        
$pr = mysql_fetch_row($query); 
        
$url = $pr['name_url']."/".$url; 
        if (
$res[2]==0) { 
            break; 
        } 
    } 
    return 
$base_path.$url; 
} 


etc 28.11.2006 16:40

Ещё бы неверное, я не разбирался особо в коде :)

rtm 28.11.2006 16:44

Параметр $base_path являет собой начальные путь, относительно которого будет строится окончательный путь. Пара примеров:
PHP код:

echo BuildFullPath('isho i ischo','http://example.com/'); 

даст, по приведенной Вами бд, путь: "http://example.com/satranica/podstresho/podstresho/"
PHP код:

echo BuildFullPath('isho i ischo','http://example.com/subfld/'); 

даст: "http://example.com/subfls/satranica/podstresho/podstresho/"
PHP код:

echo BuildFullPath('isho i ischo'); 

даст: "/satranica/podstresho/podstresho/"

Americanets 02.12.2006 23:03

OK, буду пробовать, думаю когда-нибудь добьюсь результата :)

Americanets 03.12.2006 12:11

вот весь мой код
PHP код:

 <?
$poisk
=$_GET['q'];
$poisk=trim($poisk);

function 
BuildFullPath($curId,$base_path="/") { 
    
$url = ""; 
    while (
true) { 
        
$query="SELECT `id`,`name_url`,`parent` from pages where `id`=$curId"; 
        
$query = mysql_query($query) or die (mysql_error()); 
        
$pr = mysql_fetch_row($query); 
        
$url = $pr['name_url']."/".$url; 
        if (
$res[2]==0) { 
            break; 
        } 
    } 
    return 
$base_path.$url; 
}  
$query="SELECT * from pages where content LIKE '%$poisk%'"; 
$query = mysql_query($query) or die (mysql_error()); 


WHILE (
$dat=mysql_fetch_array($query))  { 
    print 
"<li>".$dat['content']."URL: ".BuildFullPath($dat['id'],'http://example.com')."<br>\n"; 
} 
?>

но не работает почему-то выводит:

стартовая страница URL: http://example.com/

просто подстраницаURL: http://example.com/

просто подстраница3rrrrrrrrrrrrrrrrrrrrrrrrrrrURL: http://example.com/

просто подстраница ishoerrrrrrrrrURL: http://example.com/

просто страница 2URL: http://example.com/

rtm 04.12.2006 14:30

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

rtm 04.12.2006 14:57

Сори, я забыл что дамп есть в первом посте.
Итак рабочий скрипт (по крайней мере у меня он работает):
PHP код:

$c = mysql_connect($mySQL['host'],$mySQL['user'],$mySQL['pass']) or die('Conn Error');
mysql_select_db($mySQL['base']) or die('Sel Errorr');

$poisk=trim($_GET['q']);

function 
BuildFullPath($curId,$base_path="/") {
    
$url = "";
    while (
true) {
        
$query="SELECT `id`,`name_url`,`parent` from `fpages` where `id`=$curId";
        
$query = mysql_query($query) or die (mysql_error());
        
$pr = mysql_fetch_row($query);
        
$url = $pr[1]."/".$url;
        if (
$pr[2]==0) {
            break;
        }
        
$curId = $pr[2];
    }
    return 
$base_path.$url;
}
$query="SELECT * from `fpages` where `content` LIKE '%$poisk%'";
$query = mysql_query($query) or die (mysql_error());

WHILE (
$dat=mysql_fetch_array($query))  {
    print 
"<li>".$dat['id']." ".$dat['content']."URL: ".BuildFullPath($dat['id'],'http://example.com/')."<br>\n";
} 


Americanets 09.12.2006 23:09

сделал еще кое какое изменение но выводится не совсем как хотелось бы, те страница/подстраница/... заголовка правильно, а вот УРЛ не соответствует, выводится наоборот,


function BuildFullPath($curId,$base_path="/") {
$url = "";
while (true) {
$query="SELECT `id`,`menu_neme`,`parent`,`name_url` from `cms_pages` where `id`=$curId";
$query = mysql_query($query) or die (mysql_error());
$pr = mysql_fetch_row($query);
$pg=$pr[3]."/".$pg;
$url = "<a href=".$pg.">".$pr[1]."</a>/".$url;
if ($pr[2]==0) {
break;
}
$curId = $pr[2];
}
return $base_path.$indent.$url;
}

rtm 12.12.2006 15:16

Господи, да что же Вы ходите получить!?
Приведите пример html-кода.

Americanets 13.12.2006 18:36

<a href='/'>главная</a><a href='/podstranica/'>подстраница</a><a href='/podstranica/podstranicaesho/'>еще подстраница</a>

но помоему проблему уже решили в дрегом посте


Часовой пояс GMT +4, время: 06:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.