Проверка запроса PDO на наличие повторяющегося имени пользователя при отправке - PullRequest
1 голос
/ 04 августа 2011

ОШИБКА: ошибка синтаксического анализа: синтаксическая ошибка, неожиданный T_ENCAPSED_AND_WHITESPACE, ожидающий T_STRING или T_VARIABLE или T_NUM_STRING в строке 7

Попытка использовать PDO для создания этого соединения и формирования запроса, которыйпроверяет имя пользователя, существует ли оно или нет при вводе в поле после нажатия кнопки отправки.

HTML:

<form action="inc/check_regUsr.php" method="post" id="userLogon">
    <div class="field required">
        Username: <input type="text" name="regduser" tabindex="1" /><br />
        </div>
        <div class="field required">
        Password: <input type="password" name="regdpass" tabindex="2" /><br />
        </div>
        <input type="submit" name="submitUser" />
</form>

PHP

<?php
#Login Details
require_once('dbcred.php');
$conn = new PDO("mysql:host=$host;dbname=$db", $user, $pass);

#Check for Existing User
$q = $conn->query("SELECT uname FROM Student WHERE $_POST['regduser'] = uname");
$stmt = $conn->prepare($q);
$r->execute($q);
if($q($r)>= 1){ #if there are 1 or more users with enter username, deny.
echo "Sorry, username already exists";
}
else{
echo "Success";
}

?>

Ответы [ 2 ]

0 голосов
/ 04 августа 2011

Поскольку вы уже используете PDO, вы также можете воспользоваться функцией параметров, которая обеспечивает отличную защиту от атак SQL-инъекций.

$conn = new PDO("mysql:host=$host;dbname=$db", $user, $pass);

$stmt = $conn->prepare("SELECT uname FROM Student WHERE ? = uname");
$params = array($_POST['regduser']);
$stmt->execute($params);
if ($stmt->rowCount() > 0) {

echo "Sorry, username already exists";
}
else{
echo "Success";
}
0 голосов
/ 04 августа 2011

Заключите ваши сложные переменные в {} внутри строки в двойных кавычках:

$q = $conn->query("SELECT uname FROM Student WHERE {$_POST['regduser']} = uname");
// -----------------------------------------------^^^^^^^^^^^^^^^^^^^^^

Похоже, что ваше предложение SQL WHERE обратное, и в нем отсутствуют кавычки.Должно быть

WHERE uname = '{$_POST['regduser']}'

У вас есть другая проблема, когда вы сначала набираете $conn->query(), а затем пытаетесь создать подготовленный оператор.

Вызов query() не нужен и действительно опасен,Вместо этого создайте правильно подготовленный оператор с ? заполнителями:

$stmt = $conn->prepare("SELECT uname FROM Student WHERE uname = ?");
$stmt->bindParam(1, $_POST['regduser'], PDO::PARAM_STR);    
$stmt->execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...