2015-05-08 4 views
1

Я пытаюсь создать рабочую регистрацию, однако у меня есть проблема. Проверки работают, но есть ошибка, даже если пользователь вводит правильную информацию, оператор INSERT не выполняется. Однако, когда оператор «elseif» удаляется, ошибка отражается на интерфейсе, но данные по-прежнему INSERTED, даже если в пользовательской форме есть ошибка; например, пароль имеет только буквы. Буду признателен, если кто-нибудь сможет исправить эту ошибку. Ниже приведена полная проверка. Благодаря Wasimинструкция if-else strlen не работает php

<?php include "connection2.php" ?> 
<?php 
session_start(); 
if (empty($errors)) { 
    if(isset($_POST['submitted'])) { 

     $firstname=$_POST['Firstname']; 
     $lastname=$_POST['Lastname']; 
     $username=$_POST['Username']; 
     $password= $_POST['Password']; 
     $email=$_POST['Email']; 


     if ($username&&$password&&$email) { 

      if (strlen($username)>10) { 
       echo "Username is too long (Max 10 Characters)"; 
      } 
      else {   

       //check password length 
       if (strlen($password)>15||strlen($password)<5) { 
        echo "Password must be 5 to 15 characters<br>"; 
       } 
       if (!preg_match("#[0-9]+#", $password)) { 
        echo "Password must include at least one number!<br>"; 
       } 
       if (!preg_match("#[a-zA-Z]+#", $password)) { 
        echo "Password must include at least one letter!<br>"; 
       } 

       elseif ((!strlen($username) >10) and 

         (!strlen($password)>15||!strlen($password)<5) and  
         (preg_match("#[0-9]+#", $password)) and 
         (preg_match("#[a-zA-Z]+#", $password))) { 


        $sql = mysql_query 
         ("INSERT INTO users(firstname, lastname,username, password, email)   

      VALUES ('$firstname','$lastname','$username', 

      '$password','$email')"); 

        md5($password); 
        //register the user! 

        echo "Your Are Now a Member"; 




       } 

      } 
     } 

     mysql_close(); 
    }} 
else { ?> 
    <?php } 
?> 
+2

Первое, что вам нужно сделать, это стандартизировать ваш отступы, чтобы сделать его более легким для чтения. – developerwjk

+0

Также прекратите использование mysql_ *. используйте mysqli_ * или PDO. –

+0

попробуйте, если это имя пользователя: '); DROP TABLE users: - – h3n

ответ

0

В PHP ElseIf и «еще, если» конструкции, возможно, потребуется больше брекеты, смотрите примечание на http://php.net/manual/en/control-structures.elseif.php

Additionaly проверка оператора старшинства. Используя ключевые слова 'и' и 'или', чтобы иметь тот же вес, что и использование '||' или '& &'. Я бы рекомендовал добавить дополнительные фигурные скобки и скобки, чтобы сделать условия еще более ясными.

+0

Thankyou @anant kumar singh. Все проверки полностью работают. :) –

0

Эй, я думаю, что ваша структура неверна.

<?php include "connection2.php" ?> 
<?php 
session_start(); 
    if (empty($errors)) { 
    if(isset($_POST['submitted'])) { 


    $firstname=$_POST['Firstname']; 
    $lastname=$_POST['Lastname']; 
    $username=$_POST['Username']; 
    $password= $_POST['Password']; 
    $email=$_POST['Email']; 


    if ($username&&$password&&$email) 
      { 

      if (strlen($username)>10) 
      { 
      echo "Username is too long (Max 10 Characters)"; 
      } 
      elseif(strlen($password)>15||strlen($password)<5) 
      {   
      echo "Password must be 5 to 15 characters<br>"; 
      } 
     elseif (!preg_match("#[0-9]+#", $password)) { 
      echo "Password must include at least one number!<br>"; 
     } 
     elseif (!preg_match("#[a-zA-Z]+#", $password)) { 
      echo "Password must include at least one letter!<br>"; 
     } 

      else ((!strlen($username) >10) and 

      (!strlen($password)>15||!strlen($password)<5) and  
      (preg_match("#[0-9]+#", $password)) and 
      (preg_match("#[a-zA-Z]+#", $password))) 
       { 


     $sql = mysql_query 
     ("INSERT INTO users(firstname, lastname,username, password, email)   

     VALUES ('$firstname','$lastname','$username', 

     '$password','$email')"); 

      md5($password); 
      //register the user! 

       echo "Your Are Now a Member"; 




     } 

     } 
     } 




     mysql_close(); 
      }} 
      else { ?> 
      <?php } 
       ?> 

Надеюсь, что это поможет. но я бы также сохранил каждую ошибку в массиве и отобразить в конце.

1

Ваш elseif прилагается только к последним if. И я не уверен, правильно ли вы вернули в него всю инвертированную логику. Но более простым решением является просто установить переменную, которая указывает, не прошла ли какая-либо проверка проверки, и протестируйте ее.

if ($username && $password && $email) { 

    if (strlen($username)>10) { 
     echo "Username is too long (Max 10 Characters)"; 
    } 
    else {   
     $error = false; 
     //check password length 
     if (strlen($password)>15||strlen($password)<5) { 
      echo "Password must be 5 to 15 characters<br>"; 
      $error = true; 
     } 
     if (!preg_match("#[0-9]+#", $password)) { 
      echo "Password must include at least one number!<br>"; 
      $error = true; 
     } 
     if (!preg_match("#[a-zA-Z]+#", $password)) { 
      echo "Password must include at least one letter!<br>"; 
      $error = true; 
     } 

     if (!$error) { 
      // insert new users 
     } 
    } 
} 
Смежные вопросы