2015-05-30 1 views
0

пытается понять, что здесь представляет ошибка, пытаясь представить некоторые поля в db с солью для пароля, а также добавить новых пользователей на мой сайт (я буду улучшать безопасность), но изо всех сил пытаюсь бит, поскольку я получаю правильные результаты с var_dump, пожалуйста, см. ниже, поскольку я не могу определить проблему?PDO uncaught error forming данные формы

Вот форма:

<form action="actions/add_emp.php" method="post"> 

    <input type="text" name="user" placeholder="Username" required="required" /><br/> 
    <input type="text" name="pass" type="password" placeholder="Password"/></label><br/> 

    <input type="text" name="firstname" id="name" required="required" placeholder="Firstname"/><br /> 
    <input type="text" name="lastname" id="email" required="required" placeholder="Lastname"/><br/> 
    <input type="email" name="emailAddress" id="city" required="required" placeholder="Email Address"/><br/> 
    <input type="text" name="extension" id="extension" required="required" placeholder="Extension Number"/><br/> 
    <select name="title"> 
     <option selected disabled>Please Select a Job Title...</option> 

     <option disabled></option> 
     <option disabled>Helpesk:</option> 
     <option value="Technical Support Advisor">Technical Support Advisor</option> 
     <option value="Deputy Team Leade">Deputy Team Leader</option> 
     <option value="Team Leader">Team Leader</option> 
     <option value="Incident Resolution Advisor">Incident Resolution Advisor</option> 

     <option disabled></option> 
     <option disabled>Call Centre:</option> 
     <option value="Technical Support Advisor">Technical Support Advisor</option> 
     <option value="">Deputy Team Leader</option> 
     <option value="">Team Leader</option> 

     <option disabled></option> 
    </select> 
    <br><br> 
    <input type="submit" value="Add User" name="submit"/><br /> 
</form> 

Вот сценарий действий:

<? 
     error_reporting(E_ALL); 
    ini_set('display_errors', 1); 
    if(isset($_POST['submit'])){ 

    include_once'../../config.php'; 

    $dbh = new PDO("mysql:host=$hostname;dbname=dashboardr",$username,$password); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    if(isset($_POST['user']) && isset($_POST['pass'])){ 
    $password=$_POST['pass']; 
    $sql=$dbh->prepare("SELECT COUNT(*) FROM `user_login` WHERE `username`=?"); 
    $sql->execute(array($_POST['user'])); 

    if($sql->fetchColumn()!=0){ 

    die("User Exists"); 

    }else{ 
    function rand_string($length) { 
     $str=""; 
     $chars = "MY SALT LIVES HERE - NOT THE MOST SECURE I KNOW!"; 
     $size = strlen($chars); 
     for($i = 0;$i < $length;$i++) { 
     $str .= $chars[rand(0,$size-1)]; 
     } 

     return $str; 
    } 
    $p_salt = rand_string(20); 
    $site_salt="MYCUSTOMSALT"; 
    $salted_hash = hash('sha256', $password.$site_salt.$p_salt); 

    $sql=$dbh->prepare("INSERT INTO `user_login` (`id`, `username`, `password`, `psalt`, `firstname`, `lastname`, `emailAddress`, `extension`) 
          VALUES (NULL, ?, ?, ?, '".$_POST["firstname"]."','".$_POST["lastname"]."','".$_POST["emailAddress"]."','".$_POST["extension"]."';"); 

var_dump($sql); 
    $sql->execute(array($_POST['user'], $salted_hash, $p_salt)); 

    header ('Location: ../list_emp.php'); 


    } 
    } 
    } 
    ?> 

Я довольно новыми для PDO, так что я все еще учусь.

Ну и вот результат от var_dump:

object(PDOStatement)#3 (1) { ["queryString"]=> string(203) "INSERT INTO `user_login` (`id`, `username`, `password`, `psalt`, `firstname`, `lastname`, `emailAddress`, `extension`) VALUES (NULL, ?, ?, ?, 'firstname','lastname','[email protected]','1234';" } 

Здесь ошибка:

Фатальная ошибка: Uncaught исключение 'PDOException' с сообщением «SQLSTATE [42000]: Ошибка синтаксиса или доступа нарушение: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 2 '/ Приложения/MAMP/htdocs/dashboardr v3.2.3/admin/actions/add_emp.php: 72 Трассировка стека: # 0/Applications/MAMP/htdocs/dashboardr v3.2.3/admin/actions/add_emp.php (72): PDOStatement-> execute (Array) # 1 {main} брошен в/Applications/MAMP/htdocs/dashboardr v3.2.3/admin /actions/add_emp.php в строке 72

+0

Что вы еще делаете с вашим подготовленным заявлением? Вы просто копировали и вставляли и надеетесь на лучшее? Вы начинаете использовать параметры, а затем просто сдаетесь? Ввод переменной $ _POST в ваш подготовленный оператор оставляет ее открытой для инъекционных атак. – Devon

+0

Эй, я новый ti это не пламя мне чувак Мне нужны некоторые указатели, которые я не прошу ответа. Я полностью осознаю, что это не безопасно и не лучший подход, но именно поэтому мне нужны некоторые профи глаз, чтобы я мог получить лучше – PhpDude

+1

попробуйте удалить trailing ';' из вашего запроса 'INSERT' – Avinash

ответ

2

Проблема в том, что у вас нет закрывающей круглой скобки для запроса.

INSERT INTO `user_login` (`id`, `username`, `password`, `psalt`, `firstname`, `lastname`, `emailAddress`, `extension`) 
VALUES (NULL, ?, ?, ?, 'firstname','lastname','[email protected]','1234'; 

должно быть

INSERT INTO `user_login` (`id`, `username`, `password`, `psalt`, `firstname`, `lastname`, `emailAddress`, `extension`) 
VALUES (NULL, ?, ?, ?, 'firstname','lastname','[email protected]','1234'); 

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

Вы никогда не вводите пользовательский ввод непосредственно в запрос. Это является основанием для подготовленных операторов и параметров. Вы можете использовать заполнители ?, а затем связать параметры позже в заявлении выполнить следующий образом:

$sql=$dbh->prepare("INSERT INTO `user_login` (`id`, `username`, `password`, `psalt`, `firstname`, `lastname`, `emailAddress`, `extension`) 
         VALUES (NULL, ?, ?, ?, ?, ?, ?, ?)"); 
$sql->execute(
    array($_POST['user'], $salted_hash, $p_salt, $_POST["firstname"], $_POST["lastname"], $_POST["emailAddress"], $_POST["extension"]) 
); 
+0

А как хорошо, я был не за горами, меня иногда путают, это хорошо, что вы потратили время, чтобы объяснить это мне :) – PhpDude

+0

@ phpcoder, рад, что я мог бы помочь. Извините, если бы я, казалось, пламя вас, я просто имею дело с большим количеством людей, которые копируют и вставляют, меняют его, а затем спрашивают, почему что-то не работает, а не учится правильно кодировать. Было бы полезно изучить функции, которые вы используете на php.net, все они хорошо документированы примерами. – Devon

+0

это было скопировано и вставлено, но из чего-то еще внутри моих собственных скриптов, но я действительно заметил ошибку после публикации, но, в свою очередь, было здорово, что вы показали мне правильное использование подготовленных операторов, которые я сейчас просматриваю всю свою базу данных крючки для обеспечения правильной обработки вставок. Спасибо. – PhpDude