繁体   English   中英

PHP:每当使用if!isset时,都会出现此错误:“ undefined index”

[英]PHP: Whenever I use if !isset I get this error: “undefined index”

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

注意在etträknesätt的第13行Mata上C:\\ xampp \\ htdocs \\ labb1 \\ miniraknare.php中的undefined index:typ!

我从应用程序中获得了想要的正确响应,但是我不知道如何摆脱该通知。 我该如何解决?

这是我的代码:

<?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>

旁注:我在发布前进行了测试。

您的代码没有任何问题。

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

您可以将这些代码拆分为它们自己的文件,或者将isset()与命名的Submit按钮一起使用,还检查是否已设置单选按钮,以及您输入数字的字段是否为空。

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

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

然后,对siffra1siffra2元素使用empty()

<?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.";
}

谢谢,只是如果用户不使用计算方法,我需要显示消息“ Mat in etträknesätt”。 但是消息没有出现。 如何显示?

编辑:

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

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

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

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

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

您需要检查$ _POST ['typ']周围的isset;

 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);
    }
}

如果typ是您的单选按钮的集合,并且您不能在未选中其中一个的情况下继续操作,那么此脚本应该做的第一件事就是测试是否在该字段中为其传递了值。

请记住,如果没有一个单选按钮由用户NOTHING检查在POST为字段名被发送,所以会有只是没有一次出现在$ _POST阵列该字段英寸

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'];

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

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

本质上,PHP在考虑: 开发人员正在使用数组键,应该设置这些键 ---但事实是,它们没有从HTML表单正确填充。 因此,阻止抛出此错误的解决方案是:

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

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

  1. 检查HTML表单和PHP验证之间的错别字
  2. echo "<pre>"; var_dump($_POST); echo "</pre>"; 在验证端检查提交post数组发生了什么

根据您的方案进行更改。 告诉发生了什么事情很尴尬,因为我们没有看到所有可用的代码,即Ie。 HTML。

或者您可以这样尝试:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM