如何扩展从 MySQL 导入的类别列表

Posted

技术标签:

【中文标题】如何扩展从 MySQL 导入的类别列表【英文标题】:how to expand a category list imported from MySQL 【发布时间】:2015-10-22 09:04:47 【问题描述】:

我从 phpMyAdmin 中的两个不同表中导入了一组不同的值,一个来自 Category 表(其中 cat_id 是 PK),另一个来自 Item 表;其中(cat_id 是 FK)。

<?php
require ('config.php');

$que = "SELECT * FROM category";
$run = mysql_query($que);
$j = 0;
while($row = mysql_fetch_array($run))

    $cat_idd[$j] = $row['cat_id'];
    $cat_namee[$j] = $row['cat_name'];
    $j++;

for($i = 0;  $i < count($cat_idd);  $i++)

    $que2 = "SELECT * FROM item WHERE cat_id = '$cat_idd[$i]' ";
    $result = mysql_query($que2);
    $run = mysql_num_rows($result);
    echo "<a href=''>".$cat_namee[$i]."(".$run.")</a><br>";

?>

这是我目前所拥有的:

现在我该如何扩展它?或者例如,如何在同一页面或下一页显示存储在名为 Clothing 的类别中的两个项目?由于此代码仅帮助我查看存储在数据库中的项目数,

这是我的表格:

    <form name = "view" method = "POST" action ="cart.php">
      <table align = 'center' width = '100%' border = '4'>
      <tr bgcolor = 'yellow'>
      <td colspan = '20' align = 'center'><h2> Viewing all the Products </td>
</tr>
      <tr align = 'center'>
      <th>Item ID</th>
      <th>Name</th>
      <th>Price</th>
      <th>Select</th>
      </tr>

      <tr  class = "odd">


      <?php
        require ('config.php');

        $que = "SELECT * FROM category";
        $run = mysql_query($que);
        $j = 0;
      while($row = mysql_fetch_array($run))
       
         $cat_idd[$j] = $row['cat_id'];
         $cat_namee[$j] = $row['cat_name'];
         $j++;
       

我想过使用数组函数将值存储在一个类别中,即Clothing(2) =&gt; 2

       function array_insert(&$array, $position, $insert)
       
         if (is_int($position)) 
          array_splice($array, $position, 0, $insert);
        else 
          $pos   = array_search($position, array_keys($array));
          $array = array_merge(
             array_slice($array, 0, $pos),
             $insert,
            array_slice($array, $pos)
        );
       
       

      $arr = array();
      $arr[] = 2;


      for($i = 0;  $i < count($cat_idd);  $i++)
      
       $que2 =  "SELECT * FROM item WHERE cat_id = '$cat_idd[$i]'";
       $result = mysql_query($que2);
       $run = mysql_num_rows($result);
       echo "<a href=''>".$cat_namee[$i]."(".$run.")</a><br>";
     array_insert($arr, 0, "$run");
     // echo $arr[0];
      
        $que2 = "SELECT * FROM item WHERE cat_id = '1'";      //instead of using '1' i wish to use the one user clicks on!
        $res2 = mysql_query($que2);
       while($row = mysql_fetch_array($res2))
        
          $i_id = $row['item_id'];
          $i_namee = $row['item_name'];
          $i_price = $row['item_price'];


       ?>
       <td><?php echo $i_id; ?></td>
       <td><?php echo $i_namee; ?></td>
       <td><?php echo $i_price; ?></td>
       <td><input type="checkbox" name="addcart" value="<?php echo $item; ?>" onClick="return KeepCount()" />Tick</td>
</tr>
       <?php   ?>    
       <br><br>
       </table>
       <input type = "hidden" name = "check">
       <button type=  "submit" onclick = "location.href = 'cart.php';" id = "cart" style="float:right; margin-top: 30px; margin-right: 10px;">Add to Cart</button>

上面的图片是我想要的结果,这个只适用于 Clothing(2)。我希望它随着用户点击其他东西而改变,例如,Shoes(1)。

【问题讨论】:

category 是包含您提供的数据的物理表吗?还是一种观点?您能否提供有关您的物品存储方式的更多信息? @HPierce 是的,category 是一个物理表,其中存储了数据。项目根据类别 ID(来自类别表)存储到项目表。就像我说的,我在 MySQL 中有两个物理表 我现在已经编辑了帖子,提供了更多信息。 【参考方案1】:

您已发出正确的查询以获取有关某个项目的所有数据信息。但是,您选择只计算受影响的行数,而不是获取每个字段的内容。通过使用mysql_fetch_array(),您实际上可以获取每个字段的内容,并可以显示结果。

根据您的代码考虑以下示例:

for($i = 0;  $i < count($cat_idd);  $i++)
    
        $que2 = "SELECT * FROM item WHERE cat_id = '$cat_idd[$i]' ";
        $result = mysql_query($que2);
        $run = mysql_num_rows($result);
        echo "<a href=''>".$cat_namee[$i]."(".$run.")</a><br>";
        while($row = mysql_fetch_array($result))
            //Change ['item_name'] and ['item_description'] to match your DB schema.
            echo "item name: $row['item_name']";
            echo "item description: $row['item_description']";
        
    

$row 是一个包含您要查找的所有数据的数组(既是关联的又是数字索引的)。在我的示例中,我假设items 表有一个名为item_nameitem_description 的字段。您的表可能有不同的列名,您需要更改它以匹配您的列名。

更多信息mysql_fetch_array():http://php.net/manual/en/function.mysql-fetch-array.php

最后,您应该知道 mysql 扩展从 PHP 5.5 开始已被弃用。您应该强烈考虑转移到mysqliPDO

更多信息mysqli: http://php.net/manual/en/book.mysqli.php

更多信息PDO: http://php.net/manual/en/book.pdo.php

【讨论】:

我收到以下错误:解析错误:语法错误,意外 '' (T_ENCAPSED_AND_WHITESPACE),在 C:\xampp\htdocs\ 中需要标识符 (T_STRING) 或变量 (T_VARIABLE) 或数字 (T_NUM_STRING)第 57 行的 testing\inventory\c.php 糟糕。我忘记了while 的括号。我已经更新了答案。 我在你提到之前解决了这个问题:P 但我仍然遇到同样的错误。 问题在于这一行 echo "item name: $row['item_name']";通过将其更改为 echo $row['item_name'];成功了。但是,即使在用户有机会单击类别之前,它也会显示所有详细信息。如何解决这个问题? 我以为这就是你的意图。听起来您需要一个生成所有项目信息的第二个网页。只需将cat_id 传递给带有$_GET 的第二个脚本。【参考方案2】:

所以在花了将近一两天之后,我终于找到了解决办法,我在这里发布了答案,以便其他人来这里寻找它。

<?php
 require ('config.php');

 $que = "SELECT * FROM category";
 $run = mysql_query($que);
 $j = 0;
 while($row = mysql_fetch_array($run))
 
    $cat_idd[$j] = $row['cat_id'];
    $cat_namee[$j] = $row['cat_name'];
  $j++;
 
for($i = 0;  $i < count($cat_idd);  $i++)
    
        $que2 = "SELECT * FROM item WHERE cat_id = '$cat_idd[$i]' ";
        $result = mysql_query($que2);
        $run = mysql_num_rows($result);
        echo "<a href='c.php?id=$cat_idd[$i]'>".$cat_namee[$i]."(".$run.")</a><br><br>";
    

?>


<?php
 require('config.php');
 if(isset($_GET['id']))
  
    $cat_id = $_GET['id'];
    $que = "SELECT * FROM item WHERE cat_id = '$cat_id'";
    $run = mysql_query($que);
?>
<br><br>
<form name = "view" method = "POST" action ="cart.php">
<table align = 'center' width = '100%' border = '4'>
<tr>
<td colspan = '20' align = 'center'><h2> Viewing all the Products </h2></td>
</tr>

<tr align = 'center'>
<th>Item ID</th>
<th>Name</th>
<th>Price</th>
<th>Select</th>
</tr>

<tr align = 'center' class = "odd">
<?php

    while($row = mysql_fetch_array($run))
    
        $i_id = $row['item_id'];
        $i_name = $row['item_name'];
        $i_price = $row['item_price'];
        ?>
<td><?php echo $i_id; ?></td>
<td><?php echo $i_name; ?></td>
<td><?php echo $i_price; ?></td>
<?php

$item = $i_name ." ". $i_price;  

?>                                                      
<td><input type="checkbox" name="addcart[]" value="<?php echo $item; ?> />Tick</td> 
</tr>
<?php  ?><input type = "hidden" name = "check">
<button type=  "submit" onclick = "location.href = 'cart.php';" id = "cart">Add to Cart</button> <?php   ?>  
</table>

【讨论】:

感谢您发布您的解决方案。不过,这里有 SQL 注入和可能的 XSS 问题,所以不要上线。在此站点上搜索“SQL 注入”以查找解决此问题的资源。 @halfer 我知道 SQL 注入,这只是为了学习目的,很快就会解决。请详细说明 XSS? :$ 如果您向用户回显任何可能有用户输入的内容,他们可能已经能够放入&lt;&gt; html 尖括号。如果是这样,他们可能已经能够添加脚本标签,在这种情况下,他们可能能够在您的浏览器中运行 javascript 来执行恶意操作,例如窃取 cookie。 (当然,这里和网络上也有相关资源——值得研究)。

以上是关于如何扩展从 MySQL 导入的类别列表的主要内容,如果未能解决你的问题,请参考以下文章

VS2013 Express Test Explorer - 如何扩展所有类别?

如何从 mysql 将子类别加载到 joomla

如何在 MySQL 和 PHP 中显示所有产品的所有类别?

如何从具有多个值和预定义类别的列表中创建虚拟对象? [复制]

可扩展列表视图回收问题

应用程序在从表单(SwiftUI)的选择器上选择时扩展“其他”类别)