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] mise à jour d'une base avec un select


Sujet :

AJAX

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut [AJAX] mise à jour d'une base avec un select
    Bonjour,
    je trouver ce tutoriel qui me permet de modifier des infos sans charger la page à l'aide de inlinemode :

    http://olance.developpez.com/article...nline/exemple/

    mais j'ai trouver un ptite probleme vue que je ne connais pas trop dans le javascript et ajax
    je veux trouver une solution lorsque je clique 2fois sur ville par exemple au lieu de la remplacer par un input ou un textarea je veux qu'il la remplace par un select ou radio et que la valeur soit sélectionné et quand je choisie une autre valeur elle sera mise a jour et on supprime le select comme les inputs
    pour le code source le voila
    http://olance.developpez.com/article...cation-inline/
    et mer

  2. #2
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour et bienvenue sur Developpez.com
    Citation Envoyé par farooko Voir le message
    je veux trouver une solution lorsque je clique 2fois sur ville par exemple au lieu de la remplacer par un input ou un textarea je veux qu'il la remplace par un select ou radio et que la valeur soit sélectionné et quand je choisie une autre valeur elle sera mise a jour et on supprime le select comme les inputs
    Pourrais-tu préciser un peu le fonctionnement que tu souhaites ?
    Le début, ça va, mais la fin est difficile à comprendre

    Une pointe de ponctuations, notamment, améliorerait bien les choses

    A+

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Bonjour et bienvenue sur Developpez.com
    Pourrais-tu préciser un peu le fonctionnement que tu souhaites ?
    Le début, ça va, mais la fin est difficile à comprendre

    Une pointe de ponctuations, notamment, améliorerait bien les choses

    A+

    bon, dsl pour le mal explication,
    en fait ce tuto permet de modifier les info en double cliquant sur l'info elle sera convertit soit en chapm input soit en textarea,
    pour enregistrer la modification, il faut soit cliquer ailleurs soit appuyer sur entré.

    tout ça est claire et fonctionne parfaitement, pour mon cas au lieu de convertir l'info a un champ text ou un textarea je veux la convertir en type "select" ou "radio" et l'enregistrement se fait avec l'evenement onchange.
    j'éspère que je me suis bien exprimé

  4. #4
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par farooko Voir le message
    j'éspère que je me suis bien exprimé
    Mieux, oui

    Donc, ton problème n'est pas trop lié à Ajax : le fonctionnement Ajax sur le onchange d'un select est identique à celui sur le onchange d'un input (pour les checkbox ou radio, il faut le faire sur onclick en contrôlant l'attribut checked de l'élément).

    Ce qu'il te reste à faire visiblement, c'est proposer la modif via le select.

    2 solutions (au moins) :
    • tu génères le select (ou checkbox ou radio) correspondant à chaque info lors de la génération de la page, puis sur action de l'utilisateur, tu remplaces l'info affichée par l'élément permettant de la modifier (en jouant sur les style.display).
    • tu ne génères que l'info "en dur" lors de la génération de ta page, et sur action de l'utilisateur, tu crées (en Javascript) les éléments permettant la modif via Ajax. Pour cela tu auras besoin des instructions DOM ...


    A+

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Mieux, oui

    2 solutions (au moins) :
    • tu génères le select (ou checkbox ou radio) correspondant à chaque info lors de la génération de la page, puis sur action de l'utilisateur, tu remplaces l'info affichée par l'élément permettant de la modifier (en jouant sur les style.display).
    • tu ne génères que l'info "en dur" lors de la génération de ta page, et sur action de l'utilisateur, tu crées (en Javascript) les éléments permettant la modif via Ajax. Pour cela tu auras besoin des instructions DOM ...


    A+

    enfait j'ai proportion du code qui génère le select mais je veux bien que quelqu'un me donne le code qui me permet d'enregistrer la modification et d'enlever le select suite a l'evènement onchage bien sure en tenant compte du code existant déjà car je ne connais pas trop ni en javascript ni en ajax mais

  6. #6
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    Par défaut
    ... mais ???

    Je croyais que ta mise à jour via Ajax fonctionnait déjà correctement ...

    A+

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    ... mais ???

    Je croyais que ta mise à jour via Ajax fonctionnait déjà correctement ...

    A+
    enfait c ça mon probleme
    j'ai créer un nouve

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    ... mais ???

    Je croyais que ta mise à jour via Ajax fonctionnait déjà correctement ...

    A+
    enfait c ça mon probleme
    j'ai créer un nouveau type que j'ai nommé select

    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
    switch (type){
    ...
    case "select": 
    var	sel	= document.createElement("select");
     
    		var tab = new Array('','01','02','03','04','05','06','07','08','09','10','11','12');
     
     
     
    		sel.name = 'typ[]';
     
    		for (var i=0; i<tab.length; i++) {
     
    			var	opt	= new Option(tab[i], tab[i], false, true);
     
    			sel.options[sel.options.length] = opt;
     
    			sel.appendChild(opt);
     
    		}
     
    		obj.replaceChild(sel, obj.firstChild);
     
    		sel.focus;
    en double cliquant sur l'info que je veux modifié le text sera convertit en select
    mais quand je choisi une valeur il ne se passe rien càd la nouvelle valeur ne sera pas enregistré dans la base et le select ne disparaisse pas
    c ça mon problème je veux bien un code fonctionnaire

  9. #9
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par farooko Voir le message
    c ça mon problème je veux bien un code fonctionnaire
    Les mauvaises langues diront que ça risque de pas être le plus efficace

    Blague à part : tu ne génères pas le onchange pour ton nouveau select : il ne risque pas de déclencher grand chose

    Pour le masquer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('id_du_select').style.display = "none";
    A+

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Les mauvaises langues diront que ça risque de pas être le plus efficace

    Blague à part : tu ne génères pas le onchange pour ton nouveau select : il ne risque pas de déclencher grand chose

    Pour le masquer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('id_du_select').style.display = "none";
    A+
    c ça je veux génerer le code du onchange avec le code de suppression du select

    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
    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
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    // retourne un objet xmlHttpRequest.
    // méthode compatible entre tous les navigateurs (IE/Firefox/Opera)
    function getXMLHTTP()
    {
        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)
            {
                try
                {
                    xhr = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch(e1)
                {
                    xhr = null;
                }
            }
        }
        else
        { // XMLHttpRequest non supporté par le navigateur
            alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
        }
     
        return xhr;
    }
     
     
    //Fonction renvoyant le code de la touche appuyée lors d'un événement clavier
    function getKeyCode(evenement)
    {
        for (prop in evenement)
        {
            if(prop == 'which')
            {
                return evenement.which;
            }
        }
     
        return event.keyCode;
    }
     
     
    //Suppression des espaces/sauts de ligne inutiles (<a href="http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256C0C0062AC78" target="_blank">http://www.breakingpar.com/bkp/home....256C0C0062AC78</a>)
    function trim(value) {
       var temp = value;
       var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
       if (obj.test(temp)) { temp = temp.replace(obj, '$2'); }
       var obj = /  /g;
       while (temp.match(obj)) { temp = temp.replace(obj, " "); }
       return temp;
    }
     
    //Fonction donnant la largeur en pixels du texte donné (merci SpaceFrog !)
    function getTextWidth(texte)
    {
    	//Valeur par défaut : 150 pixels
    	var largeur = 150;
     
    	if(trim(texte) == "")
    	{
    		return largeur;
    	}
     
    	//Création d'un span caché que l'on "mesurera"
    	var span = document.createElement("span");
    	span.style.visibility = "hidden";
    	span.style.position = "absolute";
     
    	//Ajout du texte dans le span puis du span dans le corps de la page
    	span.appendChild(document.createTextNode(texte));
    	document.getElementsByTagName("body")[0].appendChild(span);
     
    	//Largeur du texte
    	largeur = span.offsetWidth;
     
    	//Suppression du span
    	document.getElementsByTagName("body")[0].removeChild(span);
    	span = null;
     
    	return largeur;
    }
     
     
    //Fonction renvoyant une valeur "aléatoire" pour forcer le navigateur (ie...)
    //à envoyer la requête de mise à jour
    function ieTrick(sep)
    {
    	d = new Date();
    	trick = d.getYear() + "ie" + d.getMonth() + "t" + d.getDate() + "r" + d.getHours() + "i" + d.getMinutes() + "c" + d.getSeconds() + "k" + d.getMilliseconds();
     
    	if (sep != "?")
    	{
    		sep = "&";
    	}
     
    	return sep + "ietrick=" + trick;
    }
     
     
    //On ne pourra éditer qu'une valeur à la fois
    var editionEnCours = false;
     
    //variable évitant une seconde sauvegarde lors de la suppression de l'input
    var sauve = false;
     
    //Fonction de modification inline de l'élément double-cliqué
    function inlineMod(id, obj, nomValeur, type)
    {
    	if(editionEnCours)
    	{
    		return false;
    	}
    	else
    	{
    		editionEnCours = true;
    		sauve = false;
    	}
     
    	//Objet servant à l'édition de la valeur dans la page
    	var input = null;
     
    	//On crée un composant différent selon le type de la valeur à modifier
    	switch(type)
    	{
    		//Valeur de type texte ou nombre
    		case "texte":
    		case "nombre":
    			input = document.createElement("input");
    			break;
     
    		//Valeur de type texte multilignes
    		case  "texte-multi":
    			input = document.createElement("textarea");
    			break;
     
    //Valeur de type select
    case  "select" :
     
    		var	sel	= document.createElement("select");
     
    		var tab = new Array('','01','02','03','04','05','06','07','08','09','10','11','12');
     
     
    		for (var i=0; i<tab.length; i++) {
     
    			var	opt	= new Option(tab[i], tab[i], false, true);
     
    			sel.options[sel.options.length] = opt;
     
    			sel.appendChild(opt);
     
    		}
     
    		obj.replaceChild(sel, obj.firstChild);
     
    break;
     
     
    	}
    	//Assignation de la valeur
    	if (obj.innerText)
    		input.value = obj.innerText;
    	else
    		input.value = obj.textContent;
     
    	input.value = trim(input.value);
     
    	//On lui donne une taille un peu plus large que le texte à modifier
    	input.style.width  = getTextWidth(input.value) + 30 + "px";
     
    	//Remplacement du texte par notre objet input
    	obj.replaceChild(input, obj.firstChild);
     
    	//On donne le focus à l'input et on sélectionne le texte qu'il contient
    	input.focus();
    	input.select();
     
    	//Assignation des deux événements qui déclencheront la sauvegarde de la valeur
     
    	//Sortie de l'input
    	input.onblur = function sortir()
    	{
    		if ((isNaN(input.value)) && (type=="nombre")){
    			alert("ce n'est pas un nombre");			
    		}
    		else {
    		sauverMod(id, obj, nomValeur, input.value, type);
    		delete input;
    		}
    	};
     
    	//Appui sur la touche Entrée
    	input.onkeydown = function keyDown(event)
    	{
            if (!event&&window.event)
            {
                event = window.event;
            }
    		if(getKeyCode(event) == 13)
            {
    			if ((isNaN(input.value)) && (type=="nombre")){
    				alert("ce n'est pas un nombre");
    			}
    			else {
    				sauverMod(id, obj, nomValeur, input.value, type);
    				delete input;
    			}
    		}
    	};
    }
     
    //Objet XMLHTTPRequest
    var XHR = null;
     
    //Fonction de sauvegarde des modifications apportées
    function sauverMod(id, obj, nomValeur, valeur, type)
    {
    	//Si on a déjà sauvé la valeur en cours, on sort
    	if(sauve)
    	{
    		return false;
    	}
    	else
    	{
    		sauve = true;		
    	}
     
    	//Si l'objet existe déjà on abandonne la requête et on le supprime
    	if(XHR && XHR.readyState != 0)
    	{
    		XHR.abort();
    		delete XHR;
    	}
     
    	//Création de l'objet XMLHTTPRequest
    	XHR = getXMLHTTP();
     
    	if(!XHR)
    	{
    		return false;
    	}
     
    	//URL du script de sauvegarde auquel on passe la valeur à modifier
    	XHR.open("GET", "sauverMod.php?id=" + id + "&champ=" + nomValeur + "&valeur=" + escape(valeur) + "&type=" + type + ieTrick(), true);
     
    	//On se sert de l'événement OnReadyStateChange pour supprimer l'input et le replacer par son contenu
    	XHR.onreadystatechange = function()
    	{
    		//Si le chargement est terminé
    		if (XHR.readyState == 4)
    		{
    			//Réinitialisation de la variable d'état d'édition
    			editionEnCours = false;
     
    			//Remplacement de l'input par le texte qu'il contient
    			obj.replaceChild(document.createTextNode(valeur), obj.firstChild);
    		}
    	}
     
    	//Envoi de la requête
    	XHR.send(null);
    }
    voila le code que j'utilise je veux un code qui fonctionne avec l'enregistrement onchange et la suppression

  11. #11
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par farooko Voir le message
    je veux un code qui fonctionne avec l'enregistrement onchange et la suppression
    Et bien fait le

    Qu'est-ce qui te manque ?

    A+

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Et bien fait le

    Qu'est-ce qui te manque ?

    A+
    ce qui me manque en fait c'est que je ne connais pas trop en javascript et ajax
    ce que je suis arrivé à faire c du copier coller et rien d'autre c pour cela que je demande de l'aide

  13. #13
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par farooko Voir le message
    ce que je suis arrivé à faire c du copier coller et rien d'autre c pour cela que je demande de l'aide
    Ah ben oui, mais on ne va pas le faire à ta place.
    C'est pas ça qui t'aiderait vraiment, en plus je n'ai pas le temps et puis ce n'est pas le but du forum

    Avance avec ce que tu as déjà et ce que je t'ai dit, et quand tu seras bloqué sur un point précis, reviens l'exposer ici et on t'aidera à le résoudre ....

    A+

Discussions similaires

  1. [MySQL] Problème de mise à jour d'une base de données avec php
    Par cykablue dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/02/2011, 16h46
  2. Mise à jour d'une base de données avec XML ou CSV
    Par mims1664 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 14/05/2010, 22h42
  3. mise à jour d'une base
    Par le géologue dans le forum Access
    Réponses: 7
    Dernier message: 17/11/2005, 09h46
  4. mise à jour d'une base de données
    Par flo83 dans le forum ASP
    Réponses: 6
    Dernier message: 12/06/2005, 20h27
  5. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46

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