我试着编写一个代码,可以使用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
感谢你们最终得到答案的答案
答案 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;