| Друзья! Я новичок и пытаюсь разобраться в хитростях php и mysql.
А как не разбираться как на готовых примерах. Вот и стал разбирать одну cms.
Там код такой:
<?php
$id = @ $_REQUEST['id'];
$sql = 'SELECT s.*, t.name type_name, COUNT(i.id) items_count FROM #sections s, #types t LEFT JOIN #items i ON (i.section_id = s.id) WHERE s.type_id = t.id AND s.id = ? GROUP BY s.id';
$res = mysql_dbquery($sql, $id);
if (!$section = mysql_fetch_assoc($res)) show_error('Section not found');
$sql = 'SELECT gid, parent_id FROM #sections WHERE id = ?';
$section_gid = $section['gid'];
$pid = $section['parent_id'];
while (!$section_gid && $pid) {
$res = mysql_dbquery($sql, $pid);
list($section_gid, $pid) = mysql_fetch_row($res);
}
if (!allowed($section_gid, $_SESSION['gid'])) show_error('Forbidden');
if (isset($_POST['id'])) {
if (empty($_POST['title'])) show_error('Section title required');
$title = $_POST['title'];
$type_id = (empty($_POST['type_id']) ? $section['type_id'] : $_POST['type_id']);
$template = $_POST['template'];
$sort = (int) $_POST['sort'];
if ($section['depth']) {
$sql = 'SELECT id, path, depth FROM #sections WHERE id = ?';
$res = mysql_dbquery($sql, $_POST['parent_id']);
if (!$parent = mysql_fetch_assoc($res)) show_error('Invalid section parent');
if (!preg_match('/^[a-z][a-z0-9_-]*$/', $_POST['alias'])) show_error('Invalid section alias');
$alias = $_POST['alias'];
$path = ($parent['depth'] ? $parent['path'].'/' : '').$alias;
$depth = $parent['depth'] + 1;
$sql = 'SELECT id FROM #sections WHERE path = "?" AND id != ?';
$res = mysql_dbquery($sql, $path, $id);
if (mysql_fetch_row($res)) show_error('Section /'.$path.' already exists');
$sql = 'UPDATE #sections SET parent_id=?, alias="?", path="?", depth=?, type_id=?, title="?", template="?", sort=? WHERE id = ?';
mysql_dbquery($sql, $parent['id'], $alias, $path, $depth, $type_id, $title, $template, $sort, $id);
if ($section['path'] != $path) {
$pos = strlen($section['path']) + 1;
$sql = 'UPDATE #sections SET path = CONCAT("?", SUBSTRING(path, ?)) WHERE path LIKE "?/%"';
mysql_dbquery($sql, $path, $pos, $section['path']);
}
} else {
$sql = 'UPDATE #sections SET type_id=?, title="?", template="?", sort=? WHERE id = ?';
mysql_dbquery($sql, $type_id, $title, $template, $sort, $id);
}
if ($_SESSION['gid'] == 1) {
$gid = (isset($_POST['inherit_gid']) ? 'NULL' : (array_sum($_POST['groups']) + 1));
$sql = 'UPDATE #sections SET gid = ? WHERE id = ?';
mysql_dbquery($sql, $gid, $id);
}
event('section-edit-post', array($id));
refresh();
}
$sql = 'SELECT id, path FROM #sections WHERE id != ? AND path NOT LIKE "?/%"';
$res = mysql_dbquery($sql, $id, $section['path']);
$parents = array();
while ($s = mysql_fetch_assoc($res)) {
$parents[$s['id']] = $s['path'];
}
$templates = array();
if ($tplfiles = glob('templates/*.tpl.php')) {
foreach ($tplfiles as $f) $templates[] = basename($f, '.tpl.php');
}
$sql = 'SELECT * FROM #groups WHERE id != 1';
$res = mysql_dbquery($sql, $id);
$groups = array();
while ($g = mysql_fetch_assoc($res)) {
$groups[$g['id']] = $g['name'];
}
?>
Так вотя вся фишка ф том, что на локальном хосте все работает безупречно, а на настоящем хосте (проверено на двух разных хостингах), код не исполняется, т.е. выделенный жирным шрифтом запрос не выполняется. Проверял это проставлением /* */ для того, чтобы выявить проблему. Код нужен весь этот для того, чтобы переопределить переменные для взаимодействия с формами, которые выводятся в браузер дальше после этого кода. Если весь этот код убрать, то дальше все отображается (формы в смысле). Помогите, пожалуйста, понять в чем дело и обясните мне чайнику запутанный синтаксис выборки из базы. Заранее спасибо! | |