2014-01-24 78 views
0

我犯了一個PHP的形式,並創造了這個錯誤處理腳本:顯示文本GET

<?php 
    if(isset($_GET["alert"])) { 
     $alert = $_GET["alert"]; 
     if($_GET["alert"]="nofilled") { 
       echo "<div class='error'>You missed something!</div>"; 
     } 
     elseif($_GET["alert"]="badpass") { 
       echo "<div class='error'>Your passwords don't match!</div>"; 
     } 
     elseif($_GET["alert"]="badusername") { 
       echo "<div class='error'>Your username is too long!</div>"; 
     } 
     elseif($_GET["alert"]="shortpass") { 
       echo "<div class='error'>Your password is too short!</div>"; 
     } 
     elseif($_GET["alert"]="takenusername") { 
       echo "<div class='error'>That username is taken!</div>"; 
     } 
     elseif($_GET["alert"]="takenemail") { 
       echo "<div class='error'>That email already has an account attached to it!</div>"; 
     } 
    } 
?> 

我試圖與「badpass」的GET值運行。出於某種原因,它迴應了'沒有填充'的信息。

我正在學習這一點,我找不到解決方案。你可以快速查看,看看有什麼不對?

+1

這是=':

<?php if(isset($_GET["alert"])) { echo '<div class = "error">'; switch($_GET['alert']) { case "nofilled": echo "You missed something!"; break; case "badpass": echo "Your passwords don't match!"; break; ... default: echo "An undetermined error ocurred"; break; } echo '</div>'; } 

甚至更​​好(更DRY),只需使用一個數組而不是所有'if'中的'=='GET –

+1

在您的條件下使用== –

+1

或者,您應該始終使用「===」,除非您有理由不這樣做。 – ragol

回答

1

您的問題發生是因爲您正在使用'='而不是'=='(1是賦值,2是比較)。 不過,我建議使用下面的方法,因爲它更高效,更清潔:

if(isset($_GET["alert"])) { 
    $alerts = array(
     "nofilled"=>"You missed something!", 
     "badpass"=>"Your passwords don't match!", 
     "badusername"=>"Your username is too long!", 
     "shortpass"=>"Your password is too short!", 
     "takenusername"=>"That username is taken!", 
     "takenemail"=>"That email already has an account attached to it!" 
     ); 

    echo "<div class='error'>". isset($alerts[$_GET['alert']]) ? $alerts[$_GET['alert']] : $alerts[$_GET['nofilled']]. "</div>"; 
} 
  • 每@屯的正確意見,我加入的情況下$alerts[$_GET['alert']])不存在爲「nofilled」默認備用。

希望這有助於!

+0

+1是IMO唯一正確的答案。但是,請確保檢查數組的鍵是否存在(查看我的答案以瞭解我的意思)。 –

+0

夠好!如果數組鍵中不存在'$ _GET [「alert」]'會發生什麼?如果可以用'array_key_exist()'檢查並使用它,會更好。 –

+0

謝謝你。 Y –

0

的原因,它默認爲'nofilled'消息,是因爲你使用的=賦值運算符,而不是在==所有conditional statements

=assignment operator,而==是檢查它的「等於comparison operator

重寫:

<?php 
    if(isset($_GET["alert"])) { 
     $alert = $_GET["alert"]; 
     if($_GET["alert"]=="nofilled") { 
       echo "<div class='error'>You missed something!</div>"; 
     } 
     elseif($_GET["alert"]=="badpass") { 
       echo "<div class='error'>Your passwords don't match!</div>"; 
     } 
     elseif($_GET["alert"]=="badusername") { 
       echo "<div class='error'>Your username is too long!</div>"; 
     } 
     elseif($_GET["alert"]=="shortpass") { 
       echo "<div class='error'>Your password is too short!</div>"; 
     } 
     elseif($_GET["alert"]=="takenusername") { 
       echo "<div class='error'>That username is taken!</div>"; 
     } 
     elseif($_GET["alert"]=="takenemail") { 
       echo "<div class='error'>That email already has an account attached to it!</div>"; 
     } 
    } 
?> 

請教關於比較操作手冊:

0

=使用了分配的東西

==使用了比較

使用==條件中的

if(isset($_GET["alert"])) { 
      $alert = $_GET["alert"]; 
      if($_GET["alert"]=="nofilled") { 
        echo "<div class=='error'>You missed something!</div>"; 
      } 
      elseif($_GET["alert"]=="badpass") { 
        echo "<div class=='error'>Your passwords don't match!</div>"; 
      } 
      elseif($_GET["alert"]=="badusername") { 
        echo "<div class=='error'>Your username is too long!</div>"; 
      } 
      elseif($_GET["alert"]=="shortpass") { 
        echo "<div class=='error'>Your password is too short!</div>"; 
      } 
      elseif($_GET["alert"]=="takenusername") { 
        echo "<div class=='error'>That username is taken!</div>"; 
      } 
      elseif($_GET["alert"]=="takenemail") { 
        echo "<div class=='error'>That email already has an account attached to it!</div>"; 
      } 
     } 
+0

'$ alert == $ _GET [「alert」];'?? –

+0

好! '$ alert = $ _GET [「alert」];'。你分配了'$ alert'變量而不使用它? –

+0

別擔心,它不是我的代碼。 SO會在需要的地方使用它。 –

0

=是一個賦值操作符。因此$_GET["alert"]="nofilled""nofilled"指定爲$_GET["alert"]。相反,您應該使用===這是一個身份比較運算符。除非您有很強的理由,否則不應使用==進行比較。 ==會自動進行類型轉換,導致通常很難檢測到的錯誤。由於轉換它也稍微(但當然可以忽略)較慢。

1

這看起來更像是在使用開關的情況:因爲使用了`

if (isset($_GET["alert"])) { 
    $Errors = array(
    "nofilled" => "You missed something!", 
    "badpass" => "Your passwords don't match!", 
    ... 
    ); 
    echo '<div class = "error">'; 
    if (array_key_exists($_GET['alert'], $Errors)) 
    echo $Errors[$_GET['alert']]; 
    else 
    echo "An undetermined error ocurred"; 
    echo '</div>'; 
    }