Inlogformulier checken met AJAX

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

22/09/2012 01:04:40
Quote Anchor link
Op m'n website staat een inlogformulier, die ik graag met AJAX wil posten.
Mijn hele formulierverwerking staat op de pagina zelf, en wordt nu met POST opgevraagd. Zodra er een fout is opgetreden wordt er een foutmelding bovenaan de pagina weergegeven met JavaScript, maar deze wordt nu dus pas weergegeven nadat het formulier gepost is (en de pagina feitelijk ververst).

Het gaat mij er dus alleen om dat de pagina niet hoeft te verversen, maar dit met AJAX gebeurt. Kan iemand mij uitleggen hoe ik dit kan doen?

Toevoeging op 22/09/2012 01:05:17:

Ter informatie, mijn inlogformulier bestaat uit een input voor het e-mailadres en het wachtwoord, dat is het.
 
PHP hulp

PHP hulp

25/11/2024 21:19:56
 
Crispijn -

Crispijn -

22/09/2012 13:14:31
Quote Anchor link
Even op google gezocht en ik kwam dit tegen als voorbeeld:

http://woork.blogspot.nl/2007/10/login-using-ajax-and-php.html
 

22/09/2012 20:02:23
Quote Anchor link
Ik ben er even mee aan de slag gegaan, maar ik kom er niet uit. Het resultaat kun je bekijken op http://www.nieuwnieuws.eu zodra je het inlogformulier op de homepage verstuurt.

Het bestand ajax.js:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function createObject(){
var request_type;
var browser=navigator.appName;
if(browser=="Microsoft Internet Explorer"){
request_type=new ActiveXObject("Microsoft.XMLHTTP");
}else{
request_type=new XMLHttpRequest();
}
return request_type;
}
var http=createObject();

var nocache=0;
function inloggen(){
    document.getElementById("status").innerHTML="Laden..."
    var emailadres=encodeURI(document.getElementById("nn_emailadres").value);
    var wachtwoord=encodeURI(document.getElementById("nn_wachtwoord").value);
    nocache=Math.random();
    http.open("get","index.php?emailadres="+emailadres+"&wachtwoord="+wachtwoord+"&nocache="+nocache);
    http.onreadystatechange=status;
    http.send(null);
}
function status(){
if(http.readyState==4){
var response=http.responseText;
if(response==0){
    document.getElementById("status").innerHTML="Nee";
}else{
    document.body.innerHTML=response;
}}}


De HTML in index.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<form action="javascript:inloggen()" method="POST">
                        <label for="nn_emailadres"></label><input type="text" id="nn_emailadres" name="nn_emailadres" value="<?php if(isset($_SESSION["E-mailadres"])){echo $_SESSION["E-mailadres"];}else{echo "E-mailadres";} ?>" onfocus="if(this.value=='E-mailadres')this.value='';" onblur="if(this.value=='')this.value='E-mailadres';">
                        <input type="text" id="nn_wachtwoord2" value="Wachtwoord">
                        <label for="nn_wachtwoord"></label><input type="password" id="nn_wachtwoord" name="nn_wachtwoord">
                        <input type="hidden" id="veiligheid" name="veiligheid">
                        <input type="submit" id="inloggen" name="inloggen" value="Doorgaan">
                    </form>
                    <div id="status"></div>


En de verwerking in de index.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
$gebruiker
=false;
$fgeb1=array();
if(!$gebruiker){
    if(database()){
        if(isset($_GET["emailadres"])){
            if(isset($_GET["wachtwoord"])){
                $qgeb1=mysql_query("SELECT *** FROM *** WHERE Emailadres='".mysql_real_escape_string($_GET["emailadres"])."' LIMIT 1");
                if($qgeb1){
                    if(mysql_num_rows($qgeb1)==1){
                        $rgeb1=mysql_fetch_assoc($qgeb1);
                        if(ctype_digit($rgeb1["PID"])){
                            if($rgeb1["Wachtwoord"]==sha1($_GET["wachtwoord"])){
                                $ageb1=array("1","11","1001","1011","1101","1111","10001","10011","10101");
                                if(in_array($rgeb1["Status"],$ageb1)){
                                    $vc=nieuweveiligheidscode($rgeb1["Veiligheidscode"]);
                                    $qgeb2=mysql_query("UPDATE *** SET Veiligheidscode='".mysql_real_escape_string($vc)."' WHERE PID='".mysql_real_escape_string($rgeb1["PID"])."' LIMIT 1");
                                    if($qgeb2){
                                        $_SESSION["Gebruiker"]=htmlspecialchars($vc);
                                        if(isset($_SESSION["Gebruiker"])){
                                            $_SESSION["Ingelogd"]=true;
                                            if($_SESSION["Ingelogd"]==true){
                                                $gebruiker=true;
                                            }
else{
                                                $fgeb1[]="1";
                                            }
                                        }
else{
                                            $fgeb1[]="2";
                                        }
                                    }
else{
                                        $fgeb1[]="3";
                                    }
                                }
else{
                                    $fgeb1[]="4";
                                }
                            }
else{
                                $fgeb1[]="5";
                            }
                        }
else{
                            $fgeb1[]="6";
                        }
                    }
else{
                        $fgeb1[]="7";
                    }
                }
else{
                    $fgeb1[]="8";
                }
            }
else{
                $fgeb1[]="9";
            }
        }
else{
            $fgeb1[]="10";
        }
    }
else{
        $fgeb1[]="11";
    }
}
else{
    $fgeb1[]="12";
}

?>


Ik kom er niet uit...

Toevoeging op 22/09/2012 20:17:47:

Even voor de duidelijkheid, zodra er een fout optreedt (die met de $fgeb1 wordt aangegeven), moet er met JavaScript een foutmelding bovenaan de pagina worden weergegeven.
Deze doet het nu al, maar ik heb ook geen idee hoe ik dit dan kan combineren met AJAX.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$(document).ready(function(){$("#DocumentationWarning").delay(400).slideDown(100).delay(5000).slideUp(100);});


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<div id="DocumentationWarning">
            <?php
            if($fm==1){
                foreach($fgeb1 as$f){
                    $qfou1=mysql_query("SELECT *** FROM *** WHERE Code='".mysql_real_escape_string($f)."' LIMIT 1");
                    if($qfou1){
                        if(mysql_num_rows($qfou1)==1){
                            $rfou1=mysql_fetch_assoc($qfou1);
                            if(ctype_digit($rfou1["Code"])){
                                if($rfou1["Status"]=="1"){
                                    echo $rfou1["Informatie"];
                                }
else{
                                    echo "Foutmelding: ".$f;
                                }
                            }
else{
                                echo "Foutmelding: ".$f;
                            }
                        }
else{
                            echo "Foutmelding: ".$f;
                        }
                    }
else{
                        echo "Foutmelding: ".$f;
                    }
                }
            }
else{
                foreach($fgeb1 as$f){
                    echo "Foutmeldingen: ".$f;
                }
            }

            ?>

        </div>
Gewijzigd op 23/09/2012 16:32:46 door
 

27/09/2012 02:59:15
Quote Anchor link
Bump
 

30/09/2012 18:19:05
Quote Anchor link
Bump
 
Jaron T

Jaron T

30/09/2012 20:50:14
Quote Anchor link
Waarom gebruik je het jQuery framework wel voor de delay maar niet voor het ajax request? Je bent het wiel opnieuw aan het uitvinden en je code is zeer lelijk met al die else foutmeldingen.
 

30/09/2012 23:06:27
Quote Anchor link
Hoe moet ik dat doen dan? En bedankt, kun je ook aangeven hoe jij het dan zou doen?
 
Kris Peeters

Kris Peeters

01/10/2012 10:30:03
Quote Anchor link
Jaron T op 30/09/2012 20:50:14:
Waarom gebruik je het jQuery framework wel voor de delay maar niet voor het ajax request? ...


Ongeveer op deze manier.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<form action="" method="post" id="my_form">
...
</form>
<script>
$(document).ready(function($) {
  // elementen cachen
  var my_form       = $("#my_form");
  var status        = $("#status");
  var nn_emailadres = $("#nn_emailadres");
  var nn_wachtwoord = $("#nn_wachtwoord");
  
  $("#my_form").submit(function(e) {
    e.preventDefault();
    // ajax request beginnen
    var emailadres = encodeURI(nn_emailadres.val());
    var wachtwoord = encodeURI(nn_wachtwoord.val());
    $.ajax({
      url: "index.php?emailadres=" + emailadres + "&wachtwoord=" + wachtwoord,
      success: function(responseText) {
        status.html(responseText);
      }
    });
  });
});
</script>
 
Jaron T

Jaron T

01/10/2012 10:33:06
Quote Anchor link
http://api.jquery.com/jQuery.post/

oftwel;

$.post("je_url.php", $("#je_form_id).serialize(), function(data){
// doe iets met data (is de output van je ajax request, async)
}):
 
Kris Peeters

Kris Peeters

01/10/2012 11:00:02
Quote Anchor link
Wel ja, een tweede ding ...
Je kan dit inderdaad beter met POST doen dan met GET.

Maar dan zal je dit ook moeten aanpassen in je php-gedeelte; vergeet dat niet.
Gewijzigd op 01/10/2012 11:20:06 door Kris Peeters
 

18/12/2012 23:45:25
Quote Anchor link
@Jaron T:
Hoe kan ik zorgen dat ik al die else's niet nodig heb voor mijn foutmeldingen? Ik ben erg benieuwd naar hoe jij dat doet.

Voor de rest, bedankt voor jullie tips.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/12/2012 00:30:08
Quote Anchor link
Mario,

functies is het antwoord tegen diepe if/else lussen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function login($user, $pass) {

   if(strlen($user) < 4)
      return false;

   if(strlen($pass) < 4)
      return false;

   // en verder

   return true;
}


?>
Gewijzigd op 19/12/2012 00:31:41 door Frank Nietbelangrijk
 
Kris Peeters

Kris Peeters

19/12/2012 09:18:47
Quote Anchor link
Mario Geheim op 18/12/2012 23:45:25:
... Hoe kan ik zorgen dat ik al die else's niet nodig heb voor mijn foutmeldingen? ...


Wel, die hierarchie is wel wat overdreven.
Elke else doet het zelfde; als je echt wil, kan je dingen samen nemen.

Een voorbeeld; een beetje overdreven. We proppen alles in de if() conditie.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
if($fm==1) {
  foreach($fgeb1 as$f) {
      
      $qfou1=mysql_query("SELECT *** FROM *** WHERE Code='".mysql_real_escape_string($f)."' LIMIT 1");
      
      if($qfou1 && mysql_num_rows($qfou1) && $rfou1=mysql_fetch_assoc($qfou1) && ctype_digit($rfou1["Code"]) && $rfou1["Status"]=="1") {
        echo $rfou1["Informatie"];
      }

      else {
        echo "Foutmelding: ".$f;
      }
  }
}

else {
  foreach($fgeb1 as$f) {
      echo "Foutmeldingen: ".$f;
  }
}

?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.