2017-08-02 339 views
0

我正在开发一个使用PHP的应用程序。我有一个带有三个输入字段的HTML表单:用户名,密码和确认密码。 我想防止空输入。我有这个PHP代码:如何在IF语句中满足特定条件时停止执行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语句中,而且在整个PHP代码中),如果不是空的,那么它应该跳转到下一个在此情况下是密码的字段。

请帮我实现这一目标。

+0

使用'exit();'或'die();''(别名退出)。如果你想在页面上显示一条消息,你可以传递一个字符串作为参数。 – Kaddath

+0

在每个if条件中添加'return $ message'。这将打破,并会一次返回一条消息。 –

+0

您在问题中使用了正确的单词。 '退出;' – Andreas

回答

0

你也可能需要使用try catch语法,避免conditionnal陈述的锥体代码:

<?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错误,如果你想。

当您再次阅读代码,异常让developper更好地了解这些conditionnal失败是真正的例外与代码应该停止。当我们只设置if else报表时,不容易解除。例外的优点之一。

但例外的是更为强大,他们可以很容易地知道哪条线路引发的异常,在哪个文件,你也可以提供一个错误代码,使之更加可靠,...

+0

尽管没有错,但对于预期用途(和OP的级别)而言,这可能有点矫枉过正。 – Martijn

+0

我完全同意 –

-1

你需要添加

die() 

返回每个消息后, 粘贴整个代码可以帮助我给你一个更好的答案。

+0

不要用死!使用适当的逻辑来捕捉错误。没有特别好的理由,绝不会死在现场代码中。 – Martijn

0

你可以n使用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; 
} 
+0

至少在消息之间添加新行。 – Andreas

+0

我只是想让他显示一个基本的方式,因为他似乎是新的PHP。不管怎样,谢谢。 – Farsay

+0

如果你想做更多的花式,做一个数组,添加值。最后你用一个换行符来爆炸。这样你就可以轻松地改变它(说你现在想要 - 在每个点前) – Martijn

-1

我建议以下...

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

希望帮助。谢谢你的阅读。

+0

不要使用exit!使用适当的逻辑来捕捉错误。没有特殊的理由,切勿退出实时代码。 – Martijn

0

为什么不T优尝试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"; 
} 

在这样的代码,如果第一个条件满足,那么它会跳过的情况,以休息。

1

虽然最简单的解决方法,如上面所述,确实是只是调用exit()die()(实际上的exit()alias是),它也是最坏的解决方案。通过简单地杀死你的脚本,你可以防止僵尸启示录淹没地球和其他领域,但实际上没有一个良好的使用场外脚本的退出。作为大拇指的规则;如果您的代码中某处写入了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 an Exception,或引发自定义FormException(通过扩展Exception类)。但如果你不想这样做,请调用handleForm()这样的函数;

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