0

1つはヘッダーにあり、もう1つは同じページにある2つのナビゲーションがあります。サブカテゴリをクリックすると、サブカテゴリの特定の製品のテーブル製品からすべてのデータを取得できるようになりました. 私が今持っているのは、すべてのページに含まれているヘッダーページにあるメニューをクリックすると、製品がリストされますが、製品ページにあるメニューはforeachが空であるというエラーを生成します. 他の関数を使用してすべてのサブカテゴリを取得すると、正常に機能しますが、その特定のメインカテゴリに属する​​サブカテゴリのみを取得したいと考えています。以下のコードはより理にかなっています。

ヘッダー ページ:

<?php 
error_reporting(E_ALL);
ini_set('display_errors','1');?>
<?php require_once("initi.php");?>
<html>
<head>
<title></title>
 <link rel="stylesheet" href="css/reset.css" />
 <link rel="stylesheet" href="css/main.css" />
 <link rel="stylesheet" href="css/footer.css" />
<script type="text/javascript" src="/ghaniya.com/javascript/jqu.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$(".logbtn").click(function(){ 
      $("#login2").hide("show");
      $("#login1").slideToggle("slow");
      $(this).toggleClass("active");

});

$(".logbtn2").click(function(){ 
      $("#login1").hide("show");
      $("#login2").slideToggle("slow");
      $(this).toggleClass("active");      
});
});
</script>
<style type="text/css">

div#login1{
background-color:#efebee;
margin:0 auto;
width:100%;
display:none;
height:100px;
}

div#login2{
background-color:#f5dce4;
margin:0 auto;
width:100%;
display:none;
height:100px;
}
.size{width:960px; }
.flotl{float:left; font-size:11px; text-decoration:none; height:30px; margin-left:20px;}
div#centerl{ width:960px; margin:0 auto; }
</style>
</head>
<body>
<div id="head">

<div class="size center">
<img src="img/logosmall.png">
<ul id="mainLink">
<li><a class="logbtn">Women</a></li><li><a class="logbtn2" href="#">man</a></li><li><a href="#">Beauty</a></li><li><a href="">Gifts</a></li><li><a href="">Perfumes</a></li>
</ul>

<div id="loginBox">
<h3>REGISTER | SIGN IN</h3>
</div>

<div id="search">
<input type="submit"/><input type="text" value="Search"/>
</div>
<div id="bag"></div>
</div>
</div>


<div id="login1" >
<div id="centerl">
<ul class="flotl" >
<?php
$cata = Catagory::find_all(); 
foreach($cata as $catag){?>
      <li><a href="/ghaniya.com/product.php?catid=<?php echo $catag->catagory_id;?>"><?php echo $catag->name; ?></a></li>
<?php }?>
</ul> 
</div>
</div>

製品ページ:

<?php require_once("includes/head.php"); ?>
<?php
  $cata_id = "";  
  $subcat ="";
  if(isset($_GET['catid']))
    {
         $cata_id = $_GET['catid'];
         $product = Product::find_by_cata_id($cata_id);
    }
    elseif(isset($_GET['subcat']))
    {
    $subcat =$_GET['subcat'];
    $subcat = SubCata::find_by_cata_id(1);
    print_r($subcat);
    }
?>
<div class="cBoth"></div>
<div id="contentEveryWhere" class="center">
<div id="cata">
<div id="leftNoticeBoard"></div>
<ul id="catagories">
<h1>CLOTHING</h1>
<?php foreach($subcat as $sub){ ?>
<li><a href="product.php?subcat=<?php echo $sub->subcata_id; ?>"><?php echo $sub->name; ?></a></li>
<?php } ?>
</ul>
</div>
<div id="products">
<div id="catatitle"> 
<ul>
<li>Home ></li><li>Women ></li><li>Coat<li>
</ul>
<h1>Coat</h1>
<p class="floatl">Sort items by Price: High | Low View as: <img src="#" alt="icon png"/> |<img src="#" alt="icon png"/></p>
</div>
<ul id="product">
<?php $product = Product::find_by_cata_id($cata_id);?>
<?php foreach($product as $pro){?>
<?php $image = Image::find_by_product_id( $pro->product_id);?>
          <li>
               <?php if(isset($image->filename)){ ?>
               <img src="/ghaniya.com/img/products/<?php echo $image->filename;?>"/>
               <?php } ?>

              <h2><?php echo $pro->name;?></h2>
              <h3> <?php echo $pro->product_desc;?></h3>
              <h4><?php echo $pro->price;?></h4>
          </li>
<?php } ?>
</ul><!--end of product list-->
</div> <!--end of products div-->


</div><!--end of contentEveryWhere div-->
<div class="cBoth"></div>
<?php require_once("includes/footer.php"); ?>

警告: /Users/mughery/Website/ghaniya.com/product.php の 25 行目の foreach() に無効な引数が指定されました

4

3 に答える 3

0

foreach を使用する場合、最初の引数は配列でなければなりません。

コードを次のように変更できます。

<?php
   if( is_array( $subcat ) )
     foreach($subcat as $sub){ 
?>
于 2012-09-04T11:01:12.730 に答える
0

4行:

<?php
 $subcat = array();
?>
于 2012-09-04T11:02:40.810 に答える
0

問題は非常に単純です。

if(isset($_GET['catid']))
{
    $cata_id = $_GET['catid'];
    $product = Product::find_by_cata_id($cata_id);
}
elseif(isset($_GET['subcat']))
{
    $subcat =$_GET['subcat'];
    $subcat = SubCata::find_by_cata_id(1);
}

つまり、設定されていない場合にのみ設定され、設定されていない$subcat場合にのみ設定さます。それ以外の場合はすべて、配列ではなく空の文字列です。次のような行を追加するだけです:$_GET['catid'] $_GET['subcat']$subcat

$subcat = (is_array($subcat) ? $subcat : SubCata::find_by_cata_id(1));
//or: 
$subcat = (is_array($subcat) ? $subcat : array());

そして、あなたは行くのが良いでしょう

また、これ:

$subcat =$_GET['subcat'];
$subcat = SubCata::find_by_cata_id(1);

私には意味がありません。次のようなものが必要だと思います。

elseif(isset($_GET['subcat']))
{
    $subcat =SubCata::find_by_cata_id($_GET['subcat']);
}
$subcat = (is_array($subcat) ? $subcat : SubCata::find_by_cata_id(1));

そうでない場合は、subcat パラメーターの実際の値に関係なく、id 1 のすべてのデータを取得しています...

于 2012-09-04T11:03:17.907 に答える