0

プロジェクトで 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に正しい値を入れるにはどうすればよいですか?

4

2 に答える 2

1

まず、Div には $('#rText').val() を使用できません。フォーム入力のみです。代わりに $('#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;

簡単ですよね??

于 2012-11-14T00:45:01.813 に答える
0

まず第一に、mysql apiを使用するべきではありません。これは、php.net Webサイト(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; 
}
于 2012-11-14T06:38:47.853 に答える