Эта тема на forum.dklab.ru


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

Главная страница, там ссылки на статьи. Контент хранится в базе в двух таблицах. При нажатии на ссылку например "О компании" (www.mysite.ru/about) некой переменной (назовем её $q) присваивается параметр "about", это слово ищется в первой таблице, в которой с ячейкой, где находится значение "about" связано число. Это число соответствует ячейки id во второй таблице. Из этой же таблицы по строке с индексом id берется заголовок и текст статьи.

Вопрос в том, как происходит, что при нажатии на ссылку "О компании", переменной $q присваивается параметр "about"?
А проблема в том, что при попадании или переходе на главную страницу сайта не происходит выборка из таблицы и соответственно главная страница остается пустой.
rdsden:
файл index.php

<?
include ('config.php'); // Файл параметров
include ('functions.php'); // Файл функций

if(isset($q))
{
$rest = substr($q, -1);
if ($rest =="/")
$q = substr($q, 0, -1);
session_start();
if (!isset($_SESSION['authorized']))
$_SESSION['authorized'] = 0;
};
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<script language="javascript" type="text/javascript" src="jscripts/tiny_mce/tiny_mce.js"></script>
<script language="javascript" type="text/javascript">
tinyMCE.init({
mode : "textareas",
language: "ru",
theme : "advanced",
plugins : "style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
theme_advanced_buttons1_add_before : "save,newdocument,separator",
theme_advanced_buttons1_add : "fontselect,fontsizeselect",
theme_advanced_buttons2_add : "separator,insertdate,inserttime,preview,separator,forecolor,backcolor",
theme_advanced_buttons2_add_before: "cut,copy,paste,pastetext,pasteword,separator,search,replace,separator",
theme_advanced_buttons3_add_before : "tablecontrols,separator",
theme_advanced_buttons3_add : "emotions,iespell,media,advhr,separator,print,separator,ltr,rtl,separator,fullscreen",
theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,|,code",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_path_location : "bottom",
content_css : "example_full.css",
plugin_insertdate_dateFormat : "%d.%m.%Y",
plugin_insertdate_timeFormat : "%H:%M:%S",
extended_valid_elements : "hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
external_link_list_url : "example_link_list.js",
external_image_list_url : "example_image_list.js",
flash_external_list_url : "example_flash_list.js",
media_external_list_url : "example_media_list.js",
template_external_list_url : "example_template_list.js",
file_browser_callback : "fileBrowserCallBack",
theme_advanced_resize_horizontal : false,
theme_advanced_resizing : true,
/* nonbreaking_force_tab : true, */
apply_source_formatting : true
});
</script>

</head>

<body>

<table cellspacing="0" cellpadding="0" align="center" border="0" height="100%" width="100%">
<tr><td valign="top" height="210">
<?
require_once("top.php");
?>
</td>
</tr>
<tr>
<td valign="top">
<div class="main">
<div id="content">
<?
if(isset($q))
{
// echo "q=".$q."<br />\n";
if ($q=="admin" || $q=="manage")
require_once("adm/index.html");
else
if (substr($q, 0, 5) =="login")
require_once("adm/admin.php");
else
if (substr($q, 0, 12) =="preparations")
require_once("catalogue.php");
else
{
if ($q =="map")
{
echo "<h1>Карта сайта</h1>";
OutPutMap();
}
else
OutPut($q);
}
}
else
{
OutPut("main");
};
?>
</div>
<div class="up_go">&nbsp;<br />
&nbsp;</div>
<div id="main_menu">
<?
if(isset($q))
{
OutPutMenu($q);
}
else
OutPutMenu("main");
?>
<p align="center"> <img src="http://neopant.ru/design/banner205x100.gif" alt="Реклама на сайте" align="center">
</p>
</div>
</div>
</td>
</tr>
<tr>
<td valign="bottom" background="http://neopant.ru/design/foot_bg.jpg" height="266">
<p id="address">
Copyright&nbsp;&copy;&nbsp;2007&nbsp;<a href="http://neopant.ru/contacts/">neopant.ru</a><br />
Все права защищены.
</p>
</td>
</tr>
</table>

</body>

</html>

require_once("top.php"); - файл с меню сайта

<table id="1" cellspacing="0" cellpadding="0" border="0" width="100%" bordercolor="red" cols="2">
<tr>
<td width="736" height="434" valign="top">
<table cellspacing=0 cellpadding="0" border="0" width="100%" bordercolor="green" align="right">
<tr>
<td height="40" style="min-width:11px; ">&nbsp;</td>
<td width="729" height="40" bgcolor="00adef" class="top"><a href="map" class="menu">Карта&nbsp;сайта</a>
<?
if ($_SESSION['authorized']==1)
{
echo "&nbsp;|&nbsp;<a href=\"login\" class=\"menu\">Управление</a>";
echo "&nbsp;|&nbsp;<a href=\"login?exit=1\" class=\"menu\">Выход</a>";
}
?></td>
</tr>
<tr>
<td width="11" height="321">&nbsp;</td>
<td class="logo" width="729" height="321" align="right" valign="bottom"><a href=""><div class="hill">&nbsp;</div></a></td>
</tr>
<tr>
<td height="76" width="11">&nbsp;</td>
<td height="76" width="100%" align="right">

<table cellspacing="0" cellpadding="0" width="100%" bordercolor="red" border="0" align="right">
<tr><td width="249">&nbsp;</td>
<td align="right">

<table width="475" cellspacing="0" cellpadding="0" bordercolor="black" border="0" bgcolor="#00adef" align="right" class="menu_down">
<tr>
<td width="30%" height="76" align="center" class="menu_left"><a href="science" class="down_menu">Научная деятельность</a></td>
<td width="30%" align="center"><a href="news" class="down_menu">Новости</a></td>
<td width="30%" align="center" class="menu_right"><a href="articlies" class="down_menu">Статьи</a></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<td valign="top">
<table id="3" cellspacing=0 cellpadding="0" border="0" width="100%" bordercolor="red">
<tr>
<td height="40" bgcolor="00adef" class="top">&nbsp;</td>
<td width="109" height="40" class="topright">&nbsp;</td>
</tr>
<tr>
<td align="right" valign="top" class="menu">
<a href="http://neopant.ru" class="menu">Главная</a><br />
<table width="100%" cellpadding="0" cellspacing="0" class="pl"><tr><td height="1" width="100%" style="background-color: #79d5f6;"></td></tr><tr><td height="1" width="100%" style="background-color: #17a7de;"></td></tr></table>
<a href="about" class="menu">О компании</a><br />
<table width="100%" cellpadding="0" cellspacing="0" class="pl"><tr><td height="1" width="100%" style="background-color: #79d5f6;"></td></tr><tr><td height="1" width="100%" style="background-color: #17a7de;"></td></tr></table>
<a href="medcenter" class="menu">Мед. Центр</a><br />

<table width="100%" cellpadding="0" cellspacing="0" class="pl"><tr><td height="1" width="100%" style="background-color: #79d5f6;"></td></tr><tr><td height="1" width="100%" style="background-color: #17a7de;"></td></tr></table>
<a href="preparations" class="menu">Продукция</a><br />

<table width="100%" cellpadding="0" cellspacing="0" class="pl"><tr><td height="1" width="100%" style="background-color: #79d5f6;"></td></tr><tr><td height="1" width="100%" style="background-color: #17a7de;"></td></tr></table>
<a href="partners" class="menu">Партнёры</a><br />
<table width="100%" cellpadding="0" cellspacing="0" class="pl"><tr><td height="1" width="100%" style="background-color: #79d5f6;"></td></tr><tr><td height="1" width="100%" style="background-color: #17a7de;"></td></tr></table>
<a href="prospect" class="menu">Перспективы</a><br />
<table width="100%" cellpadding="0" cellspacing="0" class="pl"><tr><td height="1" width="100%" style="background-color: #79d5f6;"></td></tr><tr><td height="1" width="100%" style="background-color: #17a7de;"></td></tr></table>
<a href="contacts" class="menu">Контакты</a><br />
<table width="100%" cellpadding="0" cellspacing="0" class="pl"><tr><td height="1" width="100%" style="background-color: #79d5f6;"></td></tr><tr><td height="1" width="100%" style="background-color: #17a7de;"></td></tr></table>
</td>
<td width="109" height="227" class="right">&nbsp;</td>
</tr>
<tr>
<td colspan="2" height="170" valign="top">
<table cellspacing=0 cellpadding="0" border="0" width="100%" bordercolor="black">
<tr>
<td class="preparats_left" width="32" height="170">&nbsp;</td>
<td class="preparats"><a class="menu">НОВИНКИ</a>
<? news(); ?>
</td>
</tr>
</table>
</td>
</tr>
</table>

<!--
</tr>
<tr>
<td width="11" height="76">&nbsp;</td>
<td width="249" height="76">&nbsp;</td>
<td height="76">&nbsp;</td>
</tr>
-->
</table>


include ('functions.php'); // Файл функций

<?

function OnToOne( &$checkbox )
{
if($checkbox=='on')
$checkbox = '1';
else
$checkbox = '0';

};

function TakeFile($userfile, $userfile_name)
{

global $small_width, $small_height, $path_pics;

if ($userfile)
{
$src = $path_pics.$userfile_name;
// chmod($userfile, 0777);
// echo "userfile_name:".$path_pics.$userfile_name."!";
if($rename = copy($userfile, $path_pics.$userfile_name))
{
// Изменение режима файла
// chmod($path_pics.$userfile_name, 0644);

// Чтение исходной картинки
$src = imagecreatefromjpeg($src);

// Создание уменьшенной картинки
$dst = imagecreatetruecolor($small_width, $small_height);

// Копирование картинки из оригинальной в уменьшенную (imagecopyresampled - качественнее, imagecopyresized - быстрее)
imagecopyresampled($dst, $src, 0, 0, 0, 0, ImageSX($dst), ImageSY($dst), ImageSX($src), ImageSY($src));

// Запись уменьшенной картинки в файл ($q - качество, от худшего 0 до лучшего 100)
$q = 100;
imagejpeg($dst,$path_pics."small/$userfile_name",$q);
return 1;
}
else return 0;
};
};

function OutPut($q)
{
global $hostname, $username, $db_password, $db_name ;
if ($conn = mysql_connect($hostname,$username,$db_password))
{
mysql_select_db($db_name,$conn);
$query ="SELECT * FROM `content` INNER JOIN `url_alias` ON `url_alias`.`src` = `content`.`id` WHERE dst=\"".$q."\" ";
$res = mysql_query($query,$conn);
if(!$res) {echo "Ошибка подключения к базе данных!(f_OP)".mysql_error($conn); exit;}
}
else
{
echo "Ошибка подключения к базе данных!(f_OP)".mysql_error($conn);
exit;
}
while ($row = mysql_fetch_array($res))
{
$id = $row["id"];
$col[0] = $row["src"];
$col[1] = $row["dst"];
$col[2] = $row["text"];
$col[3] = $row["title"];
echo "<h1>".$col[3]."</h1>";
echo $col[2];
};
};

function OutPutMenu($q)
{
global $hostname, $username, $db_password, $db_name;
// echo "q=".$q."<br>\n";
if (substr($q, 0, 5) =="admin")
{
echo "<p>Для изменения информации на&nbsp;сайте необходимо ввести логин и&nbsp;пароль администратора сайта.</p>\n";
};
if (substr($q, 0, 5) =="login")
{
echo "<a href=\"login\">Управление разделами</a><br>\n";
echo "<img src=\"http://neopant.ru/design/menu_line.gif\" align=\"right\"><br>\n";
echo "<a href=\"login?images=1\">Управление изображениями</a><br>\n";
echo "<img src=\"http://neopant.ru/design/menu_line.gif\" align=\"right\"><br>\n";
echo "<a href=\"login?catalogue=1\">Управление каталогом</a><br>\n";
echo "<img src=\"http://neopant.ru/design/menu_line.gif\" align=\"right\"><br>\n";

};
$conn = mysql_connect($hostname,$username,$db_password);
mysql_select_db($db_name,$conn);
$query ="SELECT c.title, u.dst
FROM `content` c, `content` c_parent, `url_alias` ua, `url_alias` u
WHERE ua.src = c_parent.id
AND c_parent.id = c.pid
/* AND c_parent.pid =0 */
AND u.src = c.id
AND ua.dst = \"".$q."\"
UNION SELECT c_sibiling.title, u.dst
FROM `content` c, `content` c_sibiling, `url_alias` ua, `url_alias` u
WHERE ua.src = c.id
AND c.pid = c_sibiling.pid
AND u.src = c_sibiling.id
AND c.pid != 0
AND ua.dst = \"$q\"";
$res = mysql_query($query,$conn);
if(!$res) {echo "Ошибка подключения к базе данных!(f_OPM)".mysql_error($conn); exit;}
while ($row = mysql_fetch_array($res))
{
$id = $row["id"];
$col[0] = $row["src"];
$col[1] = $row["dst"];
$col[2] = $row["text"];
$col[3] = $row["title"];
echo "<a href='".$col[1]."'>".$col[3]."</a><br>\n";
echo "<img src=\"http://neopant.ru/design/menu_line.gif\" align=\"right\"><br>\n";
};
};

function OutPutMap($pid = 0)
{
global $hostname, $username, $db_password, $db_name;
$conn = mysql_connect($hostname,$username,$db_password);
mysql_select_db($db_name,$conn);
$query ="SELECT c. * , u.dst
FROM `content` c
INNER JOIN `url_alias` u ON c.id = u.src
WHERE c.pid =".$pid;
// echo "query=".$query;
$res = mysql_query($query,$conn);
/* echo "<p align=\"left\">\n";*/
echo "<ul>\n";
while ($row = mysql_fetch_array($res))
{
$id = $row["id"];
$col[0] = $row["src"];
$col[1] = $row["dst"];
$col[2] = $row["text"];
$col[3] = $row["title"];
echo "<li><a href='".$col[1]."'>".$col[3]."</a>";
$query2 ="SELECT c. * , u.dst
FROM `content` c
INNER JOIN `url_alias` u ON c.id = u.src
WHERE c.pid =".$id;
$res2 = mysql_query($query2,$conn);
if ($row2 = mysql_fetch_array($res2))
{
// $id2 = $row2["id"];
OutPutMap($id);
};
echo "</li>\n";
};
echo "</ul></p>";
};

function OutPutMapSelect($pid = -1, $add = "")
{
global $hostname, $username, $db_password, $db_name;
$conn = mysql_connect($hostname,$username,$db_password);
mysql_select_db($db_name,$conn);
$query ="SELECT c. * , u.dst
FROM `content` c
INNER JOIN `url_alias` u ON c.id = u.src
WHERE c.pid =".$pid;
// echo "query=".$query;
$res = mysql_query($query,$conn);
while ($row = mysql_fetch_array($res))
{
$id = $row["id"];
$col[0] = $row["src"];
$col[1] = $row["dst"];
// $col[2] = $row["text"];
$col[3] = $row["title"];
echo "<option value='".$id."'>".$add." ".$col[3]."</option>\n";
$query2 ="SELECT c. * , u.dst
FROM `content` c
INNER JOIN `url_alias` u ON c.id = u.src
WHERE c.pid =".$id;
$res2 = mysql_query($query2,$conn);
if ($row2 = mysql_fetch_array($res2))
{
// $id2 = $row2["id"];
// $add.="-";
OutPutMapSelect($id,$add."--");
};
};
};
?>
topy:
что-то как-то все сложно, ИМХО можно сделать проще, если конечно я правильно Вас понял.
передавайте GET-ом переменную по которой делайте выборку из таблицы (about например), а mod_rewrite`ом ее превращайте в /about .
rdsden:
да, согласен, но все же хотелось бы разобраться в существующем скрипте.
7.3.:
Непонятно как изначально определяется переменная
$q
Вы еще не привели содержимое файла config.php, может там.
bæv:
Может просто файл .htaccess потерялся? (В котором идёт преобразование адресов mod_rewrite'ом.)
rdsden:
Всё, понял в файле .htaccess и определяется переменная $q

#
<IfModule mod_rewrite.c>
RewriteEngine on

# Заменяем из URL Адрес/что_угодно на index.php?q=что_угодно
# Проверяем не реальный ли это файл, если путь к реальному файлу, то замену не производим
RewriteCond %{REQUEST_FILENAME} !-f
# Проверяем не реальный ли это каталог, если путь к реальному каталогу, то замену не производим
RewriteCond %{REQUEST_FILENAME} !-d
# Флаг L говорит, что это последнее правило для обработки, флаг QSA указывает на добавление а не замену, строки запроса из URL к существующей
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

</IfModule>



тогда вопрос остается, почему не происходит выборка из таблици при попадании на главную страницу сайта

to 7.3.
в файле config.php содержатся переменные для подключение к базе (пользователь, пароль и тд)
bæv:
тогда вопрос остается, почему не происходит выборка из таблици при попадании на главную страницу сайта
— http://phpfaq.ru/globals
http://ru2.php.net/manual/ru/security.globals.php

Чтобы в будущем подобные проблемы решать самостоятельно:
http://phpfaq.ru/debug

Эта тема на forum.dklab.ru