在foreach条件下具有变量范围的问题

时间:2016-07-22 13:22:53

标签: php

让我们看看我的脚本。在我将值赋给变量$ specdata

时,我没有得到任何值
$result = mysqli_query($connection, "select * from productrates");
if (mysqli_num_rows($result) > 0)
{
  echo "<div class='box-body'>";

  $header='';
  $rowdata='';

$header='<tr>';

$field= mysqli_fetch_fields($result);


foreach ($field as $val) {

    if($val->name !="specs") 
    {
    $header.= "<th style='background:#E1E1E1'>".$val->name."</th>";

    }


}


$header.='</tr>';

while ($row = mysqli_fetch_array($result))
{

    $field= mysqli_fetch_fields($result);
    $rowdata.="<tr class='linehover'>";
// in this section i want to show $specdata values in div id="specs"  

foreach ($field as $val) 
{
    $specdata =''; 

    if($val->name =="specs") 
    {

        $specdata = $row[1];
        echo $specdata;echo "<hr>";

    }
    if($val->name !="specs") 
    {
        if($val->name == "Product")
        {
            $rowdata.= "<td class='nohover'>".$row[$val->name]."<div id='specs'>".$specdata."</div></td>";

        }
        else
        {
            $rowdata.= "<td>".$row[$val->name]."</td>";
        }
    }
}
$rowdata.='</tr>';


} 
}

mysqli_free_result($result);

echo '<table class="table table-bordered"  id="pricelist">'.$header.$rowdata.'</table></div>';

// but every i am getting null value in that div

2 个答案:

答案 0 :(得分:0)

让我们把不重要的比特切掉,看看这个

foreach ($field as $val) 
{
    $specdata =''; 

    if($val->name =="specs") 
    {
        $specdata = $row[1]; // no clue what $row[1] holds
        echo $specdata; echo "<hr>";
    }
    if($val->name !="specs") 
    {
        echo $specdata; // $specdata = '';
    }
}

请记住,每次循环重启时,$specdata都会被设置为空字符串。所以即使你这次将它设置为$row[1],它也会在下一次迭代时成为空字符串。所以if($val->name !="specs")总会给你一个空字符串。

答案 1 :(得分:0)

您是否检查过'$ val-&gt; name'的值?因为如果它与“规格”不同 它不会传递你的第一个条件:

if($ val-&gt; name ==“specs”)

只是不会填充变量$ specdata

只是为了给你一个提示,建立这个代码可能会更好,例如:

foreach ($field as $val)
{
    $specdata = '';    
    switch ($val->name) {
        case "specs":
          $specdata = $row[1];
          echo $specdata;echo "<hr>";
        break;

        case "Product":
           $rowdata.= "<td class='nohover'>".$row[$val->name]."<div id='specs'>".$specdata."</div></td>";
        break;

        default:
            $rowdata.= "<td>".$row[$val->name]."</td>";   
}