PHP:每当我使用if!isset时我都会收到此错误:“undefined index”

时间:2014-12-11 16:03:57

标签: php calculator isset

到目前为止,这是我的计算器应用程序的PHP代码。我试图这样做,以便每当用户不检查多个(4)单选按钮之一使用计数方法时,将会有一个警告,告诉用户他们必须使用计数方法。 但是会发生什么呢:

  

注意未定义的索引:第13行的C:\ xampp \ htdocs \ labb1 \ miniraknare.php中的typ   Mata inetträknesätt!

我从应用程序中得到了我想要的正确答案,但我不知道如何摆脱通知。我该如何解决这个问题?

这是我的代码:

<?php

$miniraknare1 = $_POST['siffra1'];
$miniraknare2 = $_POST['siffra2'];
$miniraknaretyp = $_POST['typ'];

if (is_numeric($miniraknare1) && is_numeric($miniraknare2)){

    if (!isset($miniraknaretyp)) {
        echo("Mata in ett räknesätt!");
    }

    if($miniraknaretyp=="addition"){
        echo $miniraknaretyp . " " . "Resultatet är:" . " " . 
              ($miniraknare1+$miniraknare2);
    }

    if($miniraknaretyp=="subtraktion"){
        echo $miniraknaretyp . " " . "Resultatet är:" . " " . 
            ($miniraknare1-$miniraknare2);
    }

    if($miniraknaretyp=="multiplikation"){
        echo $miniraknaretyp . " " . "Resultatet är:" . " " . 
            ($miniraknare1*$miniraknare2);
    }

    if($miniraknaretyp=="division"){
        echo $miniraknaretyp . " " . "Resultatet är:" . " " . 
            ($miniraknare1/$miniraknare2);
    }
}
else {
    echo "Ditt inmatade värde är felaktigt";
}

?>

</body>
</html>

第13行是这一行:$miniraknaretyp = $_POST['typ'];

这是我的HTML

<!DOCTYPE html>

<html>
    <head>
        <meta charset="utf-8">
        <title>Inlämningsuppgift 1 – miniraknare.php</title>        
    </head>

    <body>

    Ange två siffror och välj beräkningssätt:
    <form action="miniraknare.php" method="post">
        <input type="text" name="siffra1" />
        <input type="radio" name="typ" value="addition" />+
        <input type="radio" name="typ" value="subtraktion" />-
        <input type="radio" name="typ" value="multiplikation" />*   
        <input type="radio" name="typ" value="division" />/
        <input type="text" name="siffra2" /><br />  
        <input type="submit" name="skicka" />
    </form>
    <br />
    <br />


    </body>
</html>

6 个答案:

答案 0 :(得分:2)

旁注:我在发布前测试过。

您的代码没有任何问题。

我怀疑是,您的整个代码(HTML表单和PHP)都位于同一页面内,这就是您收到“未定义索引”警告的原因,因为这在初始页面上是正常的加载,因为没有为单选按钮选择任何内容,或在表单字段中输入了数字。

要么将这些代码拆分为自己的文件,要么将isset()与命名提交按钮一起使用,同时检查是否设置了单选按钮以及输入数字的字段,不是空的。

如果您在一个文件中使用整个代码并希望保留它,请将提交按钮修改为:( 我只添加了“提交”一词

<input type="submit" name="skicka" value="Submit" />

然后执行,并使用empty()代替siffra1siffra2元素:

<?php

if(isset($_POST['skicka'])  
   && isset($_POST['typ'])  
   && !empty($_POST['siffra1']) 
   && !empty($_POST['siffra2']) ){

$miniraknare1 = $_POST['siffra1'];
$miniraknare2 = $_POST['siffra2'];
$miniraknaretyp = $_POST['typ'];

if (is_numeric($miniraknare1) && is_numeric($miniraknare2)){

    if (!isset($miniraknaretyp)) {
        echo("Mata in ett räknesätt!");
    }

    if($miniraknaretyp=="addition"){
        echo $miniraknaretyp . " " . "Resultatet är:" . " " . 
              ($miniraknare1+$miniraknare2);
    }

    if($miniraknaretyp=="subtraktion"){
        echo $miniraknaretyp . " " . "Resultatet är:" . " " . 
            ($miniraknare1-$miniraknare2);
    }

    if($miniraknaretyp=="multiplikation"){
        echo $miniraknaretyp . " " . "Resultatet är:" . " " . 
            ($miniraknare1*$miniraknare2);
    }

    if($miniraknaretyp=="division"){
        echo $miniraknaretyp . " " . "Resultatet är:" . " " . 
            ($miniraknare1/$miniraknare2);
    }
}
else {
    echo "Ditt inmatade värde är felaktigt";
    }

} // brace for if(isset($_POST['skicka']))

?>

</body>
</html>

您还可以添加else

} // brace for if(isset($_POST['skicka']))

else{
echo "Nothing is set.";
}

  

谢谢,只是我需要消息“Mata inetträknesätt”来显示用户是否使用计算方法。但消息没有显示出来。如何让它出现?

修改

在上面的代码中更改整个块:

if(isset($_POST['skicka'])  
   && isset($_POST['typ'])  
   && !empty($_POST['siffra1']) 
   && !empty($_POST['siffra2']) ){

if(isset($_POST['skicka']) ){

答案 1 :(得分:1)

$miniraknare1 = $_POST['siffra1'];
$miniraknare2 = $_POST['siffra2'];

if(isset($_POST['typ']))
   $miniraknaretyp = $_POST['typ'];
else
   echo("Mata in ett räknesätt!");

答案 2 :(得分:0)

你需要检查$ _POST周围的情况[&#39; typ&#39;];

 if(isset($_POST['typ'])) {
     $miniraknaretyp = $_POST['typ'];
 }

然后你需要

if (!isset($miniraknaretyp)) {
    echo("Mata in ett räknesätt!");
} else {

    if($miniraknaretyp=="addition"){
        echo $miniraknaretyp . " " . "Resultatet är:" . " " . ($miniraknare1+$miniraknare2);
    }

    if($miniraknaretyp=="subtraktion"){
        echo $miniraknaretyp . " " . "Resultatet är:" . " " . ($miniraknare1-$miniraknare2);
    }

    if($miniraknaretyp=="multiplikation"){
        echo $miniraknaretyp . " " . "Resultatet är:" . " " . ($miniraknare1*$miniraknare2);
    }

    if($miniraknaretyp=="division"){
           echo $miniraknaretyp . " " . "Resultatet är:" . " " . ($miniraknare1/$miniraknare2);
    }
}

答案 3 :(得分:0)

如果typ是你的单选按钮集,如果没有检查其中一个单元按钮就无法继续,那么这个脚本应该做的第一件事就是测试它是否在该字段中传递了一个值。

请记住,如果用户未选中任何单选按钮,则在该字段名的POST中发送 NOTHING ,因此该字段的$ _POST数组中不会出现。< / p>

if ( ! isset($_POST['typ']) ) {
    echo 'You must click one of the radio buttons';
    // exit or something like it as continuing would be pointless
}

在此之前执行此操作

$miniraknare1 = $_POST['siffra1'];
$miniraknare2 = $_POST['siffra2'];
$miniraknaretyp = $_POST['typ'];

答案 4 :(得分:0)

您当前正在检查变量$miniraknaretyp是否已设置,但此代码中是否已设置。您通过引用全局数组而不使用isset来分配这些变量,因此PHP期望设置索引。有问题的行是:

$miniraknare1 = $_POST['siffra1'];
$miniraknare2 = $_POST['siffra2'];
$miniraknaretyp = $_POST['typ'];

基本上,PHP正在考虑: Dev正在使用数组键,这些应该设置 ---但问题的真相是它们没有从HTML表单中正确填充。因此,停止抛出此错误的解决方案是:

if (isset($_POST['typ'])){
  $miniraknare1 = $_POST['typ'];
}

如果您确定应填充这些索引,但不是..那么我建议使用以下简单的调试技术:

  1. 检查HTML表单与PHP验证之间的拼写错误
  2. 验证方
  3. echo "<pre>"; var_dump($_POST); echo "</pre>";检查提交后post数组中发生的情况
  4. 根据您的方案进行更改。由于我们没有看到所有可用的代码,所以告诉我们发生了什么是很尴尬的。 HTML。

答案 5 :(得分:-1)

或者您可以尝试这样:

  if (!isset($miniraknaretyp)) {
$miniraknaretyp = $_POST['typ'];
     echo("Mata in ett räknesätt!");
}