Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Возвращение результата с сервера (https://javascript.ru/forum/jquery/31226-vozvrashhenie-rezultata-s-servera.html)

red-nicolas 30.08.2012 17:31

Возвращение результата с сервера
 
Проверяю введены данные с формы на уникальность. Для отправки на сервер использую скрипт:
$("form").submit(function(){
    var checkString = $("#cat").val();
	var data= 'cat='+ checkString;
    if(checkString) {
        $.ajax({
            type: "POST",
            url: "test.php",
            data:data,
            success: function(html){ // получаем результаты
               		$("#massege").text(html);
					return html;
				    }
        });
}
});


Для проверки такой пхп
$cat=$_POST['cat'];
//если к нам идёт $_POST запрос
if (isset($_POST['cat'])) {

$db=mysql_connect ("localhost", "u1624514_chef", "design-1984");
mysql_select_db ("u1624514_osnova",$db); 
mysql_query('SET NAMES utf8');
	
$r=mysql_query ("SELECT id FROM 001_cat WHERE cat='$cat'",$db);
$m=mysql_fetch_array ($r);
    // получаем результаты
    if($m['id'] == 0) {
		return true;
    } else {
		return false;
    }
}


Не пойму как в случае уникальности отправить форму на добавления, в противном случае вывести сообщение об не уникальности?

Serg_pnz 30.08.2012 18:53

Как-то так

if($m['id'] == 0) {
//тут сделать инсерт и вернуть 1
	    echo 1;
//это не нужно	        return true;
	    } else {
	    echo 0;
//это не нужно	        return false;
	    }


success: function(html){ // получаем результаты

//проверить html на 1 или 0 и алертом "Вы зарегистрированы" или "Логин не уникален"

//это не нужно	                    $("#massege").text(html);
//это не нужно	                    return html;
	                    }

red-nicolas 01.09.2012 15:18

$("form").submit(function(){
    // получаем то, что ввёл пользователь
    var checkString = $("#cat").val();
	var data= 'cat='+ checkString;
    // если checkString не пуста
    if(checkString) {
        $.ajax({
            type: "POST",
            url: "test.php",
            data:data,
            success: function(html){ // получаем результаты
               		$("#massege").text(html);
					if(html==1){var result=true;}else{var result=false;}
										return result;
				    }
        });
}


Сделал так, но форма все равно отправляется. Как не отправлять форму если значение уже есть в базе?

Serg_pnz 01.09.2012 15:38

Никак. Всё равно первым пунктом будет отправка формы на сервер, вторым - проверка в базе. Можно снести форму, если при проверке окажется, что значение есть в базе.

red-nicolas 01.09.2012 16:36

Цитата:

Сообщение от Serg_pnz (Сообщение 202282)
Никак. Всё равно первым пунктом будет отправка формы на сервер, вторым - проверка в базе. Можно снести форму, если при проверке окажется, что значение есть в базе.

Если добавить в функцию return false

$("form").submit(function(){
    // получаем то, что ввёл пользователь
    var checkString = $("#cat").val();
	var data= 'cat='+ checkString;
    // если checkString не пуста
    if(checkString) {
        $.ajax({
            type: "POST",
            url: "test.php",
            data:data,
            success: function(html){ // получаем результаты
               		$("#massege").text(html);
					if(html==1){var result=true;}else{var result=false;}
					alert(result);
					return result;
					$("form").text(result);
				    }
        });
}
return false; 
});


то форма не отправиться, как мне в это место (return false) вывести значение result?

Deff 01.09.2012 16:38

red-nicolas,
:) Как скрипт узнает, что значение есть в базе, без отправки формы ?
Или база заранее уже передана на клиента ?

red-nicolas 01.09.2012 16:43

Цитата:

Сообщение от Deff (Сообщение 202305)
red-nicolas,
:) Как скрипт узнает, что значение есть в базе, без отправки формы ?
Или база заранее уже передана на клиента ?


Через $.ajax, в коде выше происходит аякс запрос и в зависимости от ответа возвращается 1 или 0. Но как отправлять или не отправлять форму от этих результатов я не пойму.

Deff 01.09.2012 17:46

Цитата:

Сообщение от red-nicolas
Через $.ajax, в коде выше происходит аякс запрос и в зависимости от ответа возвращается 1 или 0. Но как отправлять или не отправлять форму от этих результатов я не пойму.

:)Может так ?
$("form").submit(function(){
    // получаем то, что ввёл пользователь
    var checkString = $("#cat").val();
	var data= 'cat='+ checkString;
    // если checkString не пуста
    if(checkString) {
        $.ajax({
            type: "POST",
            url: "test.php",
            data:data,
            success: function(html){ // получаем результаты
               		$("#massege").text(html);
					if(html==1){var result=true;
*!*
					$("form").submit();
*/!*
					}else{var result=false;}
					alert(result);
					return result;
				    }
        });
}
return false; 
});

red-nicolas 01.09.2012 20:54

Такой вариант не срабатывает, получается цикл.

Я немного поменял код:

$("form").submit(function(){
	var checkString = $("#cat").val();
    	$.post(
  "test.php",
  {
    cat: checkString
  },
  function(data){
	  alert(data);
	  
	  });

});


В data возвращается 1 или 0 в зависимости от уникальности. Как в таком случае не отправлять форму если пришел 0 и отправить если пришло 1?

Serg_pnz 01.09.2012 21:15

Повторно что ли не отправлять? А если юзер хочет уже другое что-то отправить? А если он отправит по очереди "Яблоко", "Груша", "Яблоко"?
Не страдайте ерундой...
Или объясните что вам надо сделать, но без кода, а на нормальном русском языке, с чувством, толком, расстановкой.

red-nicolas 01.09.2012 21:35

Цитата:

Сообщение от Serg_pnz (Сообщение 202408)
Повторно что ли не отправлять? А если юзер хочет уже другое что-то отправить? А если он отправит по очереди "Яблоко", "Груша", "Яблоко"?
Не страдайте ерундой...
Или объясните что вам надо сделать, но без кода, а на нормальном русском языке, с чувством, толком, расстановкой.

Мне надо что бы не повторялся логин при добавлении в базу.

Serg_pnz 01.09.2012 22:04

Ну и пусть себе отправляет форму хоть стопятьсот раз.
НО! Скрипт пхп каждый раз должен проверять есть логин или нет.
• Если есть, то авторизуем пользователя, пишем ему куку, что авторизован, а js уже можно посмотреть куку и не отправлять повторно, но для всяких умников всё равно пхп должен отрабатывать левый запрос (курлами там можно отправить или еще как).
• Если нет, то регистрируем пользователя (инсерт в базу) и тут же его, пользователя авторизуем или отправляем мыло на завершение авторизации.

ЗЫ: аутентификация именно на куках - первое, что пришло в голову.

red-nicolas 01.09.2012 22:30

Цитата:

Сообщение от Serg_pnz (Сообщение 202428)
Ну и пусть себе отправляет форму хоть стопятьсот раз.
НО! Скрипт пхп каждый раз должен проверять есть логин или нет.
• Если есть, то авторизуем пользователя, пишем ему куку, что авторизован, а js уже можно посмотреть куку и не отправлять повторно, но для всяких умников всё равно пхп должен отрабатывать левый запрос (курлами там можно отправить или еще как).
• Если нет, то регистрируем пользователя (инсерт в базу) и тут же его, пользователя авторизуем или отправляем мыло на завершение авторизации.

ЗЫ: аутентификация именно на куках - первое, что пришло в голову.

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

Serg_pnz 02.09.2012 11:09

Я вижу тут с логикоя бЯда...

Всё будет без перезагрузки. Пусть юзер отправляет свои данные, а вы уж там их принимайте и выдавайте управляющее воздействие. На маленьких проектах я прям ответом генерю js-код, сообщающий об ошибке, для больших надо бы json притягивать.

Итак, есть форма и незарегистрированный пользователь, так пусть пользователь вводит данные. Как только он правильно введет пару логин/пароль, то надо ее скрыть со страницы.
Как я писал выше - надо поддерживать аутентификацию. Если уже зарегистрированный юзер, то форму ему не показываем (например при обновлении страницы) - так не будет левых вводов со страницы.
Ошибки можно выводить алертом или еще как, блокируя страницу.


Часовой пояс GMT +3, время: 18:36.