пытается понять, что здесь представляет ошибка, пытаясь представить некоторые поля в 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
Что вы еще делаете с вашим подготовленным заявлением? Вы просто копировали и вставляли и надеетесь на лучшее? Вы начинаете использовать параметры, а затем просто сдаетесь? Ввод переменной $ _POST в ваш подготовленный оператор оставляет ее открытой для инъекционных атак. – Devon
Эй, я новый ti это не пламя мне чувак Мне нужны некоторые указатели, которые я не прошу ответа. Я полностью осознаю, что это не безопасно и не лучший подход, но именно поэтому мне нужны некоторые профи глаз, чтобы я мог получить лучше – PhpDude
попробуйте удалить trailing ';' из вашего запроса 'INSERT' – Avinash