如何将用户名变量从标记传递到php代码?

时间:2014-12-03 17:43:36

标签: php ajax web-services authentication

我有一个名为proxyCreate.php的php webservice,它将两个值(用户名和密码)传递给验证用户凭据的API。

这很好用。

但是,API返回仅返回经过身份验证的用户名,密码和身份验证日期。

我们还希望获取用户的deptID,但不幸的是,API无法执行此操作,我们无法控制API返回的内容。

因此,我试图查询数据库表以返回与经过身份验证的用户关联的DeptID。

到目前为止,我收到的错误是,"将无效参数传递给SQL_Srv查询"

到底有没有?

这是我到目前为止所拥有的。

<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);

session_start();

// Connect to SQL Server database
include("../../connections/Connect.php");

$upass = $_GET['upass'];
// Construct query

$tsql =
"
SELECT
    ISNULL([ORGANIZATION],'')

FROM
 [EMPLOYEE]
WHERE Lower([LOGINNAME]) = lower('$upass')
";

$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false )
{
     echo "Error in executing query.</br>";
     die( print_r( sqlsrv_errors(), true));
}
$results = array();
// Retrieve and display the results of the query
//$lastFeatType = "";
while($row = sqlsrv_fetch_array($stmt,SQLSRV_FETCH_ASSOC)) {
    array_push($results,$row);
}

 echo json_encode($results);

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
  <h1>
    FTS Service Requests
</h1>
  <div class="action-container" style="display:none;"></div>


   <div id="tabs">
  <ul>
<div id="dialog" title="Basic dialog">
  <p style="font-size:14pt;">User Log In</p>
</div>
  </ul>
<p>
</p>
<br clear="all" />
<div>
     <br />   <br />
      <br />
       <?php
        //Start session
         session_start();
         header("Cache-Control: no-store, must-revalidate, max-age=0");
         header("Pragma: no-cache");
         header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
         if(!empty($_GET['status'])){
                echo '<div align=center><font color=firebrick>You have been logged out!</font><br><br>Log in again or close browser.</div>';
         }
       ?>
       <br />
        <br />
      <br />
      <form id="FormToValidate">
        <table>
         <tr>

           <td nowrap>
                   <div class="input text">
              <label><strong>UserName:</strong></label>
              <input  maxlength="40" class="required" name="user" id="user" size="20" placeholder="Enter username!" type="text" title="Please enter a username." tabindex="2" value="" style="width:400px;color:#000;font-size:10pt;height:20px;" />
            </div>
          </td>
            </tr>
            <tr>
              <td nowrap>
               <div class="input text">
                <label><strong>Password:</strong></label>
                <input  maxlength="40" class="required" name="pass" id="pass" size="20" placeholder="Enter password!" type="password" tabindex="3" title="Please enter a password." value="" style="width:400px;color:#000;font-size:10pt;height:20px;" />
               </div>
              </td>

         </tr>

         <tr>
            <td></td>
              <td>
              <div class="buttonSubmit">
              <input type="button" id="btnValidate" style="width:80px; margin-left:-152px;background-color:#fff;" value="Log In" />
             </div><br clear="all"/>
        </td>
      </tr>
    </table>

  </form>
</div>

<script type="text/javascript">

$("#btnValidate").click(function() {

// Creating variables to hold data from textboxes

var uname = $("#user").val();
var upass = $("#pass").val();

$.post("proxyCreate.php",
  { data: JSON.stringify({ LoginName: uname,Password: upass }) })
    .done(function(data) {
        var result = JSON.parse(data);
        switch(result.Status) {
            case 0:
                //login successful
                tokenVal = result.Value.Token;
                location.href = "http://Accounts/accounts.php?token="+tokenVal+ "&user=" + uname;
                break;

            case 2:
                //invalid login
                alert(result.Message);
                break;
        }
    })
    .fail(function() {
        alert("The AJAX request failed!");
    });
  });
</body>
</html>

2 个答案:

答案 0 :(得分:0)

看起来表单帖子未正确处理。请注意,这是一个POST方法......

$.post(...

但是,在代码中,您正在寻找GET值:

$upass = $_GET['upass'];

这会导致$upass无价值。您想要使用$_POST数组:

$upass = $_POST['upass'];

此外,看起来页面正在一个地方检查值:

if(!empty($_GET['status'])){

但是在运行实际查询之前不检查值。应该在该查询周围使用相同的if块,以确保在尝试从数据库中找到DeptID之前已提供该值。

最后,看起来您正在混淆服务器端和客户端操作顺序。这是由AJAX请求发布的页面吗?反应不会像你期望的那样。你正在回应JSON数据:

echo json_encode($results);

但页面的其余部分仍然执行,因此所有HTML标记也将被返回。这可能会混淆JSON解析器客户端。我建议将UI页面与JSON服务分成两个单独的文件。

答案 1 :(得分:-1)

$tsql =
"SELECT ISNULL([ORGANIZATION],'') FROM [EMPLOYEE]
WHERE Lower([LOGINNAME]) = lower('".$upass."')
";