簡體   English   中英

IF語句滿足特定條件時如何停止執行PHP腳本?

[英]How to stop execution of PHP script when a certain condition is met in IF statement?

我正在使用PHP開發應用程序。 我有一個帶有三個輸入字段的HTML表單:用戶名,密碼和確認密碼。 我想防止輸入為空。 我有這個PHP代碼:

if (empty($firstname)) {
    $message = "Please enter first name";
}
if (empty($password)) {
    $message = "Please enter password";
}
if (empty($confirm_password)) {
    $message = "Please confirm password";
}

現在,它可以一次檢查所有3個輸入並顯示3條消息。 但是我要它首先檢查名字是否為空。 如果為空,則顯示消息並退出(終止其余代碼,不僅在IF語句中,而且在整個PHPcode中終止。)如果不為空,則應跳到下一個字段(在這種情況下為密碼)。

請幫助我實現這一目標。

盡管最簡單的解決方案(如上所述)實際上只是調用exit()die() (實際上是exit()別名 ), 但這也是最糟糕的解決方案 通過簡單地殺死腳本,您可以防止僵屍啟示淹沒地球和其他領域,但是在cli腳本之外,實際上並沒有很好地使用出口。 根據經驗; 如果您在代碼中的某個位置編寫了exit()die() ,則說明您做錯了什么。 最主要的 某些事情與預期不符的事實並不意味着您無法處理。 您不會整天躺在床上,因為您忘記買早餐了,不是嗎? 你去超市買東西。 如果發生“意外”事件,在這種情況下,您需要向用戶報告,以便他解決問題(例如,填寫他忘記的字段)

就你而言 將代碼正確地分成相關的部分,就可以像對待異常一樣處理異常(在每種意義上)。 以小腳本為例;

function handleForm() {
    $formInput = sanitizePostData( $_POST );
    if ( ! formValidated( $formInput ) ) {
        return false;
    }

    doWhateverYouWantWithYourPostData();
}

function sanitizePostData( $postData ) {
    // do something magical and return clean data
    return $sanitizedData;
}

理想情況下,您可以讓handleForm()函數throw Exception或引發自定義FormException (通過擴展Exception類)。 但是,如果您不想這樣做,則可以調用此handleForm()函數。

if ( ! handleForm() ) {
    // Present a meaningful message to the user
} else {
    // Go and grab a pina colada!
}

您可以使用die()exit() -終止所有操作,但是為什么要這樣做呢? 據我了解,您正在注冊-您應該這樣進行-

 $message = '';
 if (empty($firstname)){
    $message.="Please enter first name";
}
if (empty($password)){
    $message.="Please enter password";
}
if (empty($confirm_password)){
    $message.="Please confirm password";
}

if($message=='')
{
 // your code here
}
else
{
  echo $message;
}

您可能還想使用try catch語法,它避免使用條件語句的金字塔形代碼:

<?php

try {
    if (empty($firstname)){
        throw new Exception("Please enter first name");
    }

    if (empty($password)){
        throw new Exception("Please enter password");
    }

    if (empty($confirm_password)){
        throw new Exception("Please confirm password");
    }

    // Everything is fine, logic continues here...
}
catch( Exception $e ) {
    $message = $e->getMessage();

    die( $message );
}

?>

在第一個throw語句處,程序自動跳轉到下一個catch語句。 在這種情況下,您將引發Exception ,並且當我們捕獲它們時,將顯示第一個錯誤(而不是累積所有錯誤)。

正如每個人都為顯示消息die ,我也這樣做,但是如果願意,您可以返回一個不錯的HTML錯誤。

當您再次閱讀代碼時,異常使開發人員更好地理解這些條件失敗實際上是異常,並且代碼應停止。 當我們僅if else語句中進行設置時,很難理解它。 這就是例外的優點之一。

但是,異常的功能要強大得多,它們可以使您輕松知道拋出異常的行,在哪個文件中,還可以提供錯誤代碼以使其更加可靠,...

你為什么不嘗試else if

if (empty($firstname)){
    $message="Please enter first name";
}
else if (empty($password)){
    $message="Please enter password";
}
else if (empty($confirm_password)){
    $message="Please confirm password";
}

在這樣的代碼中,如果滿足第一個條件,則它將跳過其余條件進行檢查。

您也可以嘗試這樣的事情

$error = 0; 
if (empty($firstname)) {
    $error = 1;
    $message = "Please enter first name";
}
if (empty($password)) {
    $error = 1;
    $message = "Please enter password";
}
if (empty($confirm_password)) {
    $error = 1;
    $message = "Please confirm password";
}

if($error === 0){
     // Do whatever you wanna
     $message = "Successful message";
}

您需要添加

die()

返回每個消息之后。 粘貼整個代碼可以幫助我找到更好的答案。

我建議關注...

function doSomething($message) {

    echo $message;

    exit();
}

if (empty($firstname)){
    $message="Please enter first name";
    doSomething($message);
}
if (empty($password)){
    $message="Please enter password";
    doSomething($message);
}
if (empty($confirm_password)){
    $message="Please confirm password";
    doSomething($message);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM