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>

以下是使用 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

像这样尝试

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

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;

尝试从此更改

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

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

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

足球资讯在 HTML5 <button> 元素上

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

最新更新