Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [AJAX][JavaScript] Jak przed wysłaniem formularza sprawdzić czy e-mail wpisany w input jest już w bazie ?
Elber
post 13.01.2012, 19:57:42
Post #1





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

Ostrzeżenie: (0%)
-----


Witam,

od razu zacznę że nie mam kompletnego pojęcia o AJAX'ie sad.gif A szukam jak sprawdzić nie wysyłając formularza czy podany e-mail istnieje w bazie, chciałbym aby przy kliknięciu w <input type="submit" /> wyskoczył alert js. Jak coś takiego najprościej uzyskać ?


--------------------
GG: 564555
Go to the top of the page
+Quote Post
jaslanin
post 13.01.2012, 20:22:33
Post #2





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

Ostrzeżenie: (0%)
-----


http://api.jquery.com/jQuery.post/

Dokładnie to przypatrz się:

Example: Posts to the test.php page and gets contents which has been returned in json format
Kod
<?php echo json_encode(array("name"=>"John","time"=>"2pm")); ?>

Kod
$.post("test.php", { "func": "getNameAndTime" },
function(data){
   console.log(data.name); // John
   console.log(data.time); //  2pm
}, "json");


Ten post edytował jaslanin 13.01.2012, 20:23:28


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
Elber
post 13.01.2012, 20:31:49
Post #3





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

Ostrzeżenie: (0%)
-----


W sumie to niby coś znalazłem

Kod
$(document).ready(function(){
                    $("#email").change(function(){
                        var email = $("#email").val();
                    if(email.length > 3){
                        $("#status").html(\'Trwa sprawdzanie...\');

                        $.ajax({
                            type: "POST",
                            url: "email.php",
                            data: "email="+ email,
                            success: function(server_response){
                            
                                $("#status").ajaxComplete(function(event, request){
                                    if(server_response == \'0\'){
                                        $("#status").html(\'<font color="Green">Available</font>\');
                                        CheckEmail = true;
                                    } else if(server_response == \'1\'){
                                        $("#status").html(\'<font color="red">Not Available</font>\');
                                        CheckEmail = false;
                                    }
                                });
                            }
                        });
                    } else {
                        $("#status").html(\'<font color="#cc0000">Username too short</font>\');
                        CheckEmail = false;
                    }

                    return false;
                    });


Ale nie wiem dokładnie jakim POSTem te dane są przesyłane żeby zrobić if(isset($_POST['co tu ?'])){}


--------------------
GG: 564555
Go to the top of the page
+Quote Post
jaslanin
post 13.01.2012, 21:16:18
Post #4





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

Ostrzeżenie: (0%)
-----


Sam zapisałeś co wysyłasz:
Kod
data: "email="+ email,


więc tam gdzie masz co tu? powinno być email


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
Elber
post 13.01.2012, 21:22:53
Post #5





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

Ostrzeżenie: (0%)
-----


Doszedłem do tego smile.gif Ale teraz mam problem, otórz cały czas wyskakuje mi info że podany email istnieje ... oto mój kod:

Kod
<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'></script>
                <script type='text/javascript'>
                    var CheckEmail;

                    function check(form){
                        var message ="";
                        if(form.email.value == ""){
                            message +="Proszę wpisać adres e-mail !\n";
                        }
                        if(message != ""){
                            alert(message);
                            return false;
                        }
                        if(!CheckEmail){
                            alert('Podany adres e-mail już istnieje w naszej bazie !');
                            return false;
                        }
                    }
                    
                    $(function(){
                    $("#email").change(function(){
                        var email = $("#email").val();
                    if(email.length > 3){
                        $.ajax({
                            type: "POST",
                            url: "email.php",
                            data: "check_email="+ email,
                            success: function(server_response){
                            
                                $("#status").ajaxComplete(function(event, request){
                                    if(server_response == '0'){
                                        CheckEmail = true;
                                    } else if(server_response == '1'){
                                        CheckEmail = false;
                                    }
                                });
                            }
                        });
                    } else {
                        CheckEmail = false;
                    }

                    return false;
                    })
                });
                </script>


Gdzie są błędy questionmark.gif


--------------------
GG: 564555
Go to the top of the page
+Quote Post
potreb
post 13.01.2012, 22:12:41
Post #6





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


A php zwraca ci poprawny wynik? Używaj firebuga do sprawdzania błędów js.

Ten post edytował potreb 13.01.2012, 22:13:40


--------------------

Go to the top of the page
+Quote Post
Elber
post 13.01.2012, 23:06:22
Post #7





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

Ostrzeżenie: (0%)
-----


Jak to zrobić aby nie musieć tworzyć osobnego pliku .php tylko np. wstawić kod odpowiedzialny za sprawdzanie czy e-mail jest przed wyświetlenie formularza questionmark.gif Co php powinien zwracać questionmark.gif

Co PHP powinien zwracać żeby zadziałał ten JS ?


--------------------
GG: 564555
Go to the top of the page
+Quote Post
erix
post 13.01.2012, 23:10:24
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Jak to zrobić aby nie musieć tworzyć osobnego pliku .php tylko np. wstawić kod odpowiedzialny za sprawdzanie czy e-mail jest przed wyświetlenie formularza Co php powinien zwracać

Surową odpowiedź, bez żadnych widoków.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Elber
post 13.01.2012, 23:22:34
Post #9





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

Ostrzeżenie: (0%)
-----


czyli w tym wypadku 1 bądź 0 questionmark.gif Bo jak dam echo '1'; bądź echo '0'; to i tak nie działa ... cały czas wyskakuje że e-mail jest już w bazie

EDIT:

OKI biggrin.gif Ogarnąłem to biggrin.gif Działa tak jak należy...ale da się jakoś zrobić aby ta funkcja sprawdzania w php nie była w oddzielnym pliku questionmark.gif Tylko w tym co mam ten kawałek z formularzem ?


--------------------
GG: 564555
Go to the top of the page
+Quote Post
erix
post 13.01.2012, 23:23:01
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A o czym napisałem?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Elber
post 13.01.2012, 23:33:48
Post #11





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

Ostrzeżenie: (0%)
-----


Ok, rozumiem w takim razie ze nie ma takiej opcji ... Mam jeszcze jedno pytanko smile.gif Bo jak standardowo generuje formularz to automatycznie do value="" ładuje się e-mail z bazy danej osoby którą chce zedytować, a skrypt js sprawdza tego maila dopiero po tym jak wartość tego inputu się zmieni, czyli jak akurat e-maila nie chce edytować to wywala że e-mail jest błędy, dopiero jak zmienię tam coś i z powrotem na ten stary to działa...jak to ominąć questionmark.gif


--------------------
GG: 564555
Go to the top of the page
+Quote Post
Ilware
post 13.01.2012, 23:35:22
Post #12





Grupa: Zarejestrowani
Postów: 248
Pomógł: 31
Dołączył: 14.12.2010
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Ni da się , twój plik zwraca sporą część treści + nagłówki, które AJAX potraktuje jako string i uzna że jest błąd, dlatego musisz to mieć w osobnym pliku, najlepiej takim który jest przystosowany do JSON'a.

Oprócz maila masz pewnie jeszcze jakieś inne dane np Login czy nazwę, więc sprawdź czy dana nazwa jest powiązana z tym mailem, jeżeli tak to przepuść. Generuje to oczywiście możliwość że powstaną dwie identyczne nazwy z identycznym mailem. Więc jeżeli mail i nazwa się zgadzają to po porostu ich nie edytuj.

Ten post edytował Ilware 13.01.2012, 23:38:16


--------------------
Jeżeli pomogłem kliknij "Pomógł" :)
Go to the top of the page
+Quote Post
Elber
post 13.01.2012, 23:42:28
Post #13





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

Ostrzeżenie: (0%)
-----


Sprawdzając czy Mail jest już w bazie wysyłam id usera i mail z formualarza, tak wygląda kod:

  1. $zap = mysql_query('SELECT id FROM partners WHERE email = "'.$email.'" AND id <> "'.$id.'"');
  2.  
  3. if(mysql_num_rows($zap) <> 0){
  4. echo 1;
  5. } else {
  6. echo 0;
  7. }


Ogólnie wydaje mi się że muszę w tym JS gdzie teraz jest $("#email").change(function(){ zmienić to change na coś innego, tylko za bardzo nie wiem na co ...


--------------------
GG: 564555
Go to the top of the page
+Quote Post
Ilware
post 13.01.2012, 23:49:04
Post #14





Grupa: Zarejestrowani
Postów: 248
Pomógł: 31
Dołączył: 14.12.2010
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


według kodu js który dałeś wcześniej nie przekazujesz id więc nie wiem czemu się do niego odwołujesz, ale w sumie przez przypadek w dobrym kierunku idziesz.

  1. SELECT id FROM partners WHERE email = "'.$email.'"


a następnie sprawdź czy id jakie dostałeś z bazy danych nie jest równe temu które wysłałeś AJAX'em, jeżeli tak to przepuść jeżeli nie to zablokuj smile.gif


--------------------
Jeżeli pomogłem kliknij "Pomógł" :)
Go to the top of the page
+Quote Post
Elber
post 13.01.2012, 23:53:54
Post #15





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

Ostrzeżenie: (0%)
-----


Mój kod JS teraz wygląda tak:

Kod
<script type='text/javascript'>
                    var CheckEmail = "";
                    
                    $(function(){
                        $("#email").change(function(){
                            var email = $("#email").val();
                            var id = "'.$_GET['id'].'";
                        
                            if(email.length > 3){
                                $.ajax({
                                    type: "POST",
                                    url: "ajax.php",
                                    data: {check_email: email, id: id},
                                    success: function(result){
                                        if(result == 0){
                                            CheckEmail = true;
                                        } else if(result == 1){
                                            CheckEmail = false;
                                        }
                                    }
                                });
                            } else {
                                CheckEmail = false;
                            }
                            return false;
                        })
                    });
                    
                    function check(form){
                        var message = "";
                        if(form.email.value == ""){
                            message +="Proszę wpisać adres e-mail !\n";
                        }
                        if(message != ""){
                            alert(message);
                            return false;
                        }
                        if(!CheckEmail){
                            alert('Podany adres e-mail już istnieje w naszej bazie !');
                            return false;
                        }
                    }
                </script>


I teraz najlepszą opcją było by aby ten e-mail sprawdzał się w momencie kliknięcia na submit, bo teraz sprawdza się po każdej zmianie inputa...tylko jak zmienię tam z

$("#email").change(function(){

na

$("#submit").click(function(){

to formularz się nie wysyła ...

Ten post edytował Elber 13.01.2012, 23:56:01


--------------------
GG: 564555
Go to the top of the page
+Quote Post
Ilware
post 14.01.2012, 00:07:42
Post #16





Grupa: Zarejestrowani
Postów: 248
Pomógł: 31
Dołączył: 14.12.2010
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


w form dodaj wywołanie onSubmit="return twoja_funkcja_sprawdzajaca()" jeżeli zwrócisz w niej true to formularz się wyśle jak false to zablokuje wysyłkę formularza


--------------------
Jeżeli pomogłem kliknij "Pomógł" :)
Go to the top of the page
+Quote Post
Elber
post 14.01.2012, 00:20:44
Post #17





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

Ostrzeżenie: (0%)
-----


Tam mam już onsubmit="return check(this); do sprawdzenia czy jest coś wpisane w inputy smile.gif)


--------------------
GG: 564555
Go to the top of the page
+Quote Post
Ilware
post 14.01.2012, 00:26:11
Post #18





Grupa: Zarejestrowani
Postów: 248
Pomógł: 31
Dołączył: 14.12.2010
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


to do tej funkcji sprawdzającej dopisz AJAX'a i masz problem rozwiązany . smile.gif


--------------------
Jeżeli pomogłem kliknij "Pomógł" :)
Go to the top of the page
+Quote Post
Elber
post 14.01.2012, 00:30:17
Post #19





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

Ostrzeżenie: (0%)
-----


Na to nie wpadłem, tylko nie wiem czy dobrze je połączyłem

Kod
                <script type=\'text/javascript\'>
                    function check(form){
                        var message = "";

                        if(form.email.value == ""){
                            message +="Proszę wpisać adres e-mail !\n";
                        }
                        if(form.name.value == ""){
                            message +="Proszę wpisać nazwę firmy !\n";
                        }
                        if(form.address.value == ""){
                            message +="Proszę wpisać adres firmy !\n";
                        }
                        if(form.postcode.value == ""){
                            message +="Proszę wpisać kod pocztowy !\n";
                        }
                        if(form.city.value == ""){
                            message +="Proszę wpisać nazwę miasta !\n";
                        }
                        if(form.nip.value == ""){
                            message +="Proszę wpisać NIP !\n";
                        }
                        if(message != ""){
                            alert(message);
                            return false;
                        }

                        var CheckEmail = "";

                        var email = $("#email").val();
                        var p_id = "'.$_GET['id'].'";

                        $.ajax({
                            type: "POST",
                            url: "live_query.html",
                            data: {check_email: email, p_id: id},
                            success: function(result){
                                if(result == 0){
                                    CheckEmail = true;
                                } else if(result == 1){
                                    CheckEmail = false;
                                }
                            }
                        });
                        
                        if(!CheckEmail){
                            alert(\'Podany adres e-mail już istnieje w naszej bazie !\');
                            return false;
                        }
                    }
                </script>


--------------------
GG: 564555
Go to the top of the page
+Quote Post
Ilware
post 14.01.2012, 00:35:04
Post #20





Grupa: Zarejestrowani
Postów: 248
Pomógł: 31
Dołączył: 14.12.2010
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Kod wygląda okej, ale jedna rzecz rzuciła mi się w oczy $_GET['id'], jeżeli pobierasz id z urla to kod będzie bardzo podatny na ataki, zwłaszcza że później przez to id validujesz coś. Spróbuj je jakoś zakodować (choćby base64 , zawsze coś), a najlepiej jak byś przekazywał je w post a nie w get smile.gif

p.s.
masz błąd w nazwie zmiennych

  1. var p_id = "'.$_GET['id'].'"; //tworzysz p_id
  2. data: {check_email: email, p_id: id}, // a przekazujesz id powinno być id : p_id


no i strona powinna być skryptem php a masz html

  1. url: "live_query.html",


Ten post edytował Ilware 14.01.2012, 00:37:14


--------------------
Jeżeli pomogłem kliknij "Pomógł" :)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.05.2025 - 21:10