par Phil93 » 06 mars 2007, 12:17
La solution est très simple grâce à l'Ajax
par DesmaT » 06 mars 2007, 12:03
<?php include 'config.php'; $conex = mysql_connect($mysql_host, $mysql_user, $mysql_password); mysql_select_db ($database_name,$conex) ; $query = "SELECT count( cp ) AS nbr, cp FROM commune WHERE cp = '".$_GET["cp"]."' GROUP BY cp"; $result = mysql_db_query($database_name,$query,$conex); if(mysql_num_rows($result)>=1) echo "1"; else echo "2"; ?>
function verifCp(tel_cp) { if(test = file('verif_cp.php?cp='+escape(tel_cp))) { if(test == 1) { // Le cp est unique } else { // Le cp n'est pas unique } } function file(fichier) { if(window.XMLHttpRequest) // FIREFOX xhr_object = new XMLHttpRequest(); else if(window.ActiveXObject) // IE xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); else return(false); xhr_object.open("GET", fichier, false); xhr_object.send(null); if(xhr_object.readyState == 4) return(xhr_object.responseText); else return(false); }
<form name="form1" method="post" onSubmit="javascript:verifCp(this.value)" action="popup.php"> <label> <div align="left"><span class="Formulaire">CP : </span> <input name="CP" type="text" id="CP" size="6" maxlength="5" class="boiteFormulaire" value=""> <input type="submit" name="Submit" value="Envoyer" class="bouton" align="top"> </div> </label> </form>
par Phil93 » 06 mars 2007, 11:35
[…] je vais tester l'Ajax, car je pense que charger la base coté client à chaque raffraichissement de la page rabaisserait fortement la performance de l'application.
Code : Tout sélectionner
<script language="javascript"……… src="path de mon fichier javascript" />
par DesmaT » 06 mars 2007, 11:07
par Phil93 » 03 mars 2007, 14:38
par Phil93 » 03 mars 2007, 14:31
C'est tout à fait possible, et c'est bien là le principe de l'ajax: javascript charge un fichier et le traite. Ce fichier est un XML, mais rien ne t'empeche d'appeler un script PHP qui va taper dans ta base et te renvoie un XML
par Shrell » 03 mars 2007, 14:24
C'est pas pour défendre mon idée, mais en lisant ton truc, et les infos que tu nous as données, je me dis quand même « oh attention, j'ai 2000 personnes qui travaillent en même temps, et je vais mobiliser ma base juste pour savoir si un code est unique »… Imagine que 50% des utilisateurs entrent en même temps un code postal (il faut toujours envisager le pire, non ?), et tu te retrouves avec 1000 requêtes envoyées à la base juste pour avoir une information qui se réduit à quelques octets… Je sais pas ce qu'en pensent les pros, mais il y a quelque chose qui me parait disproportionné là-dedans.
par Shrell » 03 mars 2007, 14:20
/* il faut penser a prevoir les cas d'erreur, pas fait ici */ echo "<racine>"; $requete=mysql_query("SELECT * FROM villes WHERE cp LIKE '".$_GET['cp']."%' ORDER BY ville"); while($r=mysql_fetch_assoc($requete)) { echo "<item value=\"".$r['cp']."\" nom=\"".$r['ville'].\"">"; } echo "</racine>";
par Phil93 » 03 mars 2007, 14:15
"Lorsque l'utilisateur clique sur le bouton, la fonction javascript envois le code postal à une fonction Php (et qui la lance), qui elle va chercher dans la base de donnée si le code postal est unique. Et la fonction Php ré appelle une fonction javascript qui va se charger d'ouvrir la popup ou de mettre à jour les champs." Comme ce que Phil93 propose dans son dernier message. Je comprendrais le fonctionnement du code que j'éxecute et je ne pense pas que cela alourdirait l'utilisation du programme. Cela est-il possible ?
par DesmaT » 03 mars 2007, 14:01
par Phil93 » 03 mars 2007, 13:47
Certes... enfin de mon avis personnel, la grosse Bertha pour tuer la mouche, c'est toi qui viens de nous la sortir
donc => ajax
# Javascript, via l'eau de javel, lance… # … Un script PHP qui va fouiller dans mySQL # … et renvoie ses résultats au script javascript # pour qu'il le traite intra muros
par Shrell » 03 mars 2007, 13:33
Ah si le javascript pouvait extraire d'une base ca serai vite réglé mais là je suis dans l'ignorance total...merci de votre aide.
par Phil93 » 03 mars 2007, 12:58
// Instanciation de mes villes (qui s'appelle CODES_POSTAUX, // ce qui est plus logique maintenant) // Ce tableau contiendra toutes mes instances de la classe suivante var CODES_POSTAUX = new Array() ; // Définition d'une classe CODEP function CODEP() { this.uniqueID ; this.code ; this.villes ; this.nbvilles ; this.departement; this.region; }
/* Proto pour initialiser l'instance et la mettre dans mes villes */ CODEP.prototype.init = function ( leCode) { this.code = leCode ; var pref = leCode.substring(0,2) ; this.departement = TABLEAU_DEPARTEMENTS[pref] ; this.region = TABLEAU_REGIONS[this.departement] ; /* etc. */ MESVILLES[leCode] = this ; } /* Proto pour ajouter une ville */ CODEP.prototype.addVille = function ( laVille ) { if ( ! this.villes ) this.villes = new Array() ; this.villes.push(laVille); this.nbvilles++; }
var cp = new CODEP() ; cp.init(leNouveauCodePostalTrouved); /* et pour chaque ville */ cp.addVille(laNouvelleVilleTrouved);
function EstCeQueVilleUnique(leCodeP) { if ( dataCP=CODES_POSTAUX[leCodeP] ) { return dataCP.nbvilles == 1 ; } else { alert("Désolé, mais je ne connais pas ce code postal…"); return 0; } }
par Shrell » 03 mars 2007, 12:27
Code : Tout sélectionner/* Pré-requis : un tableau associatif MESVILLES a été défini, contenant en clé le code postal, en valeur le simple string du nom de la ville Syntaxe de chaque item du array MESVILLES : MESVILLES[string(*) codepostal] = string nomDeLaVille> ; (*) pour que "01254" ne devienne pas 1254 (octal ?) */
/* Pré-requis : un tableau associatif MESVILLES a été défini, contenant en clé le code postal, en valeur le simple string du nom de la ville Syntaxe de chaque item du array MESVILLES : MESVILLES[string(*) codepostal] = string nomDeLaVille> ; (*) pour que "01254" ne devienne pas 1254 (octal ?) */
par Phil93 » 03 mars 2007, 12:03
Ce que je voulais dire c'est que demander à javascript, qui est un langage interprété coté client, dans un contexte somme toute très particulier (il est completement dépendant du navigateur dans lequel il s'exécute), de passer en revue séquentiellement 36000 enregistrement (meme en prévoyant une condition de sortie) va sensiblement ralentir toutes les autres activités.
/* Pré-requis : un tableau associatif MESVILLES a été défini, contenant en clé le code postal, en valeur le simple string du nom de la ville Syntaxe de chaque item du array MESVILLES : MESVILLES[string(*) codepostal] = string nomDeLaVille> ; (*) pour que "01254" ne devienne pas 1254 (octal ?) */ /* Ma fonction appelée par l'utilisateur, après son click sur le bouton (encore une fois : j'ai bien compris que ça n'était pas le problème exact soulevé par DesmaT) */ function OnClickBoutonOK ( ) { /* Je relève la valeur donnée par l'utilisateur (pourrait aussi être passé en argument, mais bon…) */ var codeUser = document.getElementById('champ-codep').value; if ( nomVille=MESVILLES[codeUser] ) alert("La ville s'appelle «"+nomVille+"»") ; else alert("Cette ville m'est inconnue."); }