#php
#php
Вопрос:
Это мои cats в mysql
cats_id cats_position cats_parentid
1 1> 0
2 1>2> 1
3 3> 0
4 1>2>4> 2
и я пытаюсь создать навигацию, подобную:
индекс > автомобили > fiat > punto
От
cat=4amp;parent=2amp;position=1>2>4>
В итоге я получаю:
Индекс carcarcarcar
и моих знаний php недостаточно, чтобы закончить этот код. не могли бы вы мне помочь, пожалуйста.
<?php
$position = trim($_GET['position']);
$pieces = explode(">", $position);
$i=0;
foreach($pieces as $piece){
$result = mysql_query("SELECT * FROM cats
WHERE cats_id='".$pieces[$i]."'");
while($row = mysql_fetch_array($result))
{
$piecesid[$i] = $row['cats_id'];
$piecesname[$i] = $row['cats_name'];
$piecesposition[$i] = $row['cats_position'];
}
$i ;
}
?>
<a href="index.php">Index</a>
<?php $i=0; foreach($pieces as $piece){
if($i=0)
$parent=0;
else
$parent=$placesid[$i-1];
echo '<a href="cats.php?cat='.$piecesid[$i].'amp;parent='.$parent.'amp;position='.$piecesposition[$i].'">'.$piecesname[$i];
}
Комментарии:
1. Вам не хватает } в самом конце после вашего окончательного echo.
Ответ №1:
Ваша первая ошибка — это пропущенная точка с запятой здесь:
$i ;
Вторая ошибка — это пропущенная точка после $parent
в строке echo:
'amp;parent='.$parent.'amp;position='
Третья ошибка (неожиданное завершение) станет очевидной, когда вы начнете правильно делать отступы в своем коде. Также неуместно опускать фигурные скобки, потому что это затрудняет поиск именно таких ошибок.
И, наконец: при публикации в Stackoverflow включайте полное сообщение об ошибке (в котором всегда упоминается номер строки!)
Комментарии:
1. Спасибо за вашу помощь. я обновил вопрос. теперь я не получаю никакой ошибки, но я не получаю результат, который я хотел бы получить.
2. Вероятно, проблема с вашим запросом или содержимым базы данных. Чтобы уменьшить сложность и добавить немного безопасности, используйте:
$result = mysql_query("SELECT * FROM cats WHERE cats_id=".intval($piece));
.$i
Счетчик избыточен, поскольку вы уже используетеforeach
. Если у вас возникла ошибка, тоprint mysql_error();
следует сообщить вам об этом. И сделайтеprint_r($piecesid);
, чтобы посмотреть, было ли что-нибудь собрано.
Ответ №2:
Я полагаю, это то, что он ищет:
- Создайте таблицу mysql с полями id, parent_id и name.
- Когда категория является «дочерней» по отношению к другой, это другое поле parent_id должно быть установлено соответствующим образом, я вижу, у вас уже есть что-то на этот счет.
- Используйте этот код, установив $cat через $_GET[‘cat’] или что-то в этомроде.
<?php
$cat = mysql_real_escape_string($_GET['cat']); $res = mysql_query("выберите идентификатор, имя, parent_id из категорий, где id = '$ cat'"); $breadcrumb = array(); while ($category = mysql_fetch_object($res) { $breadcrumb[] = "<a href="?cat={$category->id}">" . $category->name . "</a>"; if ($category->parent_id != 0) { $res = mysql_query("выберите идентификатор, имя, parent_id из категорий, где id = '{$category->parent_id}'"); } } echo join(" > ", array_reverse($breadcrumb));
?>
Ответ №3:
Вы не закрыли свой foreach в последнем разделе php
<?php $i=0; foreach($pieces as $piece){
if($i=0)
$parent=0;
else
$parent=$placesid[$i-1];
echo '<a href="cats.php?cat='.$piecesid[$i].'amp;parent='.$parent'amp;position='.$piecesposition[$i].'>'.$piecesname[$i];
//Missing } here
?>
Ответ №4:
вам не хватает } в конце. Просто поставьте } после последней строки вот так:
echo '<a href="cats.php?cat='.$piecesid[$i].'amp;parent='.$parent'amp;position='.$piecesposition[$i].'>'.$piecesname[$i];
}
Ответ №5:
Кстати, вам не нужно cats_position в вашей таблице. Для обработки иерархических данных, подобных этому, вы можете использовать вложенный набор (http://en.wikipedia.org/wiki/Nested_set_model ) или просто полагайтесь на parent_id. Преимущество этого в том, что вам, например, не нужно несколько параметров в вашем запросе get. Вместо
cat=4amp;parent=2amp;position=1>2>4>
затем вы архивируете то же самое с:
cat=4