Вопрос для знатоков JQUERY.

Yauhen

Новичок
Помогите пожалуйста найти ошибку в коде.

Итак у нас есть два скрипта: login.tpl и check.php, когда я передаю заведомо ошибочные данные из login.tpl на check.php по средством JQUERY, не возникает ошибки, а если данные правильные - авторизация проходит успешно.

Итак, у нас есть страница авторизации с использованием JQUERY login.tpl

PHP:
<h2><?=$this->pagename ?></h2>
<div id='log_content'>
<center>
<div id='log_error' style='display: none;margin-bottom: 10px;border: none;padding: 5px;padding-bottom: 3px;box-shadow:0px 3px 3px rgba(255,0,0,0.3);-webkit-box-shadow:0px 3px 3px rgba(255,0,0,0.3);-moz-box-shadow:0px 3px 3px rgba(255,0,0,0.3);-o-box-shadow:0px 3px 3px rgba(255,0,0,0.3);'>
<img src='<?=$this->tpldir ?>images/error_mini.png' width=24 height=24 align=left style='padding-right: 10px;'><p id='log_errort' style='text-align: left;'>
</p>
</div>
<table width=400px style='border: none;'>
<tr style='height: 30px;'>
<td align=left style='border: none;'>
<label>E-Mail:</label></td>
<td align=center style='border: none;'>
<input type='text' name='email' id='log_email'></td>
</tr>

<tr style='height: 30px;'>
<td align=left style='border: none;'>
<label>Пароль:</label></td>
<td align=center style='border: none;'>
<input type='password' name='pass' id='log_pass'></td>
</tr>

<tr style='height: 30px;'>
<td align=left style='border: none;'>
</td>
<td align=center style='border: none;font-weight: bold;'>
<input type='submit' value='Авторизоваться' style='background: none;border: 1px solid #ccc;padding: 3px;' onClick='go_login();'></td>
</tr>
</table>
</div></center>

<script>
function go_login()
{

$('#log_msg').fadeOut();
var log_error;
var log_email=$('#log_email').val();
var log_pass=$('#log_pass').val();
$('#log_error').fadeOut(1000, function() {
        $.ajax({
          type: 'POST',
          url: 'index.php?page=check',
          data: 'check=log&log_email='+log_email+'&log_pass='+log_pass,
          success: function(data){

				switch(data)
				{
					
					case '1': $('#log_errort').html('Некорректно введён E-Mail'); break;
					case '2': $('#log_errort').html('Некорректно введён пароль'); break;
					case '3': $('#log_errort').html('Пользователь с E-Mail '+log_email+' не зарегистрирован'); break;
					case '4': $('#log_errort').html('Неверно введён пароль'); break;
					default: 
$('#log_errort').html(); $('#log_error').fadeOut(); var log_error=1;
$('#log_content').fadeOut(1000, function(){ $('#log_content').html('<center><img src="<?=$this->tpldir ?>images/okay.png"><br>Вы успешно авторизовались!</center><a class="close" href="#close_join"></a>');var delay = 3000;
  setTimeout("document.location.href='/account'", delay);
				});$('#log_content').fadeIn(1000);
				break;
				};
			}
			});
			});
			if(!log_error){ $('#log_error').fadeIn(7000);}else{
			  var delay = 2000;
  setTimeout("document.location.href='/account'", delay);
			}
		

}
</script>
и php скрипт проверки check.php
PHP:
<?
if($_POST['check']=='log')
{	
	#e-mail
	if(!filter_var($_POST['log_email'],FILTER_VALIDATE_EMAIL))
	{
	print '1';
	             exit;	
	
	}
	#синтаксис пароля
	if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['log_pass']))
	{
	print '2';
		exit;
	
	}
	if(!$DATABASE->SelectRow("SELECT * FROM `users` WHERE `email`='".$_POST['log_email']."'"))
	{
	print '3';
		exit;
	
	}
	if(!$DATABASE->SelectRow("SELECT * FROM `users` WHERE `email`='".$_POST['log_email']."' AND `pass`='".md5($_POST['log_pass']."x2")."'"))
	{
	print '4';
		exit;
	
	}
	$id=$DATABASE->SelectRow("SELECT * FROM `users` WHERE `email`='".$_POST['log_email']."' AND `pass`='".md5($_POST['log_pass']."x2")."'");
	$_SESSION['id']=$id['id'];
	$_SESSION['login']=$id['name'];
	


}
?>
т.е. после проверки скрипт check.php устанавливает значение case для switch(data), например 1 и тогда должна выводится ошибка, например: Некорректно введён E-Mail, а этого не происходит.

В чём моя ошибка? Может быть я чего-то не знаю... помогите пожалуйста.
 

Yauhen

Новичок
В общем я нашёл ответ. Всё как всегда оказалось просто. Может кому-нибудь из начинающих постигать jquery будет полезен мой опыт.
Чтобы от php скрипта получить
PHP:
case
значение для switch(data), оказывается, запрос нужно делать json типа и поэтому, чтобы пользователю высвечивались соответствующие ошибки нужно было делать так:

В login.tpl в $.ajax добавить: dataType: 'json', а в php скрипте долбаный print '1'; заменить на $znachenie['err']='1'; echo json_encode($znachenie);

Короче должно было быть вот так:

в login.tpl
PHP:
 $.ajax({
          type: 'POST',
          url: 'index.php?page=check',
	  dataType: 'json',
          data: 'check=log&log_email='+log_email+'&log_pass='+log_pass,
          success: function(data){
		switch(data.err)
				{
					case '1': $('#log_errort').html('Некорректно введён E-Mail'); break;
					case '2': $('#log_errort').html('Некорректно введён пароль'); break;
					case '3': $('#log_errort').html('Пользователь с E-Mail '+log_email+' не зарегистрирован'); break;
					case '4': $('#log_errort').html('Неверно введён пароль'); break;
					case '0': default: 
и т.д.
а check.php должен выглядеть вот так:

PHP:
<?
if($_POST['check']=='log')
{	
	#мыло
	if(!filter_var($_POST['log_email'],FILTER_VALIDATE_EMAIL))
	{
$znachenie['err']='1';
echo json_encode($znachenie);
		exit;
	}
	#синтаксис пароля
	if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['log_pass']))
	{
	$znachenie['err']='2';
echo json_encode($znachenie);
	exit;
	}
	if(!$DATABASE->SelectRow("SELECT * FROM `users` WHERE `email`='".$_POST['log_email']."'"))
	{
	$znachenie['err']='3';
echo json_encode($znachenie);
	exit;
	}
	if(!$DATABASE->SelectRow("SELECT * FROM `users` WHERE `email`='".$_POST['log_email']."' AND `pass`='".md5($_POST['log_pass']."x2")."'"))
	{
	$znachenie['err']='4';
echo json_encode($znachenie);
	exit;
	}
	$id=$DATABASE->SelectRow("SELECT * FROM `users` WHERE `email`='".$_POST['log_email']."' AND `pass`='".md5($_POST['log_pass']."x2")."'");
	$_SESSION['id']=$id['id'];
	$_SESSION['login']=$id['name'];
#усли с логином и паролев всё ОК, тогда продолжаем выполнение скрипта пользовательской части в login.tpl
	$znachenie['err']='0';
echo json_encode($znachenie);


}
?>
И нахрена я только связался с этим jquery?? Хотя признаюсь, было интересно....
 

Redjik

Джедай-мастер
Yauhen
спасибо что поделился решением, но твой код ужасен
 

WMix

герр M:)ller
Партнер клуба
всем: отступы, переводы строк, имена переменных, подход к решению
 
Сверху