Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][AJAX]Ajax nie zwraca błedu
set4812
post 22.06.2013, 18:57:07
Post #1





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 13.04.2010

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


Przerobiłem swój stary formularz logowania na ajax . Wszystko fajnie działa tylko przy błędnym wpisywaniu hasła loginu jak mam poinformowac uzytkownika ze cos jest nie tak? Mam dodane .fail ale nie działa tak jakby pomijało kod
Oto mój kod ajax
  1. function getdetails()
  2. {
  3. var name = $('#user').val();
  4. var haslo = $('#pass').val();
  5. var request=$.ajax
  6. ({
  7. type: "POST",
  8. url: "login.php?id=0",
  9. data: {login:name, pass:haslo}
  10. });
  11. request.fail(function() {
  12. alert("test");
  13. });
  14. request.done(function() {
  15. $('#logowanie').load('index.php #logowanie');
  16. });
  17.  
  18. };

Formularz logowania
  1. function logowanie()
  2. {
  3. if(isset($_SESSION["login"]) && $_SESSION["login"]!==0)
  4. {
  5. echo '<div id="logowanie"> Witaj '.$_SESSION['nick'].' na forum';
  6. echo '<br/><a href="login.php?off=1">Wyloguj</a><br/>';
  7. if($_SESSION['power']>0)
  8. {echo '<a href="panel.php">Panel Admina</a>';}
  9. echo '</div>';
  10. }
  11. else
  12. {
  13. $_SESSION["login"]=0;
  14. $_SESSION['power']=0;
  15. ?>
  16. <div id="logowanie">
  17. <font color="red"><B> Login</B></font><input type="text" name="user" size="8" id="user"><br/>
  18. <B><font color="red">Hasło</font></B><input type="password" name="pass" size="8" id="pass"><br/>
  19. <input type="submit" value="Zaloguj" name="przycisk" onClick ="getdetails()">Jeżeli nie posiadasz jeszcze konta <a href="login.php?id=1">zarejestruj się </a></div>'<?php
  20. }
  21. }

Przetwarzanie formularza
  1. function werfikuj(){
  2. $login=$_POST['login'];
  3. $haslo=$_POST['pass'];
  4. $zapytanie= 'Select * from users where login="'.$login.'" and haslo="'.md5($haslo).'"';
  5. $result = $this->db->query($zapytanie);
  6. if($result->num_rows==1) { echo "Zalogowano poprawnie";$row = $result->fetch_assoc(); $_SESSION['login']=$row['id']; $_SESSION['nick']=$row['login']; $_SESSION['power']=$row['power'];}
  7. else { die(json_encode('zly login lub haslo'));}
  8.  
  9.  
  10. }


Ma ktos jakaś koncepcja jak sprawic zeby fail zadziałał jak uzytkownik wprowadzi błedny login i hasło w tej chwili zeruje sie formularz

Ten post edytował set4812 22.06.2013, 18:57:41
Go to the top of the page
+Quote Post
krzychu0808
post 22.06.2013, 19:08:32
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 2
Dołączył: 1.04.2007
Skąd: Pogorzelica

Ostrzeżenie: (10%)
X----


Nie wiem czy dobrze przeanalizowałem twój kod ale mi się wydaje że błąd tkwi w .fail o ile dobrze pamiętam to zadziała tylko wtedy kiedy nie uda się uruchomić tego pliku php. Więc musisz z pliku php zwracać sobie wartość false lub true, i w skrypcie wykonać odpowiednią akcje.
Go to the top of the page
+Quote Post
set4812
post 22.06.2013, 19:15:22
Post #3





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 13.04.2010

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


Dałem return 0; i nadal nic sad.gif
Jest jakies inne rozwiazanie na ajax zeby zwrocil blad bledne hasło lub login?

Ten post edytował set4812 22.06.2013, 19:16:07
Go to the top of the page
+Quote Post
klocu
post 22.06.2013, 19:16:45
Post #4





Grupa: Zarejestrowani
Postów: 291
Pomógł: 45
Dołączył: 21.08.2007

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


  1. if($result->num_rows==1) { echo "Zalogowano poprawnie";$row = $result->fetch_assoc(); $_SESSION['login']=$row['id']; $_SESSION['nick']=$row['login']; $_SESSION['power']=$row['power'];}
  2. else { die(json_encode('zly login lub haslo'));}


Brak konsekwencji - raz echo raz json. Raczej zwracaj sobie statusy typu true/false, 0/1, albo inaczej.
I w done obrabiaj sobie akcje - jak odpowiedź pozytywna to przeładuj stronę, jak negatywna to wyczyść formularz, ustaw aktywność pola i wyrzuć jakiś komunikat dla odwiedzającego.

--
Chyba, że jak bardzo upierasz się przy tym rozwiązaniu to jeśli logowanie jest nieprawidłowe odpowiadać kodem błędu 403, a jeśli jest ok to kodem 200. Rozwiązanie zależne od własnych preferencji.

Ten post edytował klocu 22.06.2013, 19:17:56
Go to the top of the page
+Quote Post
set4812
post 22.06.2013, 19:24:42
Post #5





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 13.04.2010

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


  1. if($result->num_rows==1) { $row = $result->fetch_assoc(); $_SESSION['login']=$row['id']; $_SESSION['nick']=$row['login']; $_SESSION['power']=$row['power'];
  2. return 1;
  3. }
  4. else { return 0;
  5.  
  6.  
  7. }


Nadal fail nie działa sad.gif
Ma ktoś moze jakis przyklad ktory działa?

Ten post edytował set4812 22.06.2013, 19:28:05
Go to the top of the page
+Quote Post
krzychu0808
post 22.06.2013, 19:47:17
Post #6





Grupa: Zarejestrowani
Postów: 428
Pomógł: 2
Dołączył: 1.04.2007
Skąd: Pogorzelica

Ostrzeżenie: (10%)
X----


  1. request.done(function(wynik) {
  2. if(wynik == 1) {}
  3. else if(wynik == 0) {}
  4. });


pisane na szybko z głowy sprawdź dokładnie:
http://api.jquery.com/jQuery.ajax/

Ten post edytował krzychu0808 22.06.2013, 19:48:23
Go to the top of the page
+Quote Post
amii
post 22.06.2013, 19:52:11
Post #7





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Tak jak kolega wyżej napisał w skrypcie zwróć ale nie return tylko echo odpowiedni status a później instrukcją warunkową obsłuż to w JS


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
set4812
post 22.06.2013, 20:35:12
Post #8





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 13.04.2010

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


Moze ktos mi wytlumaczyc czemu alert(wynik) zwraca mi
  1. <!DOCTYPE html
  2.  
  3. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  4.  
  5. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  6.  
  7. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  8.  
  9.  
  10. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  11.  
  12. <link rel="Stylesheet" type="text/css" href="style.css" />
  13.  
  14. <title>Rejestracja</title>
  15.  
  16. <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js">
  17.  
  18.  
  19. <script type="text/javascript" src="jquery.js">
  20.  
  21.  
  22. </head>
  23.  
  24.  
  25. <br />
  26. <font size='1'><table class='xdebug-error xe-notice xe-scream' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
  27. <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> SCREAM: Error suppression ignored for</th></tr>
  28. <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: id in C:\wamp\www\test\login.php on line <i>28</i></th></tr>
  29. <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
  30. <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
  31. <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0005</td><td bgcolor='#eeeeec' align='right'>684624</td><td bgcolor='#eeeeec'>{main}( )</td><td title='C:\wamp\www\test\login.php' bgcolor='#eeeeec'>..\login.php<b>:</b>0</td></tr>
  32. </table></font>
  33. </body>
  34.  
  35. </html>

Dopiero ucze sie ajax i nie rozumiem jeszcze jego w działania.
Dobra juz wiem skad ten html sie bierze zeby sie go pozbyc musze go uciac czy jest jakas inna metoda?

Ten post edytował set4812 22.06.2013, 21:39:16
Go to the top of the page
+Quote Post
krzychu0808
post 22.06.2013, 21:40:54
Post #9





Grupa: Zarejestrowani
Postów: 428
Pomógł: 2
Dołączył: 1.04.2007
Skąd: Pogorzelica

Ostrzeżenie: (10%)
X----


Zwrócił ci błąd wykonania pliku PHP. Masz błąd w pliku login.php
Notice: Undefined index: id in C:\wamp\www\test\login.php on line 28

I aby nie było problemu możesz sobie dodać:
  1. request.done(function(wynik) {
  2. if(wynik == 1) {}
  3. else if(wynik == 0) {}
  4. else { OBSŁUGA BŁĘDU, JEŻELI WYSTĄPI BŁĄD W WYKONANIU PLIKU PHP } // <<<<<<<<<<<
  5. });


Ten post edytował krzychu0808 22.06.2013, 21:41:37
Go to the top of the page
+Quote Post
set4812
post 22.06.2013, 21:45:06
Post #10





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 13.04.2010

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


Krzychu naprawiłem błąd ale on mi nadal zwraca html. Zwraca mi wszystko do body bo po wykonaniu ajax zabijam skrypt . Z tego co wyczytałem Ajax odczytuje wszystko jak idzie a ze moje skrypty wykonuja sie w body to pobiera html do tego miejsca
Go to the top of the page
+Quote Post
krzychu0808
post 22.06.2013, 22:03:16
Post #11





Grupa: Zarejestrowani
Postów: 428
Pomógł: 2
Dołączył: 1.04.2007
Skąd: Pogorzelica

Ostrzeżenie: (10%)
X----


Musisz stworzyć sobie osobny plik PHP który będzie zawierał tylko i wyłącznie połączenie z bazą + ta funkcja twoja weryfikacji. Tak aby po wykonaniu programu wyświetliło się 0 lub 1 tylko. Bo ajax po wykonaniu skryptu pobiera treść która się wyświetla i odczytujesz sobie ją w zmiennej wynik.

Tylko może być taka sytuacja że .done zwraca wynik ubrany w html.

Ja to robię tak:
  1. $.ajax({
  2. type: "POST",
  3. url: 'ranking.php',
  4. data: { nick:nick, zdobyte_pkt:zdobyte_pkt },
  5. beforeSend: function (data) {
  6. },
  7. success: function(data) {
  8. if(data == 1) ..............................................
  9. },
  10. error: function(data) { alert("Błąd"); }
  11. });



Ten post edytował krzychu0808 22.06.2013, 22:30:13
Go to the top of the page
+Quote Post

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: 25.04.2024 - 00:33