2017-09-03 93 views
0

努力编写PHP中应该是相当简单的if/else-type语句的代码。我们有一个冗长的网络表格,收集一个运动队的名单(名字,年级和每个青年球员的出生日期),然后将这些数据发送回联盟的专员进行存档以供将来参考。卡住PHP If语句

我把这个表格设置了一年多以前,它一直工作得很好。但是,我想稍微调整一下,以验证在执行脚本之前所有字段已经完成(在用户错误的情况下)。这里是我试图使工作的代码:

//Validate player 1: 
if (!empty($_POST['player1'])) { 
    $player1 = $_POST['player1']; 
    $player1_dob = $_POST['player1_dob']; 
    $player1_grade = $_POST['player1_grade']; 
} elseif (!empty($_POST['player1_dob'])) { 
    echo "You forgot to enter Player 1's date of birth.<br>"; 
    $validate = 'false'; 
} elseif (!empty($_POST['player1_grade'])) { 
    echo "You forgot to enter Player 1's grade.<br>"; 
    $validate = 'false'; 
} else { 
    $validate = 'true'; 
} 

这似乎是最合乎逻辑的方式(对我来说)编码的声明。但是,该脚本未按照预期验证出生日期和等级。显然,我错过了一个重要的概念,并且没有正确使用if/elseif。也许一位善良的用户可以帮助我指出正确的方向?

+2

'!空()''VS空()' – JAAulde

回答

3

empty!empty是它的一部分。但是,在你说“一切正常”之前,你还需要检查这些碎片。本质上翻转:

//Validate player 1: 
if (!empty($_POST['player1'])) { 
    if (empty($_POST['player1_dob'])) { 
     echo "You forgot to enter Player 1's date of birth.<br>"; 
     $validate = 'false'; 
    } elseif (empty($_POST['player1_grade'])) { 
     echo "You forgot to enter Player 1's grade.<br>"; 
     $validate = 'false'; 
    } else { 
     $player1 = $_POST['player1']; 
     $player1_dob = $_POST['player1_dob']; 
     $player1_grade = $_POST['player1_grade']; 
     $validate = 'true'; 
    } 
} 

它是不是从你的代码清楚自己想要做的,如果空(PLAYER1)什么 - 即验证失败或只是跳过整个部分,但任何一个可以很容易地处理。

+1

更改最后一个'};'到'}' – matiaslauriti

+1

@manassehkatz - 这真的帮了大忙,因为它向我展示了如何在if语句中正确嵌套if语句,这正是我一直需要做的。这是“aha”时刻。非常感谢! – 712Jefferson

1

我会完全重构你正在做的事情,但如果你想使它工作,你必须从elseif的统计表中删除!。你说的是if is not empty player 1 date of birth, error,所以在这里我想你想说的是if IS empty

+0

哎呀。你们是完全正确的。我是个白痴。谢谢你的新鲜眼睛。出于好奇,你通过“重构”引用了什么?再次感谢! – 712Jefferson

+1

实际上,它的意思是“重新制作它”。 – deg

+1

没问题。我在说,你这样做并不好,你说:如果player1的数据不是空的,我将保存所有的数据,如果是空的,我将分析每个数据。但是,如果player1_dob为空,但不是player1,那么您将保存一个空数据。 – matiaslauriti

1

可以使用也isset功能

$validate=true; 
if (!empty($_POST['player1'])) { 
    $player1 = $_POST['player1']; 
    $player1_dob = $_POST['player1_dob']; 
    $player1_grade = $_POST['player1_grade']; 
} 
if(!isset($player1_dob)) { 
    echo "You forgot to enter Player 1's date of birth.<br>"; 
    $validate = 'false'; 
} 
if (!isset($player1_grade)) { 
    echo "You forgot to enter Player 1's grade.<br>"; 
    $validate = 'false'; 
    } 
    if($validation) {.... }