2011-07-13 10 views
0

エンデータベースに挿入こんにちは、私はPHPを学習するための小規模なプロジェクトをやっている、と私はいくつかの機能を書いた:コードのこの部分ではPHPは、チェック・エラー

を、私は基本的に私のフォーム内のすべてのフィールドをチェックし、ハッシュの値をfalseからtrueに変更します。値が入力されると、最後にハッシュをループし、その値がfalseの場合はキー(エラー)を配列に追加します。

function testBabysitterForAllElements(){ 
     global $db; 
     $errorArray; 

     $naamarray["naam"]=false; 
     $naamarray["voornaam"]=false; 
     $naamarray["adres"]=false; 
     $naamarray["woonplaats"]=false; 
     $naamarray["postcode"]=false; 
     $naamarray["telefoonnummer"]=false; 
     $naamarray["geboortedatum"]=false; 
     $naamarray["adres"]=false; 
     $naamarray["wachtwoord"]=false; 
     $naamarray["email"]=false; 

     if(isset($_POST['element_1'])){ 
      $naamarray["naam"]=true;   
     } 

     if(isset($_POST['element_2'])){ 
      $naamarray["voornaam"]=true;   
     } 

     if(isset($_POST['element_3'])){ 
      $naamarray["adres"]=true;  
     } 

     if(isset($_POST['element_4'])){ 
      $naamarray["woonplaats"]=true;  
     } 


     if(isset($_POST['element_5'])){ 
      $naamarray["postcode"]=true;   
     } 

     if(isset($_POST['element_6'])){ 
      $naamarray["telefoonnummer"]=true;  
     } 

     if(isset($_POST['element_7'])){ 
      $naamarray["email"]=true;  
      connectToDB(); 
      $sql='SELECT inlognaam FROM kauffman.login WHERE inlognaam like \''.$_POST['element_7'].'\';'; 
      $rows=$db->queryRow($sql); 
      if($rows){ 
       array_push($errorArray,"email adres is reeds geregistreerd."); 
      } 
     } 


     if(isset($_POST['element_8_1']) && isset($_POST['element_8_2']) && isset($_POST['element_8_3'])){ 
      $naamarray["geboortedatum"]=true;  
     } 

     if(isset($_POST['element_10']) && isset($_POST['element_10_1'])){ 
      $naamarray['wachtwoord']=true; 
     } 


     foreach($naamarray as $key => $value){ 
       if($value == false){ 
        array_push($errorArray,$key); 
       } 
     } 

     if(!empty($errorArray)){return $errorArray;} 

    } 

ここで私はDBにフィールドを追加し、それはすべてのフィールドが記入されているかどうかを確認するために、以前の関数を呼び出します。

function babysitterToevoegenAanDB(){ 

    global $db; 
    if(isset($_POST['submit'])){ 

     $errorArray=testBabysitterForAllElements(); 
     echo $errorArray; 
    $succes=('succesvol toegevoegd'); 
     $result; 
     if(!empty($errorArray)){ 
      connectToDB(); 

      $sql = "INSERT into kauffman.login(inlognaam,functie,paswoord) VALUES ('".antiInjectie($_POST['element_7'])."','gezin','".pwHashGenerator(antiInjectie($_POST['element_10_1']))."');"; 
      $sql2 = 'SELECT serialKey from kauffman.login WHERE inlognaam='.antiInjectie($_POST['element_7']).';' ; 

      $result= $succes; 
     }else{ 
      $result= $errorArray; 
     } 
     echo $result; 
    } 
} 

ここで私はまたbabysitterToevoegenAanDB()機能を持っている私のフォームを作成します。これとフォームは返され、ページ上で呼び出すことができます。基本的に何が起こる

function babysitterForm(){ 
    return babysitterToevoegenAanDB().'  <form id="babysitForm" class="appnitro" method="post" action="'.htmlentities($_SERVER['PHP_SELF']).'"> 
        <div class="form_description"> 
      <h2>Babysitter</h2> 
      <p>Gelieve je hier in te schrijven als babysitter</p> 
     </div>      
      <ul > 

        <li id="li_1" > 
     <label class="description" for="element_1">Naam </label> 
     <div> 
       <input id="element_1" name="element_1" class="element text medium" type="text" maxlength="255" value="'. 
    ((isset($_POST['element_1']))? htmlentities($_POST['element_1']):'') 
    . '"/> 
     </div><p class="guidelines" id="guide_1"><small>Voer uw naam in.</small></p> 
     </li>  <li id="li_2" > 
     <label class="description" for="element_2">Voornaam </label> 
     <div> 
      <input id="element_2" name="element_2" class="element text medium" type="text" maxlength="255" value="'.((isset($_POST['element_2']))? htmlentities($_POST['element_2']):'').'"/> 
     </div><p class="guidelines" id="guide_2"><small>Vul uw voornaam in.</small></p> 
     </li>  <li id="li_3" > 
     <label class="description" for="element_3">Adres </label> 
     <div> 
      <input id="element_3" name="element_3" class="element text medium" type="text" maxlength="255" value="'.((isset($_POST['element_3']))? htmlentities($_POST['element_3']):'').'"/> 
     </div><p class="guidelines" id="guide_3"><small>vul uw straat en huisnummer in.</small></p> 
     </li>  <li id="li_4" > 
     <label class="description" for="element_4">Woonplaats </label> 
     <div> 
      <input id="element_4" name="element_4" class="element text medium" type="text" maxlength="255" value="'.((isset($_POST['element_4']))? htmlentities($_POST['element_4']):'').'"/> 
     </div><p class="guidelines" id="guide_4"><small>vul uw woonplaats in.</small></p> 
     </li>  <li id="li_5" > 
     <label class="description" for="element_5">Postcode </label> 
     <div> 
      <input id="element_5" name="element_5" class="element text small" type="text" maxlength="255" value="'.((isset($_POST['element_5']))? htmlentities($_POST['element_5']):'').'"/> 
     </div><p class="guidelines" id="guide_5"><small>Vul uw Postcode hier in</small></p> 
     </li>  <li id="li_6" > 
     <label class="description" for="element_6">telefoonnummer </label> 
     <div> 
      <input id="element_6" name="element_6" class="element text medium" type="text" maxlength="255" value="'.((isset($_POST['element_6']))? htmlentities($_POST['element_6']):'').'"/> 
     </div><p class="guidelines" id="guide_6"><small>Vul uw telefoonnummer in.</small></p> 
     </li>  <li id="li_7" > 
     <label class="description" for="element_7">email </label> 
     <div> 
      <input id="element_7" name="element_7" class="element text medium" type="text" maxlength="255" value="'.((isset($_POST['element_7']))? htmlentities($_POST['element_7']):'').'"/> 
     </div><p class="guidelines" id="guide_7"><small>vul uw email in.</small></p> 
     </li>  <li id="li_8" > 
     <label class="description" >Geboortedatum </label> 
     <span> 
      <input id="element_8_1" name="element_8_1" class="element text" size="2" maxlength="2" value="'.((isset($_POST['element_8_1']))? htmlentities($_POST['element_8_1']):'').'" type="text">/
      <label for="element_8_1">MM</label> 
     </span> 
     <span> 
      <input id="element_8_2" name="element_8_2" class="element text" size="2" maxlength="2" value="'.((isset($_POST['element_8_2']))? htmlentities($_POST['element_8_2']):'').'" type="text">/
      <label for="element_8_2">DD</label> 
     </span> 
     <span> 
      <input id="element_8_3" name="element_8_3" class="element text" size="4" maxlength="4" value="'.((isset($_POST['element_8_3']))? htmlentities($_POST['element_8_3']):'').'" type="text"> 
      <label for="element_8_3">YYYY</label> 
     </span> 

     <li id="li_10" > 
     <label class="description" for="element_10">Wachtwoord </label> 
     <div> 
      <input id="element_10" name="element_10" class="element text medium" type="text" maxlength="255" value="'.((isset($_POST['element_10']))? htmlentities($_POST['element_10']):'').'"/> 
      <input id="element_10_1" name="element_10_1" class="element text medium" type="text" maxlength="255" value="'.((isset($_POST['element_10_1']))? htmlentities($_POST['element_10_1']):'').'"/> 
     </div><p class="guidelines" id="guide_10"><small>Vul uw wachtwoord twee maal in. Hierdoor voorkomt men typfouten door validatie.</small></p> 
     </li>  



      <li id="li_9" > 
     <label class="description" for="element_9">Opmerkingen </label> 
     <div> 
      <textarea id="element_9" name="element_9" class="element textarea medium" ></textarea> 
     </div> 
     </li> 

        <li class="buttons"> 
       <input type="hidden" name="form_id" value="206335" /> 

       <input id="saveForm" class="button_text" type="submit" name="submit" value="Submit" /> 
     </li> 
      </ul> 
     </form> '; 
} 

は次のとおりです。

  1. は私が
  2. BabysitterFormはそれをした場合
  3. に設定されている提出するかどうかを確認するbabySitterToevoegenAanDB機能を備えて適用するフォームを示し、最後の関数babysitteFormを呼び出しますエラーのある配列がエラーの場合はすべてのフィールドをチェックします。

しかし、私がanyhtingを埋めることなくsubmitをクリックすると、errorArrayに何も追加されません。

+0

コードを圧縮してください。誰もが数百のフォーマットされていないものを読んでいる。 –

+0

私はそれを短く書く方法を知っていたら、いくつかのドキュメントを追加しましたが、フォームのすべてのフィールドをチェックする短い方法を知っていれば、多くのコーディング作業を節約できるので、私に教えてください:) –

+0

フォームライブラリと適切なORMを使用する必要があります。 – peufeu

答えて

2

エラー配列に何も追加されないというのは普通です。 関数isset($ _ POST ['anything'])は、そのフィールドがpost varに設定されているかどうかだけをチェックします。

ポストvarはフォームによって埋められます。

基本的に、フォームに7つの入力フィールドがある場合、これらの入力フィールドはすべて値が $ _POSTに配置されます。

print_r($_POST); 

結果:

あなたの$ _POSTのVARの印刷は次のようなものになるだろう

array('element_1'=>'','element_2'=>'' ... 

ので、あなたのISSET関数は、値 'element_x' が設定されている場合、それをWICHチェックしますです、それはただ何も含んでいません。

あなたのチェックがコンテンツをチェックするように書き直す必要があります。存在を確認する必要はありません。 fsetをチェックするときにIssetが使用されるのは です。 $ _GET varsは、それらが設定されているかどうかわからず、フォームにvarsを投稿しない(これらは常に設定されるため)。

私はの形で再書き込みあなたのチェックをお勧めします:

 $naamarray["naam"]=true; 
    $naamarray["voornaam"]=true; 
    $naamarray["adres"]=true; 
    $naamarray["woonplaats"]=true; 
    $naamarray["postcode"]=true; 
    $naamarray["telefoonnummer"]=true; 
    $naamarray["geboortedatum"]=true; 
    $naamarray["adres"]=true; 
    $naamarray["wachtwoord"]=true; 
    $naamarray["email"]=true; 


    if($_POST['element_1'] == ""){ 
      $naamarray["naam"]=false;   
    } 

すべてのあなたのチェックのためにこれを行います。 はまたあなたのforeachループを逆:

foreach($naamarray as $key => $value){ 
      if($value == true){ 
       array_push($errorArray,$key); 
      } 
    } 

私はまた、フォームの前に機能の返却といくつかの疑問を持っています。私はその明確な 関数を作成し、ちょうどこれの代わりにPHPページを含めると思います。 ...あなたの入力フィールドを与える明確な名前を、だけでなくelement_x:

require_once('inc/functions.php'); 
if ($_SERVER['REQUEST_METHOD'] == "POST") { 
    babysitterToevoegenAanDB(); 
} else { 
    babysitterForm(); 
} 

そして最後のヒント:

その後、uがのようなコードになるだろう。

関連する問題