Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅当单击类别链接时获取类别id_Php - Fatal编程技术网

Php 仅当单击类别链接时获取类别id

Php 仅当单击类别链接时获取类别id,php,Php,我需要一些关于这个php文件的帮助 我将首先解释我需要做什么: 我有主要的产品类别。当你点击一个类别时,你会被带到一个包含所点击类别的子类别的页面,这部分工作正常。我现在需要它,这样当您单击一个子类别时,该子类别的所有产品都会加载到同一页面上的一个div中(使用带有刷新的php…) 我将发布我的代码并对其进行注释,以解释问题 <?php include 'connect.php'; $cat_id = intval($_GET['category']); //GETS THE CA

我需要一些关于这个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
?>

在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");
    }

在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");
    }

因为在第二次单击时,您正在重新加载新值,而类别不在新集合中

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

因为在第二次单击时,您正在重新加载新值,而类别不在新集合中

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

您需要类别ID来显示子类别列表,因此不能完全跳过类别ID。我认为有两种方法可以解决这个问题:

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


    <>我仍然会考虑更改代码,因为在没有提交的类别ID的情况下,您现在没有错误处理。

    您需要类别ID来显示子类别列表,所以完全跳过类别ID是不可能的。我认为有两种方法可以解决这个问题:

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


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

    如我在回答中提到的……这很可能是一个坏的解决方案,因为用户使用URL会迫使应用程序显示一个已损坏的页面(或者如果添加了更多的功能,甚至可能导致问题)。.在这种情况下,用户弄乱url会完全破坏一切。。。尝试为不存在的类别使用id也会产生“中断”结果否?(如果子类别id不唯一,会发生什么情况,因为取决于类别id?没有数据库描述,我只是在解决当前问题)正如我在回答中提到的…这很可能是一个糟糕的解决方案,因为弄乱URL的用户可能会迫使应用程序显示一个已损坏的页面(如果添加更多功能,甚至可能导致问题)。在这种情况下,弄乱URL的用户可能会完全损坏所有内容。。。尝试为不存在的类别使用id也会产生“中断”结果否?(如果子类别id不唯一,会发生什么情况,因为取决于类别id?没有数据库描述,我只是在解决当前问题)