IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

AJAX, PHP, formulaire et BDD


Sujet :

jQuery

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Points : 34
    Points
    34
    Par défaut AJAX, PHP, formulaire et BDD
    Bonjour les experts

    Je suis pseudo débutant, j'ai grace à vous découvert certaines choses sympa en AJAX et formulaire. J'utilise donc aujourd'hui ces technique pour gerer une renouvellement de mot de passe sur mon site. Ma problématique est simple:
    Lorsque l'utilisateur a oublié son mot de passe, il clique sur un lien et arrive sur un formulaire multistep.

    step 1: il saisit son nom et son numéro de téléphone. C'est informations par AJAX sont contrôlées dans la base de donnée.

    step 2: - Si les données saisies sont bien dans la base de donnée, j'affiche à ce step la question sécrète validé par l'utilisateur lors de son inscription et un champs de saisie pour la réponse à cette question.
    - Si les données saisies ne son pas correctes je souhaite rester au step 1 et afficher un message d’alerte

    step 3: Je fais le même contrôle avec la BDD pour m'assurer que la réponse à la question sécrète saisie au step 2 est correcte. sinon je reste au step 2 avec un message d'alerte. Si correcte, alors j'offre la possibilité de renouveler son mot de passe et le submit met à jour la base de donnée.

    Voici ce que je souhaite faire mais impossible d'y arriver. Tout marche bien quand les données saisies sont juste. Dès que les saisie du step 1 sont fausse, plus rien de marche.

    Mon code HTML
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    						<form action="connexion.php" method="post" id="newpassword" name="newpassword">
    	<div style="text-align:center;">
    		<span class="step"></span>
    		<span class="step"></span>
    		<span class="step"></span>
    	</div>
     
    	<div class="row tab px-2 py-3">
    		<div class="col">
    			<p><small>Tous les champs sont obligatoires</small></p>
    			<label class="control-label" for="numero">Nom et prénom*</label>
    			<div class="input-group pb-3">
    				<div class="input-group-prepend">
    					<span class="input-group-text" >
    						<i class="fa fa-user" aria-hidden="true"></i>
    					</span>
    				</div>														
    				<input class="form-control" data-parsley-group="block0" type="text" id="username" 
    				name="username"> 											
    			</div>
     
    			<label class="control-label" for="numero">Téléphone*</label>
    			<div class="input-group pb-3">
    				<div class="input-group-prepend">
    					<span class="input-group-text" >
    						<i class="fa fa-phone-volume" aria-hidden="true"></i>
    					</span>
    				</div>														
    				<input class="form-control" data-parsley-group="block0" type="text" id="user" name="user"
    				pattern="[0-9]{8}" maxlength="8" onkeypress="phonenumber(event); return false;" 
    				onchange="return miphone()"> 											
    			</div>
    		</div>
    	</div>
    	<div class="row tab px-2 py-3">
    		<div class="col">
    			<label class="control-label" for="numero"><strong id="question"></strong> </label>
    			<div class="input-group pb-3">
    				<div class="input-group-prepend">
    					<span class="input-group-text" >
    						<i class="fa fa-user" aria-hidden="true"></i>
    					</span>
    				</div>										
    				<input class="form-control" data-parsley-group="block0" type="text" id="reponse" 
    				name="reponse" onchange="return mireponse()"> 	
    			</div>
    		</div>
    	</div>
    	<div class="row tab px-2 py-3">
    		<input class="form-control" data-parsley-group="block0" type="iden" id="reponse">								
    		<span id="reponse"></span>
    		<div class="col">
    			<label class="control-label" for="numero">Mot de passe*</label>
    			<div class="input-group pb-2">
    				<div class="input-group-prepend">
    					<span class="input-group-text" >
    						<i class="fa fa-key" aria-hidden="true"></i>
    					</span>
    				</div>														
    				<input class="form-control" data-parsley-group="block0" type="password" id="password" 
    				name="password"> 											
    			</div>								
    		</div>
    	</div>
    	<div class="row d-flex justify-content-around">
    		<div class="col d-flex justify-content-center">
    			<button class="btn btn-outline-rounded btn-primary px-5 mb-3 mx-3" type="button" id="prevBtn" onclick="nextPrev(-1)">Retour</button>
     
    			<button class="btn btn-outline-rounded btn-primary px-5 mb-3 mx-3" type="button" id="nextBtn" onclick="nextPrev(1)">Suivant</button>
    		</div>
    	</div>
    </form>
     
     
     
    <script>
                    function phonenumber(event) {                           
                            var keyCode = event.which ? event.which : event.keyCode;
                            var touche = String.fromCharCode(keyCode);
                                            
                            var champ = document.getElementById('phone');
                                            
                            var caracteres = '0123456789';
                                            
                            if(caracteres.indexOf(touche) >= 0) {
                                    champ.value += touche;
                            }
                    }
     
     
    // Multi-Step Form
    var currentTab = 0; // Current tab is set to be the first tab (0)
    showTab(currentTab); // Display the crurrent tab
     
    function showTab(n) {
      // This function will display the specified tab of the form...
      var x = document.getElementsByClassName("tab");
      x[n].style.display = "block";
      //... and fix the Previous/Next buttons:
      if (n == 0) {
        document.getElementById("prevBtn").style.display = "none";
      } else {
        document.getElementById("prevBtn").style.display = "inline";
      }
      if (n == (x.length - 1)) {
        document.getElementById("nextBtn").innerHTML = "Commander";
      } else {
        document.getElementById("nextBtn").innerHTML = "Suivant";
      }
      
      if (n == (x.length - 1)) {
        document.getElementById("nextBtn").style.display = "none";
      } else {
            document.getElementById("nextBtn").style.display = "inline";
      }
      //... and run a function that will display the correct step indicator:
      fixStepIndicator(n)
    }
     
    function nextPrev(n) {
      // This function will figure out which tab to display
      var x = document.getElementsByClassName("tab");
      // Exit the function if any field in the current tab is invalid:
      if (n == 1 && !validateForm()) return false;
      // Hide the current tab:
      x[currentTab].style.display = "none";
      // Increase or decrease the current tab by 1:
      currentTab = currentTab + n;
      // if you have reached the end of the form...
      if (currentTab >= x.length) {
        // ... the form gets submitted:
        document.getElementById("newpassword").submit();
        return false;
      }
      // Otherwise, display the correct tab:
      showTab(currentTab);
    }
     
    function validateForm() {
      // This function deals with validation of the form fields
      var x, y, i, valid = true;
      var todayDate = new Date();
      todayDate = formatDate(todayDate);
     
      x = document.getElementsByClassName("tab");
      y = x[currentTab].getElementsByTagName("input");
      z = x[currentTab].getElementsByTagName("select");
      // A loop that checks every input field in the current tab:
      for (i = 0; i < y.length; i++) {
        // If a field is empty...
        if (y[i].value == "") {
          // add an "invalid" class to the field:
          y[i].className += " invalid";
          // and set the current valid status to false:
          valid = false;
        }
     
     
            if (y[i].type == "date" && y[i].value > todayDate) {
          // add an "invalid" class to the field:
          y[i].className += " invalid";
          // and set the current valid status to false:
          valid = false;
        }
     
      }
      // A loop that checks every select field in the current tab:
      for (i = 0; i < z.length; i++) {
        // If a field is empty...
        if (z[i].value == "") {
          // add an "invalid" class to the field:
          z[i].className += " invalid";
          // and set the current valid status to false:
          valid = false;
        }
      }
      // If the valid status is true, mark the step as finished and valid:
      if (valid) {
        document.getElementsByClassName("step")[currentTab].className += " finish";
      }
      return valid; // return the valid status
    }
     
     
    function fixStepIndicator(n) {
      // This function removes the "active" class of all steps...
      var i, x = document.getElementsByClassName("step");
      for (i = 0; i < x.length; i++) {
        x[i].className = x[i].className.replace(" active", "");
      }
      //... and adds the "active" class on the current step:
      x[n].className += " active";
    }
                    
            </script>

    A partir de ce code HTML, je fais appel à mon AJAX par le fichier scriptphone.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <script>
        function miphone() {
            var miphone = document.newpassword;
            var dataString = $(miphone).serialize();
            $.ajax({
                type: 'POST',
                url: '../shared/service/phone.php',
                data: dataString,
    			dataType:"json",
     
    			success: function (data) {
    				if (question  == '0') {
                     	document.getElementById("reponse").innerHTML = 'Attention : données saisie incorrectes' ;
                    } else {				
    					$('#question').html(data.question);
    				}
     
    			}
     
    		})			
    				return false;
        }
     
        function mireponse() {
            var mireponse = document.newpassword;
            var dataString = $(mireponse).serialize();
            $.ajax({
                type: 'POST',
                url: '../shared/service/reponse.php',
                data: dataString,
    			dataType:"json",
     
    			success: function (data) {
     
                    $('#reponse').html(data.reponse);
     
    			}
     
    		})			
    				return false;
        }
    </script>
    Et le fichier PHP phone.php que j'utilise pour le contrôle dans la base de donnée.

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    	if (session_status() == PHP_SESSION_NONE) {
    		session_start();
     
    	}
     
    	include('../../shared/service/globale.php');
    	include('../../shared/service/paramauto.php');
    	include('../../shared/service/functionauto.php');
    	include('../../shared/service/connect.php');
     
    	global $phone;
    	global $question;
    	global $reponse;
     
     
    	if((isset($_POST['username']) && !empty($_POST['username']))
    	&& (isset($_POST['user']) && !empty($_POST['user'])))	
    	{
    		$nomprenom = strtoupper($_POST['username']);
    		$phone = $_POST['user'];
     
    		$req = $db->prepare('SELECT count(*) as nbuser FROM assures WHERE phone=? and nomprenom=?');
    		$req->execute(array($phone, $nomprenom));
    		$count = $req->fetch(PDO::FETCH_ASSOC);
    		If ($count['nbuser']>0) {
     
    			$sql="SELECT * FROM assures WHERE phone=? and nomprenom=?";
    			$select= $db->prepare($sql);
    			$select->execute(array($phone, $nomprenom));
    			while($m = $select->fetch(PDO::FETCH_OBJ)) {
    				$question = $m->question;
    				if ($question == '1') {
    					$question = 'Votre matière préférée à l\'école';
    				} elseif ($question == '2'){
    					$question = 'La marque de votre première voiture';
    				} elseif ($question == '3') {
    					$question = 'Votre ville de naissance';
    				}	
    			}
     
     
     
    		} else {
    			$question = '0';			
    		}
     
    		echo json_encode([
    			"question"=>$question,
     
    		]);
     
    	}

    Pourriez-vous me donner un coup de main s'il vous plait? Je n'ai vraiment pas le compétence pour inventer du code mais j'adapte toujours vos préconisations à mes besoins.
    Je vous remercie d'avance

    Cordialement.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    Bonjour,

    Dans le success d'ajax tu as mis : if (question == '0') alors que la variable n'est pas définie, il faut plutôt mettre if(data.question==0) et pas la peine d'entourer le zéro avec des '' parce que javascript se débrouille bien avec les chiffres....

    Je te conseille aussi d'ajouter le callback error (que tu dois remplacer par fail et success par done en passant..) d'ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $.ajax({
        .....
        ,success:function(){}
        ,error:function(erreur){
           alert("Erreur ajax :"+erreur.responseText);
        }
    })
    afin d'être averti quand il y'a une erreur.

    Quand tu auras fait ces modification, reviens me dire ce qui se passe...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Bonjour Toufik83,

    Merci pour votre retour. J'ai appliqué vos recommandations mais rien de nouveau. En saisissant un numero de téléphone qui n'existe pas, je m'attends à un message d'erreur mais j'avance hélas au step 2 avec 0 dans la variable question...
    Je tourne dans tous les sens sans success...

    Cordialement

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    Bonjour,

    Il y'a d'autres choses à modifier dans le code :
    • Le fait d'attacher la fonction miphone() à un écouteur onchange n'est pas bon, car tu envois une requête vers le serveur à chaque fois qu'on modifie la valeur de la zone du texte. remplaces le onchange par onblur ou bien utilises un bouton permettant à l'utilisateur d'envoyer ses données.
    • Un console.log est toujours utile pour voir ce que tu contrôles, et la vérification de l'existence de data.question pourrait être utile aussi :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
       
      success: function (data) {
           console.log('Succès ajax, data  :',data);
           if(data.question){//si data.question existe dans le retour d'ajax 
                if (data.question  == 0) {
                      /*code quand question==0*/   
                }
                else{
                    /*code quand question est différent de 0 */
                }
           }
           else{
              alert("Erreur .... data.question n'existe pas !");
           }
      }
    • L'outils de développement du navigateur est un très utile pour voir le retour de tes appels d'ajax, surtout les onglet Console/Network.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Bonjour Toufik83,

    J'ai appliqué une fois de plus les recommandations mais toujours rien de nouveau. J'ai l'impression qu'il n'exécute même pas le "console.log('Succès ajax, data :',data); ". Dans le console/network, il ne m'affiche rien non plus...

    Cordialement

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    Bonjour,

    Si le console.log n'apparait pas, cela dit qu'il y'a probablement une erreur et qu'elle devrait être gérée dans le callback error.

    As-tu ajouter l'option error dans Ajax comme je te l'avais suggéré dans mon post plus haut?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Bonjour Toufik83,

    Voici le code suite aux recommandations:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    			done: function (data) {	
    				console.log('Succès ajax, data  :',data);	
    				if(data.question){//si data.question existe dans le retour d'ajax 
    					if (data.question  == 0) {
    						/*code quand question==0*/ 
    						console.log('absence de question retour');				
    					}
    					else{					
    						$('#question').html(data.question);
    					}
    				} else {
    					alert("Erreur .... data.question n'existe pas !");
    				}			
    			},
     
    			fail: function (data) {
    				console.log('Error ajax, data  :',data);	
    			}
    J'ai remplacé Success par Done et Error par Fail. Aucun des messages ne s'affiche.

    Cordialement

  8. #8
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    Bonjour,

    Il fallait voir la documentation d'ajax afin de modifier ton code correctement.

    Correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $.ajax({
      /*les options précédentes sans success et error */
    })
    .done(function(data){
         /*le code qui été dans success devrait devenir ici*/
    })
    .fail(function(xhr,textStatus,erreur){
       console.log("Erreur ajax, status :"+textStatus+", erreur :"+erreur);
    })

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Bonjour Toufik83,

    Désolé d'avoir codé sans réfléchir pour le Done et Fail. J'ai apporté les modifications et j'ai bien les messages dans la console:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    console.log('Succès ajax, data  :',data);	
    	if(data.question){//si data.question existe dans le retour d'ajax 
    	      if (data.question  == 0) {
    	      /*code quand question==0*/ 
    		 console.log('absence de question retour');				
    	    } else {					
    		$('#question').html(data.question);
    	    }
    	}
    L'ajax passe bien et le retour de question est bien 0 lorsque je saisis des informations erronées. Mais je passe hélas au step 2 sans la question. Je désire rester au step 1 et afficher un message d'erreur et pourquoi pas desactiver le bouton suivant.

    Cordialement

  10. #10
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    Bonjour,

    Citation Envoyé par ricobye Voir le message
    ...et pourquoi pas desactiver le bouton suivant
    par exemple oui.

    Dans ce cas, tu dois récupérer le id du bouton suivant ou bien sa classe et la désactiver avec prop.

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Bonjour

    Je voudrais pas jouer les rabat joie mais sur le principe, pourquoi tu ne fais pas comme tout le monde avec l'envoi d'un mail qui contient un lien de validation pour changer le mot de passe, c'est plus sécurisé puisque le mail arrive chez le demandeur. Avec ton système, un proche de l'utilisateur pourrait connaître la réponse secrète et changer son mot de passe à sa place, ce n'est pas du tout sécurisé.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Points : 34
    Points
    34
    Par défaut
    Bonjour ABCIWEB,

    Je suis dans un contexte où le mail n'est pas beaucoup utilisé hélas... Eh oui surprenant mais ça existe...Ca aurait été la solution la plus simple mais bon, la question sécrète reste malheureusement la solution de contournement la plus simple malgré les risques.

    Cordialement

Discussions similaires

  1. [AJAX] PHP / Ajax et validation de formulaire
    Par jul37 dans le forum AJAX
    Réponses: 1
    Dernier message: 06/05/2010, 15h01
  2. Php Formulaire ajax et caractère spéciaux
    Par leFred dans le forum Langage
    Réponses: 1
    Dernier message: 26/03/2010, 17h15
  3. [AJAX] AJAX, PHP/SQL et Formulaire
    Par DiPSoMaNiE dans le forum AJAX
    Réponses: 7
    Dernier message: 28/04/2009, 09h24
  4. [MySQL] Formulaire PHP avec insertion BDD & Session
    Par DjChat dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 23/05/2008, 13h36
  5. formulaire AJAX + PHP aucune action
    Par akrogames dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/05/2008, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo