仅在单击类别链接时才获取类别ID

时间:2014-01-04 12:33:41

标签: php

我需要一些关于这个php文件的帮助。

我先解释一下我需要做什么:

我有主要的产品类别。当您单击某个类别时,您将被带到包含所单击类别的子类别的页面,此部分可以正常工作。我现在需要它,以便当你点击一个子类别时,该子类别的所有产品都被加载到同一页面上的div中(使用带有刷新的php ....)

我会发布我的代码并评论它解释问题。

<?php
  include 'connect.php';
  $cat_id = intval($_GET['category']); //GETS THE CAT_ID OF THE CLICKED CATEGORY LINK
  $sql = mysqli_query($link, "SELECT * FROM subcategories WHERE cat_id = $cat_id AND   
                      status = 1");
  $output = '';
  while($row = mysqli_fetch_array($sql)){
     $data = $row['image'];
     $file = substr($data, strpos($data, "/") + 1);
     $output .= "<div class='subcats'>";
     $output .= "<a href='cats.php?subcategory=" . $row['subcat_id'] . "'>
                 <img src='$file' />"; //WHEN I CLICK ON A SUBCAT, I GET AN ERROR OF  
'UNDEFINED' FOR CATEGORY. NO CATEGORY IS BEING CLICKED. HOW DO I GET IT TO LOOK FOR A 
CATEGORY ONLY IF ONE IS CLICKED?
     $output .= "<div class='maincatheadings'>{$row['subcategory']}</div>";
 $output .="</a>";
 $output .= "</div>";
  }

  echo $output
?>

3 个答案:

答案 0 :(得分:2)

因为在第二次点击时您正在使用新值重新加载,并且类别不在新集中。

$output .= "<a href='cats.php?subcategory=" . $row['subcat_id'] . "'>

是否会从cats.php?category = XXXX重定向到cats.php?subcategory = YYYY

这应该在你的例子中完成:

$output .= "<a href='cats.php?category=". $_GET['category'] ."&subcategory=" . $row['subcat_id'] . "'>

是否会从cats.php?category = XXXX重定向到cats.php?category = XXXX&amp; subcategory = YYYY

如果您需要:

,这应该处理“任何被选中”的情况
$cat_id = intval(isset($_GET['category']) ? $_GET['category'] : 0);

答案 1 :(得分:2)

您需要类别ID才能显示子类别列表,因此不能完全跳过类别ID。我看到两种解决这个问题的方法:

  1. 您在每个链接上提交category以及subcategory
  2. 如果未设置category,但subcategory存在,则通过搜索所选子类别的父级从数据库中检索类别。
  3. 选项2比1更稳固,因为这不能被操作到错误的参数集中。 (如果你不确定首先完成所有必要的检查,人们可以操纵URL并导致奇怪的事情发生。)

    我仍然会考虑更改代码,因为现在您没有错误处理,以防提交的类别ID不存在。

答案 2 :(得分:0)

在while循环之前使用简单的检查,结果计数为0比去查找产品而不是将其分配给结果:

$result = $mysqli->query($sql_quer);
    $num_rows = $result->num_rows;
    if($num_rows === 0)
    {
      $sql = mysqli->query("SELECT * FROM products WHERE cat_id = $cat_id AND   
                          status = 1");
    }