2016-11-05 75 views
0

我希望在任何输入之前首先说“请填写下面的表单”,但之后如果输入了年龄但是没有名字,我想说: “请输入一个名称:” ,如果他们输入一个名称,但没有年龄,然后: “请输入您的年龄:” 但如果他们什么都没有提交: “错误:请输入您的姓名和年龄,继续”

这里是我的代码:

if($_GET["name"] && $_GET["age"]) { 
    echo "<p>Welcome ". $_GET['name']. " ... "; 
    echo "You are ". $_GET['age']. " years old.</p>"; 

    exit(); 
    } elseif ($_GET["name"] == FALSE) { 
     echo "<p>Please fill in the form below:</p>"; 
    } elseif ($_GET["age"] == FALSE) { 
     echo "<p>Please fill in the form below:</p>"; 
    } elseif ($_GET["name"] == FALSE && $_GET["age"]) { 
     echo "<p>Please fill in your name:</p>"; 
    } elseif ($_GET["age"] == FALSE && $_GET["name"]) { 
     echo "<p>Please fill in your age:</p>"; 
    } 

我只是学习PHP,我试过了我能想到的所有东西,这就是我迄今为止所做的一切!

谢谢。

+4

提交表单确实应该使用'$ _POST'方法 – Martin

+0

这可以在一行中使用'||'(OR)语句完成。 –

+2

考虑使用客户端表单验证。 https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms_in_HTML#Constraint_Validation它现在已经标准化了,并且对于尚不支持它的浏览器有很好的填充。你仍然需要验证服务器端的数据完整性(因为不可能阻止人们劫持你的表单发送任何他们想要的内容),但是如果数据是意外的,你可以简单地抛出一个错误,而不是处理所有的工作需要做一个友好的形式。 – Brad

回答

1

更换FALSEempty()和你几乎没有

您的形式:

<form method='post' ... > 
<input type='text' name='name' value=''> 
... 
</form> 

那么你的PHP:

if($_POST["name"] ...) { 
    ... 
    exit; 
} 
elseif (empty($_POST["name"])) { 
     echo "<p>Please fill in the form below:</p>"; 
    } elseif (empty($_POST['age'] || !is_numeric($_POST["age"])) { 
     echo "<p>Please fill in the form below:</p>"; 
    } elseif (empty($_POST['name'] && !empty($_POST['age']) { 
     echo "<p>Please fill in your name:</p>"; 
    } elseif ( !empty($_POST['name'] && empty($_POST['age']) { 
     echo "<p>Please fill in your age:</p>"; 
    } 

你真的应该调整你的逻辑,这样你的两个值独立

  • 检查名称是否填写
  • 检查是否填写了年龄
  • 返回用户的回声。

所以上面的一系列elseif语句可以成为...

if(empty($_POST['name'])){ 
    $notice .= " Please enter your name."; 
} 
if(empty($_POST['age'])){ 
    $notice .= " Please Enter your age." 
} 
print $notice. 

.=串接到变量的当前(或空)值的末尾的新定义。您可以每次打印$notice,因为它不是空的(没有打印),或者它有一个值,这是您想要打印的值,所以每次都赢得胜利。

+0

这可以进一步浓缩,但像这样留下来说明这个想法... – Martin

+0

哇太棒了答案谢谢so.much – Joe

相关问题