使用isset获取未定义的变量

时间:2015-02-26 11:28:56

标签: php forms

使用以下代码,我收到错误"Undefined Index: area"

<select id="area" name="area" class="selectbox dropdownfilter" data-target-id="location">
    <option value="">all areas</option>
    <?php asort($areas) ?>
    <?php foreach ($areas as $code =>$area) : ?>
    <option value="<?php echo $code ?>"<?php if(isset($_SESSION['area']) | isset($_POST['area'])) { if($_SESSION['area'] == $area | $_POST['area'] == $area) { echo ' selected'; } } ?> ><?php echo $area ?></option>
    <?php endforeach ?>
</select>

正确输出$area,错误出现在'selected'脚本中。关于我做错了什么,或者我怎么能做到这一点,我都输了。我只是想选择该选项,如果它是在搜索表单中提交的内容。

2 个答案:

答案 0 :(得分:1)

错误“Undefined Index:area”表示 $ _ POST ['area'] $ _ SESSION ['area']确实已设置....但另一个不是......

使用它:

if((isset($_SESSION['area']) && $_SESSION['area'] == $area) || (isset($_POST['area']) && $_POST['area'] == $area)) {echo ' selected';}

或者像这样:

 if(@$_SESSION['area'] == $area || @$_POST['area'] == $area) {echo ' selected';}

答案 1 :(得分:1)

那个条件:

if(isset($_SESSION['area']) | isset($_POST['area'])) {

=&GT;如果设置了$_SESSION['area']或者设置了$_POST['area'],则返回true 因此,如果未设置$_SESSION['area']但设置了$_POST['area'],则确实如此。

然后:

    if($_SESSION['area'] == $area | $_POST['area'] == $area) {

=&GT;您正在测试$_SESSION['area']值。如果未设置(可能如前所述),您将收到错误通知。

这是我要做的,只有一个条件:

if (
    (isset($_SESSION['area']) && $_SESSION['area'] == $area)
    ||
    (isset($_POST['area']) && $_POST['area'] == $area)
) {

如果未设置$_SESSION['area'],则PHP无法测试$_SESSION['area'] == $area是否因为它不需要(因为第一个条件是假的),它会尝试OR

之后是什么

http://php.net/manual/en/language.operators.logical.php
http://php.net/manual/en/language.operators.precedence.php