【问题标题】:javascript & php not returning proper values to DIVjavascript & php 没有向 DIV 返回正确的值
【发布时间】:2012-11-13 23:35:02
【问题描述】:

我在一个项目中使用 WAMP,但遇到了一些困难。基本上,我想单击一个表单提交按钮,该按钮调用一个在 php 中请求一些数据的函数。 我的功能

/**********************************************************************************/
//USER LOG IN
$('#cSignIn').click(function(){
    //Get User name and password

    var uname = $('#uName').val();
    var pword = $('#pWord').val();

    loginRequest(uname, pword);

    $('.formList').hide();
    $('#information').show();
    return false;   
});

//LOGIN REQUEST
function loginRequest(uName, pWord){
    if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
             xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            document.getElementById("rText").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","login.php?Username=" + uName +"&Password=" + pWord ,true);
    xmlhttp.send();

    return false;
} 

当我尝试使用 $('#rText').val(); 返回 rText(我的 div)的值时;或 $('#rText').text();这不是我所期望的。 php代码回显一个数字,login.php的代码如下

<?php
$con = mysql_connect("localhost:3306","root","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("Library", $con);

$username=$_GET["Username"];
$password=$_GET["Password"];
$result = mysql_query("SELECT * FROM Customers");
$success = 0;

while($row = mysql_fetch_array($result))
  {
    if($username==$row['Username']) 
        if($password==$row['Password']) 
            if($row['Admin'] == true)
            {
                $success = 1;
            }
            else
            {
                $success = $row['Id'];
            }

  }
echo $success;

mysql_close($con);
?> 

再次,当我在所涉及的任何一个函数中检查 rText 的值时,该值不是预期的。但是,当我退出函数时,该值是有效的。

从函数 loginRequest 返回后,如何在 rText 中获得正确的值?

【问题讨论】:

  • 很好奇,你为什么不使用 jQuery AJAX 方法进行 ajax 调用
  • 你说的rText是什么?
  • 不使用 ajax,因为我不熟悉它,我见过 $.ajax 调用,它非常好。主要是好奇这个例子出了什么问题。 rText 是一个 DIV,据我所知,它保存了我的 login.php 的返回值
  • 没有 rText 或 html/js 我什至不知道从哪里开始
  • 你的数据库中 $row['id'] 的值是什么?数字?名字?随机字母?

标签: php javascript jquery wamp


【解决方案1】:

首先,你不能将 $('#rText').val() 用于 Div,只能使用表单输入,你应该使用 $('#rText').html() 代替

其次,为了让您的生活更轻松...您可以使用 ajax 稍微调整一下您的登录请求功能。相信我,掌握它并不难。在这里你只需要发出一个 ajax 请求。

//LOGIN REQUEST
function loginRequest(uName, pWord) {


    $.ajax({
        type: "POST", //Post or Get
        url: "/login.php", //PHP page to post to
        data: "Username=" + uName +"&Password=" + pWord, // The values you want to send along to PHP Page
        dataType: "script", // This allows your PHP echo to be actual Javascript / Jquery

     });        
}

你的 PHP 成功函数是这样的

while($row = mysql_fetch_array($result))
  {
    if($username==$row['Username'])
        if($password==$row['Password'])
            if($row['Admin'] == true)
            {
                $success = "$('#rText').html('1')"; //Echo as Jquery
            }
            else
            {
                $success = "$('#rText').html('" + $row['Id'] + "')"; // Echo as Jquery
            }

  }
echo $success;

够简单吧??

【讨论】:

  • 我试过这个,但是直到函数$('#cSignIn').click(function(){退出之前我的结果仍然无效
【解决方案2】:

首先你不应该再使用mysql api了,它也在php.net网站上被劝阻:http://www.php.net/manual/en/intro.mysql.php

虽然我不反对使用纯 JavaScript 来做事,但拥有一些像 jQuery 这样的节省时间的工具来让生活更轻松总是好的。这就是我用 jQuery 重写你的代码的方式;

function loginRequest(username, password){
  var code = 0;
  $.post('login.php', {'uname' : username, 'pword' : password},
  function(response){
    code = response;
  });
  return code;
}

在您的 php 代码中,您可以在 mysqli 中使用准备好的语句来避免 sql 注入:

$db = new Mysqli("localhost", "root", "pword", "db"); 
$username = $_POST['uname'];
$password = $_POST['pword'];

if($query = $db->prepare("SELECT COUNT(username) AS usercount FROM Customers WHERE username = ? AND password = ?")){
  $query->bind_para('ss', $username, $password);
  $query->execute();
  $query->bind_result($usercount);
  $query->fetch();
  echo $usercount; 
}

【讨论】:

  • 还是有兴趣,我今天晚些时候去实现。
猜你喜欢
  • 2017-07-29
  • 2015-06-11
  • 2014-11-26
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
相关资源
最近更新 更多