2016-07-19 5 views
-2

Я пытаюсь вставить данные в базу данных, но по какой-то причине код не работает. Вот форма, которую я использую.PHP PDO-Ошибка при вставке данных в базу данных

<form id="registration" method="post" action="index.php" style="display: none;"> 
       <label for="username" class="username"> 
        Username 
       </label>  
       <input type="text" name="r-username" id="r-username" placeholder="Username" required/> 
       <label for="password"> 
        Password 
       </label>  
       <input type="password" name="password" id="password" placeholder="Password" required/> 
       <label for="check_password" class="check_password"> 
        Password Check 
       </label>  
       <input type="password" name="check-password" id="check_password" placeholder="Password again" required/> 
       <label for="e-mail"> 
        E-mail 
       </label>  
       <input type="email" name="e-mail" id="e-mail" placeholder="E-mail" required/> 
       <label for="check-e-mail" class="check_email"> 
        E-mail Check 
       </label>  
       <input type="email" name="check-e-mail" id="check-e-mail" placeholder="E-mail again" required/> 
       <input type="submit" name="submit" class="submit" value="Register"/> 
      </form> 

А вот PHP код:

if(isset($_POST['r-username'])) 
       { 
        $name=$_POST['r-username']; 
        $pass=$_POST['password']; 
        $passcheck=$_POST['check-password']; 
        $mail=$_POST['e-mail']; 
        $mailcheck=$_POST['check-e-mail']; 
        if($name==''||$pass==''||$passcheck==''||$mail==''||$mailcheck=='') 
        { 
         echo "<script type='text/javascript'>alert('Field must be filled.');</script>"; 
        } 
        elseif(strlen($pass)<=6) 
        { 
         echo "<script type='text/javascript'>alert('Password is too short.');</script>"; 
        } 
        elseif(strlen($pass)>=20) 
        { 
         echo "<script type='text/javascript'>alert('Password is too long.');</script>"; 
        } 
        elseif($pass!==$passcheck) 
        { 
         echo "<script type='text/javascript'>alert('Passwords must be same.');</script>"; 
        } 
        elseif($mail!==$mailcheck) 
        { 
         echo "<script type='text/javascript'>alert('Emails must be same.');</script>"; 
        } 
        else 
        { 
         $sql5='INSERT INTO user(user_name,password,joined,user_email) VALUES(:username,:password,Now(),:email)'; 
         $query1=$db->prepare($sql5); 
         $result=$query1->execute(array(":username" => $name, 
                 ":password" => $pass, 
                 ":email" => $mail 
                )); 
         if($result) 
         { 
          echo "<script type='text/javascript'>alert('Inserted.');</script>"; 
         } 
         else 
         { 
          echo "<script type='text/javascript'>alert('ERROR.');</script>"; 
         } 
        } 
       } 

запускает код, но идентификатор это не распространяется на все. Он просто перезагружает страницу эхом сообщения ERROR и не вставляет никаких данных в базу данных. Извините за мой плохой английский и спасибо за возможные ответы :).

+0

https://secure.php.net/manual/en/pdo.error-handling.php –

+3

** Никогда не храните простые текстовые пароли! ** Пожалуйста, используйте встроенные функции PHP (http: // jayblanchard .net/proper_password_hashing_with_PHP.html) для защиты паролей. Если вы используете версию PHP менее 5.5, вы можете использовать 'password_hash()' [пакет совместимости] (https://github.com/ircmaxell/password_compat). Удостоверьтесь, что вы *** [не избегаете паролей] (http://stackoverflow.com/q/36628418/1011527) *** или используйте любой другой механизм очистки для них перед хэшированием. Выполнение этого * изменяет * пароль и вызывает ненужное дополнительное кодирование. –

+0

Разрешить пользователям использовать [пароли/фразы] (https://xkcd.com/936/), которые они желают. [Не ограничивайте пароли.] (Http://jayblanchard.net/security_fail_passwords.html) –

ответ

0

Вы должны использовать:

$sql5 = mysql_query("INSERT INTO `[database_name]`.`[table_name]` (user_name,password,joined,user_email) VALUES('$name','$pass','Date()','$mail');)"; 

А также вы должны получить переменные, используя этот тип кода, потому что люди могут ввести HTML-код внутри формы так, когда вы пытаетесь получить его будет выполнять, что code.But если вы используете этот метод, все html-теги, такие как <html> будут переведены. Вы можете увидеть больше на нем here. И вот код для этого.

$name = stripslashes(mysql_real_escape_string(htmlentities($_POST['r-username']))); 

До свидания, Марко.

+0

Ну, это не очень хорошая идея. Переход от подготовленных заявлений в современный API к устаревшему, устаревшему API-интерфейсу mysql_, который так же безопасен, как блокировка двери, когда окна широко открыты. – Qirel

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