2016-03-06 11 views
0

Если все входы заполнены, все работает нормально. Но если я проверил только флажок, форма позвольте мне зарегистрироваться, независимо от того, что я не заполнял все входные данные. Кроме того, если добавить var_dump в нижней части страницы (если только флажок) он говорит: «булево ложь» Пожалуйста, помогите ...Форма не работает должным образом

<?php 

    $page_title = 'Registracija'; // Definiše title i h1 

    $folder = 'registration-db'; 

    if (!file_exists($folder)) { 

     mkdir($folder, 0777, true);`enter code here` 

    } 

    $fajl = $folder . '/registrovani_korisnici.txt'; 

    // Citanje podataka 
    if (file_exists($fajl)) { 
     $podaci = file_get_contents($fajl); 

     $registracija = explode("\n", rtrim($podaci)); //Vracanje података iz baze 
    } 



    $errors = false; 




    //Obrada forme i provera podataka 

    if (!empty($_POST)) { //ako nije prazna promenljiva 


     //Provera da li su podaci unešeni 


     if (empty($_POST['user_name'])) { //radi 
      $errors[] = 'Niste upisali ime i prezime!<br>'; 
     } 
     if (empty($_POST['user_email'])) { //radi 
      $errors[] = 'Niste uneli E-mail!<br>'; 
     } 
     if (filter_var($_POST['user_email'], FILTER_VALIDATE_EMAIL) === false) {// Izbacio !empty($_POST['user_email']) && 
      $errors[] = 'Nije validna email adresa!<br>'; 
     } 
     if (empty($_POST['user_password'])) { //radi 
      $errors[] = 'Niste uneli lozinku!<br>'; 
     } 
     if (strlen($_POST[]) <= 5) { //radi 
      $errors[] = 'Lozinka mora da ima više od 5 karaktera!<br>'; 
     } 
     if (empty($_POST['user_password2'])) { //radi 
      $errors[] = 'Niste potvrdili lozinku!<br>'; 
     } 

     if ($_POST['user_password'] !== $_POST['user_password2']) { 
      $errors[] = 'Lozinka mora da bude ista u oba pokušaja!'; 
     } 
     if (empty($_POST['day']) || empty($_POST['month']) || empty($_POST['year'])) { //radi 
      $errors[] = 'Niste uneli ispravan datum!<br>'; 
     } 
     if (empty($_POST['check'])) { //radi 
      $errors[] = 'Niste prihvatili uslove korišćenja!<br>'; 
     } 

     /*if (date('Y') - $_POST['year'] < 15) { 
      $errors[] = 'Nemate dovoljno godina, da biste se registrovali!<br>'; 
     }*/ //Problem kada se ne definiše vrednost $_POST['year']!!!!! 

     else { 
      // Data forwarding 
      extract($_POST); 

      // Name 

      // Skidanje tagova - Zbog bezbednosti!!! 
      $user_name = strip_tags($user_name); 
      //Pretvaranje u mala slova 
      $user_name = strtolower($user_name); 
      //Pretvaranje prvih slova u velika (Ime Prezime) 
      $user_name = ucwords($user_name); 


      // Čišćenje Email-a 
      $user_email = strip_tags($user_email); 


      //Čišćenje Lozinke 
      $user_password = strip_tags($user_password); 

      //Čišćenje Lozinke2 
      $user_password2 = strip_tags($user_password2); 

      /*html_entity_decode(); 
      htmlentities();*/ 


      $podaci .= $user_name . '#!$!#' . $user_email . '#!$!#' . $user_password . '#!$!#' . $user_password2 . '#!$!#' . $day . '.' . $month . '.' . $year . '#!$!#' . PHP_EOL; 

      //Zapisivanje u fajl 
      file_put_contents($fajl, $podaci); 


      header('Location: registracija.php?sent=1'); 
     } 


    } 

    ?> 



    <?php include 'inc/header.php'; //include header?> 

    <!-- Prikazivanje greške--> 

    <?php if ($errors !== false) : ?> 

     <p>GREŠKA: </p> 

     <?php foreach ($errors as $error) : ?> 

      <p><?php echo $error; ?></p> 

     <?php endforeach; ?> 

    <?php endif; ?> 


    <?php if (isset($_GET['sent']) && $_GET['sent'] == 1): ?> 
     <h2>Uspešno ste registrovani! Hvala.</h2> 

    <?php else : ?> 


     <!-- Form --> 
     <form action="" method="post"> 

      <p> 
       <input type="text" name="user_name" placeholder="Ime i prezime"> 
      </p> 

      <p> 
       <input type="email" name="user_email" placeholder="E-mail"> 
      </p> 

      <p> 
       <input type="password" name="user_password" placeholder="Lozinka"> 
      </p> 

      <p> 
       <input type="password" name="user_password2" placeholder="Ponovite lozinku"> 
      </p> 

      <h2>Datum rodjenja</h2> 

      <select name="day"> 

       <option selected disabled>Dan</option> 
       <?php for ($i = 1; $i <= 31; $i++) : ?> 
        <option> <?php echo $i; ?> </option> 
       <?php endfor; ?> 

      </select> 

      <select name="month"> 

       <option selected disabled>Mesec</option> 
       <?php for ($i = 1; $i <= 12; $i++) : ?> 
        <option> <?php echo $i; ?> </option> 
       <?php endfor; ?> 

      </select> 

      <select name="year"> 

       <option selected disabled>Godina</option> 
       <?php 
       $start = date("Y"); 
       $end = date("Y") - 100; 
       ?> 
       <?php for ($i = $start; $i >= $end; $i--) : ?> 
        <option> <?php echo $i; ?> </option> 
       <?php endfor; ?> 
      </select> 
      <br> 
      <br> 
      <input type="checkbox" name="check"> Prihvatam uslove korišćenja 

      <p> 
       <button>Registrujte se</button> 
      </p> 
     </form> 

    <?php endif; ?> 

    <!-- Form END --> 
    <?php include 'inc/footer.php'; //include footer?> 
+0

Вы установили значение флажка? –

+0

Нет. Что это должно быть? В этом случае? – denic

+0

Я пробовал без флажка. Проблема в том, что если последнее утверждение if ложно, форма позволяет вам пройти. – denic

ответ

0

Это небольшая логическая ошибка. Ваш блок else связан только с вашим последним блоком if. В результате else будет введен, если последний блок if не выполнен.

Если $_POST['check'] is not empty that is if the condition inside the last, если block` возвращает false, тогда будет введено другое, и регистрация будет завершена.

Что вы можете сделать, чтобы обойти это?

Использовать флаг. Объявите переменную как $c=1;. Мы изменим значение этой переменной на 0, если вводится if block.

$c=1; 
    if (empty($_POST['user_name'])) { //radi 
    $errors[] = 'Niste upisali ime i prezime!<br>'; 
    $c=0; 
    } 
    if (empty($_POST['user_email'])) { //radi 
    $errors[] = 'Niste uneli E-mail!<br>'; 
    $c=0; 
    } 
    if (filter_var($_POST['user_email'], FILTER_VALIDATE_EMAIL) === false) {// Izbacio !empty($_POST['user_email']) && 
    $errors[] = 'Nije validna email adresa!<br>'; 
    $c=0; 
    } 
    if (empty($_POST['user_password'])) { //radi 
    $errors[] = 'Niste uneli lozinku!<br>'; 

    $c=0; 
    } 
    if (strlen($_POST[]) <= 5) { //radi 
    $errors[] = 'Lozinka mora da ima više od 5 karaktera!<br>'; 
    $c=0; 
    } 
    if (empty($_POST['user_password2'])) { //radi 
    $errors[] = 'Niste potvrdili lozinku!<br>'; 
    $c=0; 
    } 

    $if ($_POST['user_password'] !== $_POST['user_password2']) { 
    $errors[] = 'Lozinka mora da bude ista u oba pokušaja!'; 
    $c=0; 
    } 
    $if (empty($_POST['day']) || empty($_POST['month']) || empty($_POST['year'])) { //radi 
    $errors[] = 'Niste uneli ispravan datum!<br>'; 
    $c=0; 
    } 
    $if (empty($_POST['check'])) { //radi 
    $errors[] = 'Niste prihvatili uslove korišćenja!<br>'; 
    $c=0; 
    } 
    elseif ($c==1) 
    { 
    //CODE 
    } 

else if блок будет введен только если $c==1 верно.

Вы также можете использовать лестницу if-elseif-else.

OR: В каждом теге ввода вы можете использовать атрибут required, чтобы заставить пользователей заполнить это конкретное поле перед отправкой.

eg: 

     <input type="email" name="user_email" Placeholder="Email" required> 

Добавьте атрибут required в каждом входном теге, чтобы остановить форму от получения подается, если поле не вводится.

Например, в приведенном выше случае форма не будет отправлена, если идентификатор электронной почты не будет введен.

+0

Дело в том, чтобы использовать PHP для проверки формы. – denic

+0

Ну.Я просто отредактирую свой ответ. Но требуемый атрибут также будет полезен. –

+0

@Dena Если вы используете необходимый атрибут, форма не будет отправлена, если обязательное поле не заполнено. Это может быть ответом на ваш вопрос. Валидация происходит после отправки формы. При использовании запроса будет отображаться ошибка перед отправкой. Разве это не хорошая идея? –

1

Прежде всего, вы можете обратиться к операторам в цепочку if-else if-else. В вашей ситуации, если последнее, если инструкция возвращает false, ваши прежние проверки становятся недействительными.

if (empty($_POST['day'])) { 
    //Validation 
} 
else if (empty($_POST['year'])) { 
    //Validation 
} 
else if (empty($_POST['check'])) { 
    //Validation 
} 
// Other validations 
else { 

} 

Кроме того, вы должны добавить значение к вашему флажку, как это:

<input type="checkbox" name="check" value="1" /> 

Таким образом, если он установлен, он будет отправлять значение.

В текущей ситуации, даже если флажок установлен, вы не отправляете какое-либо значение, а ваш последний оператор if оценивает значение false.

EDIT:

Чтобы отобразить все отсутствующие поля сразу, вы просто изменить свое другое заявление в другой, если-иначе заявления, как это:

if (empty($_POST['user_name'])) { 
    $errors[] = 'Niste upisali ime i prezime!<br>'; 
} 
if (empty($_POST['check'])) { 
    $errors[] = 'Niste prihvatili uslove korišćenja!<br>'; 
} 
//Other validations 

if($errors) { 
    //Show errors 
} 
else{ 
    // Data forwarding 
    // Same as your former else statement 
} 
+0

Я пробовал даже без флажка. Он делает то же самое. Проблема в том, что последний оператор IF является ложным, форма позволяет вам пройти. Нет метра, если это флажок, или даже что-то еще ... – denic

+0

@Dena Вы уверены, что проблема в последнем случае if? Поскольку, если он оценивает значение false, невозможно выполнить оператор else. –

+0

@ Дена также, можете ли вы попытаться изменить вас последним, если это утверждение выглядит так? 'if (isset ($ _ POST ['check']))' –

Смежные вопросы