PHP вставить в базу данных и проверить ошибки - PullRequest
0 голосов
/ 13 июля 2011

Привет, я делаю небольшой проект для изучения 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;}

    }

Здесь я добавляюПоля в БД, он вызывает предыдущую функцию, чтобы проверить, все ли поля заполнены.

    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, которая проверяет, задано ли значение submit
  3. Если это так, она проверяет все поля, если есть ошибки, она должна возвращать массив с ошибками

Однако, если я нажму "отправить", не заполнив ничего, в errorArray ничего не добавится.

1 Ответ

2 голосов
/ 14 июля 2011

Это нормально, что в ваш массив ошибок ничего не добавляется.Функция isset ($ _ POST ['что-нибудь']) будет только проверять, установлено ли это поле в вашем посте var.

Сообщение var заполняется вашей формой.

Обычно, если ваша форма содержит 7 полей ввода, все эти поля ввода будут помещены в $ _POST.

Печать вашей переменной $ _POST будет выглядеть примерно так:

print_r($_POST);

result:

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

, поэтому ваша функция isset проверит, имеет ли значение element_xустановлен, он просто ничего не содержит.

вам нужно переписать ваши чеки, чтобы они проверяли содержимое, а не существование.Isset используется только при проверке fe $ _GET переменных, если вы не уверены, что они установлены, и не публикуете переменные в форме (так как они всегда будут установлены).

Я бы предложил переписать ваши чеки в виде:

     $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 вместо этого.

тогда вы получите код наподобие:

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

И последний совет: дайте вашему полю ввода ясные имена, а не просто element_x ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...