2012-11-13 44 views
0

我在項目中使用WAMP,並遇到一些困難。基本上,我想單擊一個表單提交按鈕,它調用一個函數,它在php中請求一些數據。 。 我的功能javascript&php沒有將合適的值返回到DIV

/**********************************************************************************/ 
//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(我的div)使用$( '#rText')的值VAL(); OR $('#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中擁有正確的值?

+0

僅僅指剛好奇,你爲什麼不使用jQuery AJAX方法,使Ajax調用 –

+0

這是什麼'你說的文字? – Madbreaks

+0

不使用ajax,因爲我不熟悉它,我看到$ .ajax調用,這真的很好。主要只是好奇這個例子中出了什麼問題。 rText是一個DIV,據我所知,它保存了我的login.php的返回值 –

回答

0

首先,你不能爲一個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; 

很容易的權利?

+0

我試過了,但是我的結果直到函數'$('#cSignIn')仍然無效。click(function(){'退出 –

0

你不應該使用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; 
} 
+0

仍然感興趣,我將在今天晚些時候實現它。 –