如何在PHP开关中检查isset?

时间:2014-02-09 21:50:57

标签: php

我有这段代码:

<form method="POST">
<input type="text" name="my">
<input type="submit" name="submit">
</form>

<?php
if (isset($_POST['my'])) {
$ali = $_POST['my'];
}
switch ($ali) {
    case '1':
        echo "one";
        break;
    case '2':
        echo "two";
        break;
    case '3':
        echo "three";
        break;
}
?>

问题是当我想打开窗户时我有错误!

  

注意:未定义的变量:第11行的C:\ Program Files(x86)\ EasyPHP-5.4.0RC4 \ www \ test \ index.php中的ali

如何检查交换机的值?

8 个答案:

答案 0 :(得分:5)

如果$_POST['my']设置为 NOT ,则不设置$ali,因此未设置尝试使用未定义符号($ali运行的开关并没有定义)。

这样的事情会更合适:

<?php
if (isset($_POST['my'])) {
    switch ($_POST['my']) {
        case '1':
            echo "one";
            break;
        case '2':
            echo "two";
            break;
        case '3':
            echo "three";
            break;
    }
}
?>

答案 1 :(得分:3)

您可以这样做:

if (isset($_POST['my'])) {
 $ali = $_POST['my'];

 switch ($ali) {
    case '1':
        echo "one";
        break;
    case '2':
        echo "two";
        break;
    case '3':
        echo "three";
        break;
  }

 }

问题发生在你

之后
if (isset($_POST['my'])) {
 $ali = $_POST['my']; 
} 

然后您在$ali中使用了switch(),因此如果数据已发布,那么就可以了,但如果您只是加载页面,则不会获得$ali和{{{{}}的任何值1}}未定义导致错误。

答案 2 :(得分:3)

这是您可以尝试的另一种方式。

<?php

switch ($_POST['my']) {
    case '1':
        echo "one";
        break;
    case '2':
        echo "two";
        break;
    case '3':
        echo "three";
        break;
    default:
        echo "Doesn't match 1, 2 or 3";
        break;
}
?>

答案 3 :(得分:2)

您检查是否设置了$ _POST [&#39; my&#39;]。但如果不是,那么你仍然继续前进。这就是产生通知的原因。

在某些情况下,如果没有设置$ _POST [&#39; my&#39;],也可以做某事。一起停止开关盒可能不是最好的选择。

我的解决方案:

<form method="POST">
<input type="text" name="my">
<input type="submit" name="submit">
</form>

<?php
if (isset($_POST['my'])) {
    $ali = $_POST['my'];
}
else {
    $ali = -1;
}

switch ($ali) {
    case '1':
        echo "one";
        break;
    case '2':
        echo "two";
        break;
    case '3':
        echo "three";
        break;
    default:
        echo "no match";
}
?>   

这样$ ali总是被设置,你不会得到通知。

答案 4 :(得分:1)

你有这个问题,因为如果没有设置$ _POST ['my'],你就不会设置$ ali,然后你可以使用你的开关。

简单的答案是将开关包含在if:

<form method="POST">
<input type="text" name="my">
<input type="submit" name="submit">
</form>

<?php
if (isset($_POST['my'])) {
   $ali = $_POST['my'];

   switch ($ali) {
       case '1':
           echo "one";
           break;
       case '2':
           echo "two";
           break;
       case '3':
           echo "three";
           break;
   }
}
?>

或者你也可以为你的$ ali设置一个默认值,这样你至少得到一些输出:

<form method="POST">
<input type="text" name="my">
<input type="submit" name="submit">
</form>

<?php
if (isset($_POST['my'])) {
   $ali = $_POST['my'];
} else {
   $ali = '1'; // default value in case $_POST['my']  is NOT set
}
switch ($ali) {
    case '1':
        echo "one";
        break;
    case '2':
        echo "two";
        break;
    case '3':
        echo "three";
        break;
}
?>

答案 5 :(得分:1)

$_POST数组在您发送包含method=POST的表单后会激活或填充。也就是说,当您单击提交按钮时。因此,在单击提交按钮之前执行脚本时,if语句中的if表达式为false,并且不会执行并继续执行,使用不存在的$ ali变量。将switch语句放在if语句中。

此外,您必须检查提交按钮名称字段是否存在,因为如果设置了该字段,则所有其他字段也都存在。此外,当switch语句中的其他所有内容都为false时,最好使用'default'作为回退。所以正确的代码就是这个......

<?php
if (isset($_POST['submit_name_attribute'])) {
    $ali = (empty($_POST['my'])) ? '' : $_POST['my'];
    switch ($ali) {
    case '1':
       echo "one";
       break;
    case '2':
       echo "two";
       break;
    case '3':
        echo "three";
        break;
    default:
        echo "no value";
    }
}

答案 6 :(得分:0)

我迟到了,但我的方法略有不同

<Image Source="ms-appx:///Assets/SunBurst.png" x:Name="RotateImage" Stretch="Fill" RenderTransformOrigin="0.5,0.5">
        <Image.RenderTransform>
            <TransformGroup>
                <ScaleTransform ScaleX="2" ScaleY="2"/>
                <RotateTransform Angle="0"/>
            </TransformGroup>
        </Image.RenderTransform>
    </Image>

与其他答案没什么不同,但我认为速记if语句更整洁。基本上如果未设置$ POST,它将在$ ali中放入一个空值,然后将使用默认值。

答案 7 :(得分:0)

您可以这样做: 首先用一些像false这样的值初始化$ ali,你可以稍后检查 在案例中。 例如。 :

    <form method="POST">
    <input type="text" name="my">
    <input type="submit" name="submit">
    </form>

    <?php
    $ali=false;

    if (isset($_POST['my'])) {
    $ali = $_POST['my'];
    }
    switch ($ali) {
        case '1':
            echo "one";
            break;
        case '2':
            echo "two";
            break;
        case '3':
            echo "three";
            break;
        case false:
            echo '$ali is\'t set';
            break;
        case '':
             echo '$ali is blank';
             break;

    }

?>