【问题标题】:ModX and PDO: querying with PHP variablesModX 和 PDO:使用 PHP 变量进行查询
【发布时间】:2012-09-19 06:22:31
【问题描述】:

我是 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 中的一个 sn-p)

编辑:表单标签:

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

【问题讨论】:

  • 您在表单方法中的操作是指包含上述代码的不同页面还是上述代码所在的页面本身?
  • @JLC007 使用上述代码的不同页面
  • 你能告诉我们你 框加上提交按钮吗?
  • 通过执行 var_dump() 检查 loginemail 和 loginpassword 包含的内容 .. 另外 - 当您说硬编码变量时,您是指 $_REQUEST[] 变量还是您实际上为电子邮件输入了实际值和密码?
  • @JLC007 在上面添加 - 但我知道表单正在工作,因为我可以在查询之前回显结果

标签: php mysql pdo modx


【解决方案1】:

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

【讨论】:

  • 我希望这是一个测试用例,并且您没有将密码以明文形式存储在数据库中;)
【解决方案2】:

这样试试

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

【讨论】:

  • 你改变了什么?计算双引号内的变量。
  • 他问那些用户名,passowrd 不被视为php var,所以我给了他一个尝试..它也有效,并且可以检查这个
  • 恐怕没什么区别
【解决方案3】:

我认为 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;

【讨论】:

  • 嗯,它仍然不起作用....有人建议 ModX 证券正在阻止它。有谁知道在 PDO 中正确进行查询的方法?
【解决方案4】:

尝试从这里更改

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

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

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

FUTHER INFO 在 html5 &lt;button&gt; 元素上

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

【讨论】:

  • $_REQUEST 同时拥有$_POST$_GET
  • 恐怕这也没什么区别
猜你喜欢
  • 2018-12-25
  • 2015-09-17
  • 2013-09-04
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
相关资源
最近更新 更多