Ajax form submit altijd, ook als de validation niet klopt

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Snelle Jaap

Snelle Jaap

13/01/2014 11:38:17
Quote Anchor link
Ik heb een form die de velden valideert.
Dit werkt gewoon, en hij toont de berichten. Toen heb ik later een insert script eraan toegevoegd ook met ajax.

Nu submit hij altijd de data uit de form, ook als er niks is ingevoerd.

Weet iemand hoe dat komt?


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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/style.css">

<meta charset="utf-8">
<title>Form</title>
</head>
<script type="text/javascript" src="js/validate.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>


<body>
<div id="wrap">
<table>
<td>
    <form name="form">
        <tr>
        <p class="names">Voornaam:</p> <p><input type="text" name="voornaam" id="voornaam"></p>
        </tr>
        <tr>
         <p class="names">Achternaam:</p> <p><input type="text" name="achternaam" id="achternaam"></p>
        </tr>
        <tr>
         <p class="names">Telefoonnummer:</p> <p><input type="text" name="telefoonnummer" id="telefoonnummer"></p>
        </tr>
        <tr>
         <p class="names">Emailadres:</p> <p><input type="text" name="email" id="email"></p>
        </tr>
        <tr>
          <input class="knop" type="button" name="insert" value="Opsturen" id="insert">
        </tr>
    </form>
</td>
</table>
<br>
<div id="berichten">

</div>

<script>
var validator = new FormValidator('form', [{
    name: 'voornaam',
    display: 'Voornaam',    
    rules: 'required'
}, {
    name: 'achternaam',
    display: 'achternaam',
    rules: 'required'
},{
    name: 'telefoonnummer',
    display: 'telefoon',
    rules: 'required|numeric'
},{
    name: 'email',
    display: 'email',
    rules: 'required|valid_email'
}], function(errors, event) {
    var berichten = document.getElementById('berichten');

    berichten.innerHTML = '';

    if (errors.length > 0) {
        for (var i = 0, l = errors.length; i < l; i++) {
            berichten.innerHTML += errors[i].message + '<br>';
            return false;
        }

    }

});
</script>
<script type="text/javascript">
    $(function(){
        $('#insert').click(function(){
            var voornaam = $('#voornaam').val();
            var achternaam = $('#achternaam').val();
            var telefoonnummer = $('#telefoonnummer').val();
            var email = $('#email').val();
 
            $.post('action.php',{action: "button", voornaam:voornaam, achternaam:achternaam, telefoonnummer:telefoonnummer, email:email},function(res){
                $('#result').html(res);
            });
            document.getElementById('berichten').innerHTML = 'Verstuurd!';  
            event.preventDefault();
            return false;
        });
        
    });
</script>

</div>
</body>
</html>


Hier nog de action.php mocht het nodig zijn:

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
<?php
    //connectie
include ('connection.php');

    //als de knop is ingedrukt insert dan
    if($_POST['action'] == 'button'){

        $voornaam  = mysql_real_escape_string($_POST['voornaam']);
        $achternaam = mysql_real_escape_string($_POST['achternaam']);
        $email  = mysql_real_escape_string($_POST['email']);
        $telefoonnummer = mysql_real_escape_string($_POST['telefoonnummer']);

        $sql = "insert into
           `form` (`id`,`voornaam`, `achternaam`, `email`, `telefoonnummer`)
            values ('','"
.$voornaam."', '".$achternaam."', '".$email."', '".$telefoonnummer."')";
        $query = mysql_query($sql);
        if($query){
            echo "Toegevoegd!";
        }
else {
            echo "Er is iets fout gegaan.";
        }
    }

?>
Gewijzigd op 13/01/2014 11:49:12 door Snelle Jaap
 
PHP hulp

PHP hulp

26/11/2024 19:20:38
 
Frank Nietbelangrijk

Frank Nietbelangrijk

13/01/2014 12:49:27
Quote Anchor link
Ik heb wel een vermoeden maar kan ik validate.min.js ergens downloaden?
 
Snelle Jaap

Snelle Jaap

13/01/2014 12:53:47
Quote Anchor link
Frank Nietbelangrijk op 13/01/2014 12:49:27:
Ik heb wel een vermoeden maar kan ik validate.min.js ergens downloaden?


Ja hier:

http://rickharrison.github.io/validate.js/validate.min.js

En wat is je vermoeden?
Gewijzigd op 13/01/2014 14:50:34 door Snelle Jaap
 
- Ariën  -
Beheerder

- Ariën -

13/01/2014 13:19:31
 
Frank Nietbelangrijk

Frank Nietbelangrijk

13/01/2014 18:53:02
Quote Anchor link
De validatie werkte niet om twee redenen. Je had de button 'Opsturen' van het type 'button' gemaakt in plaats van 'submit'. Bij het type submit hangt javascript er automatisch een event aan. Daarnaast schreef je met de jQuery .onClick(); de eventhandler over van de Validatie bibliotheek waardoor de validatie nooit uitgevoerd werdt.

Hoe het dan wel kan:
- de Opsturen knop weer veranderen naar type submit
- de jQuery .onClick() verwijderen
- de callback functie van de Validatie bibliotheek verder uitbreiden.
- aan het eind van de callback functie event.preventDefault(); plaatsen zodat de submit procedure wordt afgebroken op dit punt. Dit doen we omdat we de resultaten van het formulier al verstuurd hebben met AJAX en we dus gewoon op de pagina willen blijven zonder dat deze ververst wordt.

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/style.css">

<meta charset="utf-8">
<title>Form</title>
</head>
<script type="text/javascript" src="js/validate.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$(function(){
    
    // initialisatie formulier validatie. (zie http://rickharrison.github.io/validate.js)
    var validator = new FormValidator('form', [{
        name: 'voornaam',
        display: 'Voornaam',    
        rules: 'required'
    }, {
        name: 'achternaam',
        display: 'achternaam',
        rules: 'required'
    },{
        name: 'telefoonnummer',
        display: 'telefoon',
        rules: 'required|numeric'
    },{
        name: 'email',
        display: 'email',
        rules: 'required|valid_email'
    }], function(errors, event) {
        var berichten = document.getElementById('berichten');
    
        berichten.innerHTML = '';
    
        // als er fouten zijn:
        if (errors.length > 0) {
            for (var i = 0, l = errors.length; i < l; i++) {
                berichten.innerHTML += errors[i].message + '<br>';
            }
        // als de validatie goed gegaan is:
        } else {
            var voornaam = $('#voornaam').val();
            var achternaam = $('#achternaam').val();
            var telefoonnummer = $('#telefoonnummer').val();
            var email = $('#email').val();
    
            $.post('action.php',{action: "button", voornaam:voornaam, achternaam:achternaam, telefoonnummer:telefoonnummer, email:email},function(res){
                $('#result').html(res);
            });
            document.getElementById('berichten').innerHTML = 'Verstuurd!';  
        }
        
        // voorkom ten allertijde dat het formulier daadwerkelijk ge-submit wordt!
        event.preventDefault();
    });
});
</script>
<body>
<div id="wrap">
<table>
<td>
    <form name="form">
        <tr>
        <p class="names">Voornaam:</p> <p><input type="text" name="voornaam" id="voornaam"></p>
        </tr>
        <tr>
         <p class="names">Achternaam:</p> <p><input type="text" name="achternaam" id="achternaam"></p>
        </tr>
        <tr>
         <p class="names">Telefoonnummer:</p> <p><input type="text" name="telefoonnummer" id="telefoonnummer"></p>
        </tr>
        <tr>
         <p class="names">Emailadres:</p> <p><input type="text" name="email" id="email"></p>
        </tr>
        <tr>
          <input class="knop" type="submit" name="insert" value="Opsturen" id="insert">
        </tr>
    </form>
</td>
</table>
<br>
<div id="berichten"></div>
</div>
</body>
</html>
Gewijzigd op 13/01/2014 18:53:48 door Frank Nietbelangrijk
 
Snelle Jaap

Snelle Jaap

14/01/2014 09:40:54
Quote Anchor link
Bedankt! Dat werkte, was er al een paar dagen mee bezig.
 



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.