2011-07-15 66 views
0

登錄表單PHP你好,我是新來的,在編程爲好。今天,我一直在做的PHP/MySQL和jQuery表單驗證一個登錄表單,並感到驚訝的是我的形式不bacause JS腳本的工作?你工作得很好。與jQuery驗證

<div class="top_login_error" id="top_error">All fields must be field</div> 
    <div id="logincontainer"> 
     <div id="loginbox"> 
      <div id="loginheader"> 
       <div>Control Panel Login</div> 
      </div> 
      <div id="innerlogin"> 
       <form method="POST" action="obr.php" id="login_form"> 
        <p>Enter your username:</p> 
        <input type="text" class="logininput" name="login" id="login" /> 
        <p>Enter your password:</p> 
        <input type="password" class="logininput" name="password" id="password" /> 
        <input type="submit" class="loginbtn" value="Submit" name="enter" id="admin_login" /><br /> 
        <p><a href="#" title="Forgoteen Password?">Forgotten Password?</a></p> 
       </form> 
      </div> 
     </div> 
     <img SRC="../images/administration/login_fade.png" alt="Fade" /> 
    </div> 
</body> 

的jQuery CCODE用於驗證形式

$('#admin_login').click(function(q){ 

q.preventDefault(); 

    var login = $('#login').val(); 
    var password = $('#password').val(); 

    if (login.length == 0){ 
     $('#top_error').fadeIn(500); 
     $('#login').addClass("logininput_error"); 
     var error = true; 
    } else { 
     $('#top_error').fadeOut(500); 
     $('#login').removeClass("logininput_error"); 
     } 
    if (password.length == 0){ 
     $('#top_error').fadeIn(500); 
     $('#password').addClass("logininput_error"); 
     var error = true; 
    } else { 
     $('#top_error').fadeOut(500); 
     $('#password').removeClass("logininput_error"); 
     } 

}); 

和PHP

<?php 
session_start(); 



    if (isset($_POST['login'])){$login = $_POST['login'];} if ($login == ''){unset($login); exit('please enter name');} 
    if (isset($_POST['password'])){$password = $_POST['password'];} if ($password == ''){unset($password); exit('please enter password');} 

    $login = mysql_escape_string($_POST['login']); 
    $password = mysql_escape_string($_POST['password']); 

    //$password = md5($password); I have been disabled while testing in simle way, login : aaa , password : aaa; 

    include("../db.php"); 

    $result = mysql_query("SELECT * FROM users WHERE login='".$login."' and password='".$password."'") or die(mysql_error()); 

    $line = mysql_fetch_array($result); 

    if (empty($line['id'])){ 
     exit("Your name or login is incorect <a href='login.php'>back</a>"); 
    } else { 

    $_SESSION['autorized'] = true; 
    $_SESSION['login'] = $login; 
    $_SESSION['password'] = $password; 
    } 
    echo "<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>"; 

?> 

有人可以幫助我的代碼,告訴什麼改變,一切都正常工作。謝謝

回答

5

罪魁禍首是q.preventDefault();,只有這樣做,當窗體不應該被提交。

+0

如果不是要拼命,也許有人可以告訴我什麼樣的代碼添加到我的jQuery發送使用Ajax數據 – Viktors

1

大概Prusse是正確的。

jquery的文檔很不錯=>你應該看http://api.jquery.com/jQuery.post/做post request(AJAX)和http://api.jquery.com/submit/來處理提交。

我也建議你使用PDO而不是「正常」的MySQL也防止對SQL-注射。然後您可以使用PHPunit在Uncle Bob's three rules of TDD之後正確測試您的代碼。我喜歡使用內存中的SQLite數據庫來測試我的代碼(new PDO('sqlite::memory:');)。你可以看到我的簡單認證庫,看看我是怎麼做的=>https://github.com/alfredwesterveld/php-auth