мне нужна небольшая помощь по foreach

#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:

Я полагаю, это то, что он ищет:

  1. Создайте таблицу mysql с полями id, parent_id и name.
  2. Когда категория является «дочерней» по отношению к другой, это другое поле parent_id должно быть установлено соответствующим образом, я вижу, у вас уже есть что-то на этот счет.
  3. Используйте этот код, установив $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