0

我试图编写一个代码,可以通过使用 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][]!=""){

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

谢谢

=========编辑

谢谢大家的回答我终于明白了

4

5 回答 5

0

这应该有效:

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

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

空括号只是语法糖,便于在数组末尾附加。

另外,即使在这里没有引起问题,也要小心正确引用'temp',不要使用temp. 如果没有temp定义常量,它将采用相应的字符串 value 'temp',但如果在其他地方定义了这样的常量,例如 this define('temp', 'value'), usingtemp将使用定义的值。

于 2012-11-28T10:41:05.440 回答
0

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

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

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

于 2012-11-28T10:41:28.720 回答
0

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

于 2012-11-28T10:41:39.900 回答
0
foreach($_SESSION["temp"] as $temp)
{
echo $temp;
}
于 2012-11-28T10:42:40.823 回答
0

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

对于调试,我通常使用var_dump($var);它,因为它还显示了一些额外的细节,如数据类型等。

如果您出于任何原因想使用 foreach 循环,这很容易:

foreach($_SESSION as $value) echo $value;
于 2012-11-28T10:44:51.057 回答