ModX и PDO: запросы с переменными PHP

Я новичок в PDO и имею следующий код, который получает 2 PHP-переменных из формы и использует их в запросе:

$loginemail = $_REQUEST['loginemail'] ;
$loginpassword = $_REQUEST['loginpassword'] ;

$logincheck = "SELECT * FROM `ft_gameusers` WHERE `email` = '$loginemail' AND `password` = '$loginpassword'";

$query = $modx->query($logincheck);

if ($query) {
    while ($row = $query->fetch(PDO::FETCH_ASSOC)) {

 echo $row['email'];

    }
}

Дело в том, что если я жестко закодирую переменные электронной почты и пароля в запросе MySQL, он будет работать нормально - просто они не похожи на переменные PHP.

Кто-нибудь знает, что я делаю неправильно? (PS: это фрагмент из ModX Revo)

РЕДАКТИРОВАТЬ: тег формы:

<form id="loginform" action="mysite.com/formprocess" method="post">

Email:
<input type="text" id="loginemail" name="loginemail">
Password:
<input type="password" id="loginpassword" name="loginpassword">
<button type="submit">Login</button>
</form>

person MeltingDog    schedule 19.09.2012    source источник
comment
относится ли ваше действие в методе формы к другой странице, содержащей приведенный выше код, или к самой себе, где находится приведенный выше код?   -  person Conrad Lotz    schedule 19.09.2012
comment
@ JLC007 другая страница с кодом выше   -  person MeltingDog    schedule 19.09.2012
comment
Можете ли вы показать нам свои поля ввода и кнопку отправки?   -  person Conrad Lotz    schedule 19.09.2012
comment
Проверьте, что содержат loginemail и loginpassword, выполнив var_dump() .. также - когда вы говорите о жестком коде переменных, вы имеете в виду переменную $_REQUEST[] или вы действительно вводите реальные значения для электронной почты и пароля?   -  person SimaPro    schedule 19.09.2012
comment
@ JLC007 добавлен выше, но я знаю, что форма работает, так как я могу повторить результаты перед запросом   -  person MeltingDog    schedule 20.09.2012


Ответы (4)


Вот как вы можете связать свои параметры с помощью PDO/xPDO:

$loginemail = $_REQUEST['loginemail'] ;
$loginpassword = $_REQUEST['loginpassword'] ;

$logincheck = "SELECT * FROM `ft_gameusers` WHERE `email` = :loginemail AND `password` = :loginpassword";

$credentials = array(
    ':loginemail' => $loginemail,
    ':loginpassword' => $loginpassword,
);

$query = new xPDOCriteria($modx,$logincheck,$credentials);
if ($query->stmt && $query->stmt->execute()) {
    while ($row = $query->stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['email'];
    }
}

http://php.net/manual/en/pdostatement.bindparam.php

person okyanet    schedule 20.09.2012
comment
Я надеюсь, что это тестовый пример, и вы не храните пароли в открытом виде в базе данных;) - person okyanet; 20.09.2012

Попробуйте так

$logincheck = "SELECT * FROM `ft_gameusers` WHERE `email` = '".$loginemail."' AND `password` = '".$loginpassword.'";
person Gautam3164    schedule 19.09.2012
comment
что ты изменил? Переменные внутри двойных кавычек оцениваются. - person Mihai Iorga; 19.09.2012
comment
Он спросил, что эти имя пользователя и пароль не должны рассматриваться как php var, поэтому я дал ему попробовать ... и это также будет действительным, и я могу проверить это - person Gautam3164; 19.09.2012
comment
Боюсь, это не имеет значения - person MeltingDog; 19.09.2012

Я думаю, что Гаутам прав, проведите пару небольших тестов, чтобы увидеть, что на самом деле происходит:

// trim these just in case
$loginemail = trim($_REQUEST['loginemail']);
$loginpassword = trim($_REQUEST['loginpassword']);

$logincheck = "SELECT * FROM `ft_gameusers` 
WHERE `email` = '$loginemail' AND `password` = '$loginpassword'";

// copy & run this in an sql editor:
echo $logincheck;

// then try Gautam's ~ correct the quotes syntax error after loginpassword
$logincheck2 = "SELECT * FROM `ft_gameusers` 
WHERE `email` = '".$loginemail."' AND `password` = '".$loginpassword."';
echo $logincheck;
person Sean Kimball    schedule 19.09.2012
comment
хм, все еще это не работает .... было высказано предположение, что его блокируют ценные бумаги ModX. Кто-нибудь знает способ правильно выполнить запрос в PDO? - person MeltingDog; 20.09.2012

Попробуйте изменить ОТ этого

<button type="submit">Login</button>

TO

<input type="submit" id="submit" name="submit" value="Login">

Этот пост объясняет, что <button> не всегда совместим, и может просто объяснить, почему ваши переменные, которые передаются с использованием post с другой стороны пусто.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ об элементе <button> html5

Важно: если вы используете элемент в HTML-форме, разные браузеры могут отправлять разные значения. Internet Explorer до версии 9 будет отправлять текст между тегами и , в то время как другие браузеры будут отправлять содержимое атрибута value. Используйте элемент для создания кнопок в HTML-форме.

person Conrad Lotz    schedule 19.09.2012
comment
$_REQUEST имеет и $_POST, и $_GET - person Mihai Iorga; 19.09.2012
comment
Это тоже не имеет значения, я боюсь - person MeltingDog; 19.09.2012