2016-10-28 4 views
0

作成したこのフォームでは、フィールドが設定されていて空であるかどうかを確認します。 areSet()isset()とし、areEmpty()empty()としたクラスを作成しました。 areEmpty()メソッドでは、すべてのフィールドが空であれば "Empty"と表示されますが、すべてのフィールドがいっぱいになっても "Empty"と表示されます。それは私が使用したimplode()機能のためですか?私は自分のコードで間違っていることを指摘するために誰かの助けが必要です。すべてのフィールドが実際にはない場合でもphpは 'Empty'を表示します

HTML

<form action="validate.php" method="post"> 
    <input type="text" name="firstname" placeholder="First Name" autocomplete="off"><br> 
    <input type="text" name="lastname" placeholder="Last Name" autocomplete="off"><br> 
    <input type="text" name="email" placeholder="Email" autocomplete="off"><br> 
    <input type="text" name="username" placeholder="Username" autocomplete="off"><br> 
    <input type="password" name="password" placeholder="Password" autocomplete="off"><br> 
    <input type="password" name="passwordAgain" placeholder="Confirm password" autocomplete="off"><br> 
    <input type="submit" value="Submit"> 
</form> 

Validate.phpと

<?php 

require 'include/class.php'; 

if(Input::areSet('firstname','lastname','email','username','password','passwordAgain')) { 
    if(Input::areEmpty('firstname','lastname','email','username','password','passwordAgain')) { 
     echo 'Empty'; 
    } else { 
     echo 'Not empty'; 
    } 
} 

Class.phpと

<?php 

class Input { 
    // isset() 
    public static function areSet(...$fields) { 
     $setFieldsArray = []; 

     foreach($fields as $field) { 
      $setFieldsArray[] = $_POST[$field]; 
     } 

     return isset($setFieldsArray); 
    } 

    // empty() 
    public static function areEmpty(...$fields) { 
     $emptyFieldsArray = []; 

     foreach($fields as $field) { 
      $emptyFieldsArray[] = empty($_POST[$field]); 
     } 

     return implode(' || ', $emptyFieldsArray); 
    } 
} 
私はあなたが設定することで、そこにやっていることは考えている

enter image description here

答えて

1

配列を作成し、次に爆縮された配列を返す。しかし$fieldsてちょうどループ、関連する$_POST変数が空であるかどうかをチェックし、そうと最後falseであればどれもが空でない場合trueを返す:

public static function areEmpty(...$fields) { 

    foreach($fields as $field) { 
     if(empty($_POST[$field])) { 
      return true; // something was empty 
     } 
    } 
    return false; // none were empty 
} 

ので、あなたはループあなたは、同様areSet()に問題があるでしょう$fieldsの配列要素を設定し、配列要素を$setFieldsArrayに設定して空の場合はそれを返します。配列要素を作成するため、空ではありません。

+0

したがって、 'areSet()'メソッドは 'areEmpty()'と同じ機能を持たなければなりませんか? – JTrixx16

関連する問題