ModX和PDO:使用PHP变量查询

时间:2012-09-19 06:22:31

标签: php mysql pdo modx

我是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>

4 个答案:

答案 0 :(得分:2)

这是使用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

答案 1 :(得分:0)

试试这个

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

答案 2 :(得分:0)

尝试更改此

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

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

这个post解释了<button>并不总是兼容,并且可能只解释为什么使用post传递的变量在另一方为空。

FUTHER INFO 在html5 <button>元素

  

重要提示:如果您在HTML表单中使用该元素,则不同   浏览器可以提交不同的值。 Internet Explorer,早期版本   9,将提交文本和标签之间的同时   其他浏览器将提交value属性的内容。使用    元素以HTML格式创建按钮。

答案 3 :(得分:0)

我认为Gautam就在这里,通过一些小测试来了解实际情况:

// 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;