2013-05-25 5 views
3

довольно новый язык, я создал простую систему входа, и я пытаюсь отправить формы без обновления страницы. Я полностью создал систему регистрации без обновления страницы (в сочетании с динамической проверкой имени пользователя), и теперь я пытаюсь также преобразовать фактическую форму входа, чтобы пользователь мог отображаться как зарегистрированный без обновления страницы.PHP AJAX form submit no page refresh multiple variable pass

Я попытался использовать тот же метод, однако теперь мне нужно передать как имя пользователя, так и пароль в скрипт проверки, и я не могу заставить часть пароля работать по какой-то причине ... хотя имя пользователя работает нормально.

Я его настроить, чтобы отобразить одну ошибку, если пароль успешно проверен, а другой, если это не .. я может быть overthinking это, я ценю вашу помощь в этом, возможно, тривиальной задачи

PS первый идти со стеком поэтому, пожалуйста, указать, какие-либо предложения для форматирования и т.д.

PHP

<?php 
require_once('startsession.php'); 
$page_title = 'Log In'; 
require_once('header.php'); 
require_once('connectvars.php'); 
require_once('navmenu.php'); 
?> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<script src="invisiblelogin.js"></script> 

<script type="text/javascript"> 

$(document).ready(function() { 
$('.error').hide(); 
$('#Info').hide();  
}); 

function check_login(){ 
var username = $("#username").val(); 
var password = $("#password").val(); 
if(username.length > 0 && password.length > 0){ 
    $.post("logincheck.php", { 
     username: $('#username').val(), 
     password: $('#password').val(), 
    }, function(response){ 
     setTimeout("finishAjax('Info', '"+escape(response)+"')", 450); 
    }); 
    return false; 
} 
    } 

function finishAjax(id, response){ 
//showing of errors is just visually showing me whether or not the password validation  worked 
$('#'+id).html(unescape(response)); 
var valid = $("#Info").html(); 
if(valid > 0) { 
    $("label#username_error2").show(); 
} 
else { 
$("label#password_error").show(); 
} 
} 

</script> 


<div id="contact_form"> 
<form action="" name="contact"> 
<fieldset><legend>Log In Info</legend> 

    <font color="red"><div id="Info"></div></font> 

    <table> 
    <tr><td><label for="username" id="username_label">Username:</label> 
    <input type="text" id="username" name="username" value="" class="text-input" /></td> 
    <td><label class="error" for="username" id="username_error2">Enter your username. </label></td></tr> 

    <tr><td><label for="password" id="password_label">Password:</label> 
    <input type="password" id="password" name="password" value="" class="text-input" /> </td> 
    <td><label class="error" for="password" id="password_error">Enter your password. </label></td></tr></table> 



    <input type="submit" name="submit" class="button" id="submit_btn" value="Sign Up" onclick="return check_login();" /> 
</fieldset> 
</form> 
</div> 

<?php 
// Insert the page footer 
require_once('footer.php'); 
?> 

JS

$(function() { 
$('.error').hide(); 
$(".button").click(function() { 
    // validate and process form here 

    $('.error').hide(); 
    var username = $("input#username").val(); 
    var password = $("input#password").val();  

    if (username == "" || password == "") { 
     if (username == "") { 
     $("label#username_error2").show(); 
     $("input#username").focus(); 
     } 
     if (password == "") { 
     $("label#password_error").show(); 
     $("input#password").focus(); 
     } 
     return false; 
    } 
return false; 
    }); 




}); 

Intermediate PHP

<?php 
require_once('connectvars.php'); 
if($_REQUEST) 
{ 
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die (mysqli_error()); 
$username = mysqli_real_escape_string($dbc, trim($_REQUEST['username'])); 
$password = mysqli_real_escape_string($dbc, trim($_REQUEST['password'])); 
$query = "SELECT * FROM login_info WHERE username = 'username' AND password = SHA('$password')"; 

     // ------------ THIS PASSWORD PART DOES NOT READ CORRECTLY 


$data = mysqli_query($dbc, $query); 

if (mysqli_num_rows($data) > 0) { 
    echo '1'; 
} 
else { 
    echo '0'; 
} 
} 
?> 
+0

'Я не могу получить часть пароля для работы по какой-то причине. Что это означает? – zavg

+0

Кроме того, если вы используете '$ .post()' на стороне JS, ваш PHP должен использовать '$ _POST' вместо' $ _REQUEST'. Не следует влиять на что-либо примечательное, но просто подумал, что я бы добавил это. – Dutchie432

ответ

1

Ок .. несколько вещей ...


Я думаю, вам нужно устранить эти 2 вещи, это действительно может быть ... 1) Является ли правильное значение передается на страницу PHP? Вы можете проверить это в CONSOLE firebug (расширение для firefox, которое должен иметь каждый разработчик). 2) Действует ли ваша действительная проверка пароля? Введите пароль. Используйте функцию die() для вывода данных на странице PHP. Результат будет также показан в firebug.


Если вы используете $ .post() на стороне JS, ваш PHP должен использовать $ _POST вместо $ _REQUEST. Не следует влиять на что-либо примечательное, но просто подумал, что я бы добавил это.


Этот код немного беспокоит ...

if(valid > 0) { 
    $("label#username_error2").show(); 
}else { 
    $("label#password_error").show(); 
} 

Скорее всего, valid является строка, а не разбирает «0» как 0. Хотя Войти сценарий истина/ложь (0/1), страницы PHP, вызываемые функцией ajax, должны всегда возвращать какую-то структуру. Например ...

Измените свой POST, чтобы ожидать ответ json.

$.post("logincheck.php", { 
    username: $('#username').val(), 
    password: $('#password').val(), 
}, function(response){ 
    setTimeout(function(){   //Note the change here. 
     finishAjax('Info', response); //Note the change here. 
    }, 450);       //Note the change here. 
}, 'json');       //Note the change here. 

Затем создайте функцию PHP, которая вернет пакет json, который будет использовать ваш JS.

function SendJSONResponse($success, $msg=null, $additionalReturnData=null){ 
    $result = array('success'=>$success); 
    if ($msg) $result['msg']=$msg; 
    if ($additionalReturnData) $result=array_merge($reult, $additionalReturnData); 
    die(json_encode($result)); 
} 

После того как вы что, ваш Логин скрипт должен выглядеть как

if (mysqli_num_rows($data) > 0) { 
    SendJSONResponse(
     true, 
     null, 
     array('data'=>$data) //Pass the logged in users info for use in JS 
    ); 
}else { 
    SendJSONResponse(false, 'Username or Password not found'); 
} 

и ваш JS будет выглядеть следующим образом ...

function finishAjax(id, response){ 
    if(response.success) { 
     alert('logged in as ' + response.data.full_name + ' (' + response.data.email + ')'); 
     $("label#username_error2").show(); 
    }else { 
     alert(response.msg); 
     $("label#password_error").show(); 
    } 
}