2011-07-13 34 views
0

嗨,我是做學習PHP的一個小項目,我寫了幾個功能:PHP插入到數據庫的連接檢查錯誤

在這一段代碼,我基本上查一下我的表單中的所有字段和如果它們被填充,則將散列中的值從false更改爲true,最後,I循環散列,並將該鍵(這是錯誤)添加到數組(如果其值爲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;} 

    } 

在這裏,我將字段添加到數據庫,它調用以前的函數來檢查是否所有字段填寫。

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. 我所說的最後一個函數babysitteForm其顯示了表格申請
  2. BabysitterForm包括babySitterToevoegenAanDB功能,它檢查提交設置
  3. 果真如此的話檢查所有的字段,如果有錯誤,它必須返回一個錯誤的數組

但是,如果我單擊提交而不填充任何內容,則沒有任何內容添加到errorArray。

+0

請濃縮您的代碼。沒有人會閱讀幾百行無格式的東西。 –

+0

如果我知道更短的寫法,我會添加一些文檔,但是如果您知道檢查表單的所有字段的簡短方法,請啓發我,因爲這會爲我節省大量編碼工作:) –

+0

您真的需要使用一個表單庫和一個體面的ORM。 – peufeu

回答

2

正常情況下,沒有任何東西會被添加到您的錯誤數組中。 函數isset($ _ POST ['anything'])只會檢查該字段是否在您的帖子var中設置。

帖子var被你的表單填滿。

基本上,如果您的表單中包含7個輸入字段,所有這些輸入字段的值將被放入 $ _POST。

您的$ _POST變種的打印會是這樣的:

print_r($_POST); 

結果:

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

所以你isset功能檢查值 'element_x' 設置,至極它是它只是沒有包含任何內容。

你需要重新寫你的支票,以便他們檢查內容,而不是存在。 Isset只在檢查f.e時使用 。 $ _GET 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頁面,而不是這個。

則u會得到這樣的代碼:

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

,最後提示:給你的輸入字段明確的名字,而不僅僅是element_x ...。