2015-12-09 7 views
0

Я простую регистрацию с php & mysql и все выглядит отлично, но я не знаю, почему ничего не вставляется в базу данных & возникает ошибка. Вот мой полный код:Невозможно зарегистрировать нового пользователя через форму php

<?php 
if (isset($_POST['submit'])){ 
    if(isset($_POST['agreement'])=="checked"){ 
     $username = $_POST['username']; 
     $email = $_POST['email']; 
     $gender = $_POST['gender']; 
     $password = $_POST['password']; 
     $password2 = $_POST['password2']; 
     $select = $_POST['slct1']; 

     if(!empty($username)){ 
      if(strlen($username)>5){ 
       $query = $con->query("SELECT * FROM admins WHERE username='$username'"); 
       if(mysqli_num_rows($query) > 0){ 
        echo "<p class='error'><code>&nbsp;&nbsp; The username that you have entered has been already registered!</code></p></br>"; 
       }else{ 
        if(!empty($email)){ 
         if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 
          $query2 = $con->query("SELECT * FROM admins WHERE email='$email'"); 
          if(mysqli_num_rows($query2) > 0){ 
           echo "<p class='error'><code>&nbsp;&nbsp; The email that you have entered has been already added!</code></p></br>"; 
          }else{ 
           if(!empty($password)){ 
            if (strlen($password)>10){ 
             if ($password==$password2){ 
              $register = "INSERT INTO admins username='$username',email='$email',gender='$gender',password='$password',adminlevel='$select'"; 
              $register = mysqli_query($con, $register); 
              if ($register){ 
               echo "<p class='success'><code>&nbsp;&nbsp; The admin registered successfully. He/she can now login to sitebook...</code></p></br>"; 
              }else{ 
               echo "<p class='error'><code>&nbsp;&nbsp; An error occured. Try again later!</code></p></br>"; 
              } 
             }else{ 
              echo "<p class='error'><code>&nbsp;&nbsp; Passwords do not match. Try again please!</code></p></br>"; 
             } 
            }else{ 
             echo "<p class='error'><code>&nbsp;&nbsp; The password should be more than 10 characters!</code></p></br>"; 
            } 
           }else{ 
            echo "<p class='error'><code>&nbsp;&nbsp; Don't forget to fill password field!</code></p></br>"; 
           } 
          } 
         }else{ 
          echo "<p class='error'><code>&nbsp;&nbsp; The email you have entered is not a valid one!</code></p></br>"; 
         } 
        }else{ 
         echo "<p class='error'><code>&nbsp;&nbsp; Don't forget to fill email field!</code></p></br>"; 
        } 
       } 
      }else{  
       echo "<p class='error'><code>&nbsp;&nbsp; Your username must be more than 5 characters!</code></p></br>"; 
      } 
     }else{ 
      echo "<p class='error'><code>&nbsp;&nbsp; Don't forget to fill username field!</code></p></br>"; 
     } 
    }else{ 
     echo "<p class='error'><code>&nbsp;&nbsp; You need to check the agreement in order to continue!</code></p></br>"; 
    } 
} 
?> 
<!-- START OF DEFAULT WIZARD --> 
       <h4 class="subtitle2">Fill The Form Completely</h4> 
        <form class="stdform" method="POST" action=""> 
        <div id="wizard" class="wizard"> 
         <br /> 
         <ul class="hormenu"> 
          <li> 
           <a href="#wiz1step1"> 
            <span class="h2">Step 1</span> 
            <span class="label">Basic Information</span> 
           </a> 
          </li> 
          <li> 
           <a href="#wiz1step2"> 
            <span class="h2">Step 2</span> 
            <span class="label">Account Information</span> 
           </a> 
          </li> 
          <li> 
           <a href="#wiz1step3"> 
            <span class="h2">Step 3</span> 
            <span class="label">Terms of Agreement</span> 
           </a> 
          </li> 
         </ul> 

         <div id="wiz1step1" class="formwiz" > 
          <h4 class="widgettitle">Step 1: Basic Information</h4> 

           <p > 
            <div class="par"> 
             <label style="text-align:left;">Username</label> 
             <div class="input-prepend"> 
              <span class="add-on">@</span> 
              <input name="username" type="text" placeholder="Username" id="prependedInput" class="span2" /> 
             </div> 
            </div> 
           </p> 

           <p> 
            <label style="text-align:left;">Email</label> 
            <span class="field"> 
             <input type="email" name="email" id="email" class="input-xxlarge" required/> 
            </span> 
           </p> 

           <p> 
            <label style="text-align:left;">Gender</label> 
            <span class="field"> 
             <select name="gender" id="selection" class="uniformselect"> 
              <option value="1">Male</option> 
              <option value="2">Female</option> 
             </select> 
            </span> 
           </p> 

           <p> 
            <label style="text-align:left;">Temorary Password</label> 
            <span class="field"> 
             <input type="password" name="password" id="password" class="input-xxlarge" required/> 
            </span> 
           </p> 

           <p> 
            <label style="text-align:left;">Confirm Password</label> 
            <span class="field"> 
             <input type="password" name="password2" id="password" class="input-xxlarge" required/> 
            </span> 
           </p> 



         </div><!--#wiz1step1--> 

         <div id="wiz1step2" class="formwiz"> 
          <h4 class="widgettitle">Step 2: Account Information</h4> 

           <p> 
            <label style="text-align:left;">Which Kind Of These Types Your Admin Is:</label> 
            <span class="field"> 
            <select id="slct1" name="slct1" onchange="populate(this.id,'slct2')" class="uniformselect" required> 
             <option value=""></option> 
             <option value="Adminstrator">Adminstrator</option> 
             <option value="ContentC">Content Creator</option> 
             <option value="Analyst">Analyst</option> 
            </select> 
            </span> 
           </p> 

           <p> 
           <label style="text-align:left;">Then Your Admin Can Be Able To:</label> 
           <span class="field"> 
           <select style="max-width:90%;" disabled="disabled" id="slct2" name="slct2"></select> 
           </span> 
           </p> 

         </div><!--#wiz1step2--> 

         <div id="wiz1step3"> 
          <h4 class="widgettitle">Step 3: Careful</h4> 
          <div class="par terms" style="padding: 0 20px;font-size:17px;"> 
           <p>You can change the admin type later on in <i>all admins</i> section settings.</p> 
           <p><strong>Sitebook</strong> is not responsible for what your admins post on the site. This is on your risk so please take care of your site yourself! </p> 
           <p>Thanks...</p> 
           <p><input name="agreement" value="checked" type="checkbox" /> I agree with this</p> 
          </div> 
         </div><!--#wiz1step3--> 

        </div><!--#wizard--> 
        <button type="reset" class="btn">Reset Button</button> 
        <button name="submit" type="submit" class="btn btn-primary">Add Admin</button> 
        </form> 
        <!-- END OF DEFAULT WIZARD --> 

Когда я пытаюсь отправить форму с правильной информацией, никаких ошибок PHP не приходит и только одно сообщение об ошибке, которое является An error occured. Try again later! появляется (что я писал в строке 31)

Там может быть проблема, что данные не могут быть вставлены, но я этого не понимаю!

Это также мой админ инструкция таблица:

username varchar(16) 
email varchar(255) 
password varchar(255) 
gender varchar(11) 
adminlevel varchar(11) 

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

Примечание: Я пропустил писать, как я подключите мою базу данных, потому что это уже хорошо!

+2

Вы уязвимы для [SQL-инъекций] (http://bobby-tables.com), а вместо фиксированных (бесполезных) сообщений «проблема возникла», используйте DB ** TELL **, почему запросов не удалось: 'mysqli_error ($ con)' –

+2

Для работы с защитой паролем воспользуйтесь встроенными функциями PHP (http://jayblanchard.net/proper_password_hashing_with_PHP.html). Если вы используете версию PHP менее 5.5, вы можете использовать 'password_hash()' [пакет совместимости] (https://github.com/ircmaxell/password_compat). –

+5

12 уровней вложенных операторов 'if' - это боль для отладки. Попробуйте уменьшить количество уровней, и будет легче отладить ваш код. –

ответ

1

1) вам необходимо использовать подготовленные заявления или иным образом защитить ваш пользовательский ввод перед его вставкой.

2) причина ошибки заключается в том, что ваш SQL недействителен. Измените его на следующее:

"INSERT INTO admins (username,email,gender,password,adminlevel) VALUES ('$username','$email','$gender','$password','$select')"; 
+0

и что именно вы здесь сделали/изменили? это, для будущих посетителей –

0

Проблема заключается в Добавленном запросе

INSERT INTO admins username='$username',email='$email',gender='$gender',password='$password',adminlevel='$select'"; 

Попробуйте

INSERT INTO admins (username, email, gender, password, adminlevel) VALUES ('$username', '$email', '$gender', '$password', '$select'); 

Если вы разрабатываете это в частной, безопасной среде разработки, вы можете отлаживайте ошибки MySQL, используя что-то в соответствии с:

if (!mysqli_query($con,"INSERT INTO admins (username, email, gender, password, adminlevel) VALUES ('$username', '$email', '$gender', '$password', '$select')")) 
{ 
    echo("Error description: " . mysqli_error($con)); 
} 

Для получения дополнительной информации о синтаксисе инструкций INSERT и PHP mysqli_error() Function см. В разделе MySQL INSERT Statement.

На несвязанной ноте очень опасно писать неподготовленные утверждения, такие как запросы SELECT и INSERT выше. Они очень открыты для SQL injection exploits. Я бы посоветовал посмотреть на prepared statements, чтобы убедиться, что ваш сайт не взломан!

0
INSERT INTO admins SET username='$username',email='$email',gender='$gender',password='$password',adminlevel='$select' 

Использование SET. Тогда запрос будет в порядке.

+1

Запрос работает с 'VALUES'. Просто другой синтаксис. IMHO, «VALUES» менее затруднительно и легче читать, чем «SET». – War10ck

+0

Да, вы на 100% прав. Я никогда не использовал «INSERT INTO» с SET. Здесь просто указано, чего не хватает в его заявлении. Спасибо .... Кстати, другие отвечают, это звучит, используя INSERT INTO таким образом, неправильно! – CapeStar

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