PHP + SQL 登录系统。返回错误的值[重复]

Posted

技术标签:

【中文标题】PHP + SQL 登录系统。返回错误的值[重复]【英文标题】:PHP + SQL Login system. Returning the wrong value [duplicate] 【发布时间】:2020-06-28 22:40:18 【问题描述】:

大家好,这里的新手,

我试图弄清楚为什么我的代码返回“登录成功”,无论何时我的 $loginresult 不 = 1。这是我第一次尝试使用我的登录系统实现准备好的语句以避免 SQL 注入和很好奇问题是否在于我是如何写的。

我可以肯定地说,当我成功登录时,我的值是 1,不成功是 5。

当它为 5 时,它仍然返回与 1 应该返回的相同的回声。

感谢大家的时间和耐心。

<?php session_start(); ?>

<!DOCTYPE html>
<head>
  <title>Login</title>
</head>
<body>

<?php

include('config.php');
$conn = sqlsrv_connect($serverName, $conn_array);

  $myparams['username'] = $_POST['username'];
  $myparams['password'] = $_POST['password'];


      // All checks done already (including password check). Begin building prepare statement.
    $sql = "SET ANSI_NULLS ON
    SET QUOTED_IDENTIFIER ON
    SET CONCAT_NULL_YIELDS_NULL ON
    SET ANSI_WARNINGS ON
    SET ANSI_PADDING ON
    exec LoginScript @in_accountname=?,@in_password=?
    
    ";

//Array for prep
$procedure_params = array(
        array(&$myparams['username'], SQLSRV_PARAM_IN),
        array(&$myparams['password'], SQLSRV_PARAM_IN)

);

/* Prepare the statement. */
if( $stmt = sqlsrv_prepare( $conn, $sql, $procedure_params))

     // echo "Statement was successfully prepared.\n";
 
else

      echo "Statement could not be prepared.\n";
     // ( print_r( sqlsrv_errors(), true)); ACTIVATE ONLY FOR DEBUGGING TO PREVENT HELPING SQL INJECTORS


/* Execute the statement. */
if( sqlsrv_execute( $stmt))

     // echo " Statement executed.\n";

else

      echo " Unable to execute prepared statement!\n";
     // ( print_r( sqlsrv_errors(), true));



//checkuser
$result = sqlsrv_prepare( $conn, $sql, $procedure_params);
$info=sqlsrv_fetch_array($stmt);
$LoginResult = $info;


//Login Success
if (!$LoginResult=1)


    echo "Login DEAD.";
    echo "Login Result: ".$info[0]."\n"; 
else
    echo "Login Successful.";
    echo "Login Result: ".$info[0]."\n"; 


/* Free the statement and connection resources. */
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>```

【问题讨论】:

【参考方案1】:

if (!$LoginResult=1) 不是你想要的,你需要的

if ($LoginResult != 1) is not valid

见:Equality Operators

您对原始代码所做的是将值 1 分配给 $loginResult 变量并检查它是否不真实

【讨论】:

以上是关于PHP + SQL 登录系统。返回错误的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用php时的mongodb错误[重复]

如何使用 PHP 将登录表单错误返回到同一页面?

函数返回不正确的值[重复]

如何处理重复条目的错误?

SQL 查询为 PHP 中的 ID 列返回不正确的值

在php中登录管理面板时出现此错误[重复]