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

AJAX Discussion :

[AJAX] Transformer un chargement par validation en chargement dynamique


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 72
    Par défaut [AJAX] Transformer un chargement par validation en chargement dynamique
    Bonjour,

    Actuellement, je fais un site qui me permet de remplir une base de données MySQL. Bref, 90% de page de formulaire.

    Pour modifier les informations d'un membre par exemple, je vais chercher dans ma base la liste des membres. J'affiche le tout dans un <Select> et pour obtenir les informations sur ce membre (et les modifier) je dois cliquer sur un bouton pour recharger ma page.

    J'aimerai le faire dynamiquement mais çà ne fonctionne pas. En fait je n'arrive pas à voir comment renvoyer juste des tableaux de variables. Bon avec le script çà serai plus parlant mais il fait 500 lignes sans compter les annexes !

    Mon JavaScript :
    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
     
    function getXhr(){
    	var xhr = null; 
    	if(window.XMLHttpRequest) // Firefox et autres
    	   xhr = new XMLHttpRequest(); 
    	else if(window.ActiveXObject){ // Internet Explorer 
    	   try {
    				xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			} catch (e) {
    				xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			}
    	}
    	else { // XMLHttpRequest non supporté par le navigateur 
    	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	   xhr = false; 
    	} 
    					return xhr;
    }
     
    function maj(){
    	var xhr = getXhr();
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4 && xhr.status == 200){
    			ladate = xhr.responseText;
    			// On se sert de innerHTML pour rajouter les options a la liste
    			document.getElementById('test').innerHTML = ladate;
    		}
    	}
     
    	// Ici on va voir comment faire du post
    	xhr.open("POST","majm.php",true);
    	// ne pas oublier ça pour le post
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	// On recupere l'ID
    	memb = document.getElementById('membre');
    	idmemb = memb.options[memb.selectedIndex].value;
    	xhr.send("membre="+idmemb);
     
    	}
    Code PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    include "membre.php";
     
    if (isset($_POST['membre'])) {
                    $tableau = recup($_POST['membre']); $tableau2 = recup2($_POST['membre']); $tableauR = recupR($_POST['membre']);  modifier(); }
     
    ?>
    HTML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <fieldset><legend>$nom</legend><table><td><label>Membre </label> : <select name='membre' id='membre' onchange='maj();
     
    ...
    <fieldset name="test" id="test" >
    <label>Nom</label><span class="c2">*</span> : <input type="text" name="nom"  value="<?php echo $tableau['Nom_Pers']; ?>"/>
     
    ...
    Bon je suis pas sur que ce soit suffisant

    Merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    Citation Envoyé par francois_a Voir le message
    J'aimerai le faire dynamiquement mais çà ne fonctionne pas. En fait je n'arrive pas à voir comment renvoyer juste des tableaux de variables.
    C'est peut être parce que tu essayes de reproduire le fonctionnement d'un formulaire via Ajax ...

    Or la logique de fonctionnement n'est pas la même : pour afficher les informations, je suppose que tu ne vas pas changer ce qui existe (toutes les zones devant être mises à jour, un rechargement est justifié).
    Par contre, pour les mises à jour de la base, il n'y a pas besoin d'envoyer la totalité des infos : sur chaque champ (onchange), il te suffit d'envoyer au serveur l'identifiant du membre, la référence de la rubrique ainsi que la nouvelle valeur, et de récupérer la réponse, qui sera "OK" ou "KO" (avec dans ce cas, le code+message d'erreur justifiant le KO).

    La partie Ajax devient alors tout à fait "basique"

    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 72
    Par défaut
    Si je te suis bien, Ajax "ne sert que" pour recharger des bouts de page ?

    Est-il possible alors, de faire en sorte que ma page se recharge à chaque changement de mon select. En gros, je souhaite vraiment retirer se bouton de validation.

    J'ai pensé à un truc dans ce genre là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<fieldset><legend>$nom</legend><table><td><label>Membre </label> : <select name='membre' id='membre' onchange='<?php $tableau = recup($_POST['membre']); $tableau2 = recup2($_POST['membre']); $tableauR = recupR($_POST['membre']);  modifier(); ?>' >";
    ou pour plus de lisibilité comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<fieldset><legend>$nom</legend><table><td><label>Membre </label> : <select name='membre' id='membre' onchange=<?php test($_POST['membre']); ?> >";
    le php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function test($num)
    {
    	$tableau = recup($num); $tableau2 = recup2($num); $tableauR = recupR($num);  modifier(); 
    }
    Mais bien sur çà ne fonctionne pas... Si tu as une solution das ce genre, je suis preneur

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par francois_a Voir le message
    Est-il possible alors, de faire en sorte que ma page se recharge à chaque changement de mon select. En gros, je souhaite vraiment retirer se bouton de validation.
    Tel que tu le demandes, il suffit de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select .... onchange="self.location.reload();">
    Mais je ne suis pas sûr que ça te suffise

    EDIT : ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select ..... onchange="this.form.submit();">
    A+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 72
    Par défaut
    Oui je pense que çà devrait être quelque chose dans ce genre.

    Mon code fonctionne comme ceci :
    Si la valeur dans $_Get['s']==2 alors c'est une modification
    Si $_POST['OK'] existe alors récupérer les valeurs dans un tableau via des fonction PHP en utilisant la valeur de mon select comme ID

    Bon je ne pense pas avoir les connaissances nécessaire en JavaScript... Je me lance quand même.

    JavaScript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function maj(idmem)
    {
    // J'attribue une valeur à mon $_Post['OK']
    document.setElementById('OK').value = "OK";
     
    // Je recupère la valeur de mon membre (valeur de la ligne de mon Select)
    membre = document.getElementById('membre').value;
     
    // lancer ma fonction test(membre)
    // dans ce cas je mets mon code php dans une page et non une fonction
    xhr.open("POST","test.php",true);
    xhr.send("membre="+membre);
    }
    Est ce que le code te parait correct ?

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par francois_a Voir le message
    Est ce que le code te parait correct ?
    Heu ... je croyais que tu étais finalement parti sur un rechargement de la page ?
    Plus besoin d'Ajax ...

    EDIT : correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('OK').value = "OK";
    même pour définir un .value

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CKEditor] Transformer un textarea en CKeditor après chargement de page
    Par Elwood J. Blues dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 30/09/2011, 11h40
  2. Réponses: 0
    Dernier message: 24/03/2011, 11h49
  3. Réponses: 14
    Dernier message: 04/05/2010, 22h51
  4. Chargement par talend
    Par sabrouna dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 03/07/2008, 02h25
  5. TreeView chargement par fichier
    Par Pfeffer dans le forum C++Builder
    Réponses: 3
    Dernier message: 19/04/2007, 16h26

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