【问题标题】:Testing for correct email addy/password TSql测试正确的电子邮件地址/密码 TSql
【发布时间】:2010-09-30 14:24:56
【问题描述】:

我正在我的网站上制作一个登录表单,需要一些帮助。使用此脚本时,我不断收到错误消息:

<?php

$em = $_REQUEST["email"];
$pa = md5($_REQUEST["password"]);

//connectioninfo hidden   

$connectionInfo = array( "UID"=>$uid,                              
                         "PWD"=>$pwd,                              
                         "Database"=>$databaseName);
$conn = sqlsrv_connect( $serverName, $connectionInfo);

$tsql = "SELECT email, password FROM users WHERE email = $em AND password = $pa";

$stmt = sqlsrv_query( $conn, $tsql);    

if($stmt)
{
    $ot =
    "Hi, " . $em;
}
else
{
  $ot =
  "<p>Oh, no! My Account is currently unavailable right now, please try again later.</p>";
}

?>

我不断收到的错误是:

哦,不!我的帐户目前不可用,请稍后再试。

谁能帮我理解为什么我登录时它没有显示 Hi, $em 消息,以及我该如何解决它。

另外,只是为了解决这个问题,是的,我使用了正确的登录详细信息。 :)

谢谢 杰斯

【问题讨论】:

  • 抱歉格式化,pre标签和按钮由于某种原因不再起作用!

标签: php sql-server tsql forms login


【解决方案1】:

你有几个问题:

  1. 您正在使用 REQUEST 而不是 POST。你真的应该使用 POST。
  2. 您的代码易受 SQL 注入攻击:http://php.net/manual/en/security.database.sql-injection.php
  3. 您的字符串文字周围没有引号,这可能会导致您的问题。

【讨论】:

  • 我在其他页面上编写的所有其他选择、更新和插入脚本都可以工作......所以我不明白这个不是。这没有任何意义。我之前尝试过使用 POST,之前有人推荐过,但我得到了不想要的结果。
  • 什么“不希望的”结果? POST 主要用于表单数据。 GET 用于 URL 中的数据。使用 GET 登录表单的问题在于,任何瞥一眼您的持有者的人都可以看到您登录时使用的变量。 REQUEST 结合了 POST 和 GET。确保表单的方法是“post”(小写)。此外,请注意确保 register_globals 已关闭。
  • 我已确认 register_globals 已关闭,我正在使用“post”,谢谢,我会采纳您的建议。
  • 行情不是问题。引号给出的是“Unexpected T_...”错误。
  • 那是因为你没有转义引号。而不是写 "SELECT * FROM something WHERE value="something"" (这会使 PHP 解析器感到困惑),您需要编写 "SELECT * FROM something WHERE value=\"something\"" 并小心转义您的输入。跨度>
猜你喜欢
  • 1970-01-01
  • 2011-04-16
  • 2020-01-04
  • 2020-12-25
  • 2023-03-14
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多