如何通过循环foreach语句从会话变量中打印内容

时间:2012-11-28 10:38:28

标签: php mysql

我试着编写一个代码,可以使用foreach语句打印和循环遍历会话变量的内容

这是我的代码

<form class="form form-inline" method = "post" action="reportmaker.php">
<select name="rfield">
<option value="">--Select Field--</option>
<?php
    $sc2=mysql_query("SELECT * from searchcolumn s left join report_fields r on s.scol_id=r.field_id where s.category != 'wh'");
    foreach($sc2 as $sc){
 ?>

<option value="<?php echo $sc[advsearch_col]; ?>"><?php echo $sc[advsearch_name]; ?></option>

 <?php
  }
 ?>
 </select>
 <button type="submit" value = "submit" id="add" name="add" class="btn pull-right">Add More</button>

</form>

<?php
        if(isset($_POST['add']))
            {
            $_SESSION['temp'][]=$_POST['rfield'];   

            }
        if($_SESSION[temp][]!=""){
            foreach($_SESSION[temp][] as $temp)
            {
        echo $temp;
            }
        }
        ?>

此代码显示的错误是

致命错误:无法使用[]进行阅读

错误所在的行是

if($_SESSION[temp][]!=""){

我需要打印会话数组的内容,这是我知道的唯一方法 有没有办法解决这个问题?

感谢

====== EDIT

感谢你们最终得到答案的答案

5 个答案:

答案 0 :(得分:0)

这应该有效:

<?php
    if(isset($_POST['add']))
        {
        $_SESSION['temp'][]=$_POST['rfield'];   

        }
    if($_SESSION['temp']!=""){
        foreach($_SESSION['temp'] as $temp)
        {
    echo $temp;
        }
    }
    ?>

空括号只是语法糖,可以在数组末尾轻松追加

此外,即使这不会导致问题,也要小心正确引用'temp'并且不要使用temp。如果没有定义temp常量,则会采用相应的字符串值'temp',但如果在define('temp', 'value')等其他地方定义了此类常量,则使用temp将使用改为定义的值。

答案 1 :(得分:0)

这将为您提供添加到会话temp数组的每个帖子字段。您不需要if之前的foreach。您可能想要在循环之前检查它是否已设置:

    if(isset($_SESSION['temp']))
    {
       foreach($_SESSION['temp'] as $temp)

在整个代码中,您访问的数组元素$array[keyname]并不好,您应该使用键名称周围的引号。这样做的原因是,没有引号,PHP将其视为常量,如果没有,则返回到字符串。因此,如果你有一个同名的常量,你就会遇到问题。

答案 2 :(得分:0)

空括号[]用于向数组添加内容。要使用整个数组,请忽略空括号。

答案 3 :(得分:0)

foreach($_SESSION["temp"] as $temp)
{
echo $temp;
}

答案 4 :(得分:0)

我只是假设你正在调试。要打印数组,您可以使用函数print_r($array);

为了进行调试,我通常使用var_dump($var);,因为它还显示了一些其他细节,例如数据类型等。

如果你想出于任何原因使用foreach循环,那很简单:

foreach($_SESSION as $value) echo $value;