[英]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.