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

JavaScript Discussion :

[AJAX] recherche si l'article existe deja en base


Sujet :

JavaScript

  1. #1
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut [AJAX] recherche si l'article existe deja en base
    bonjour,

    j'ai une fonction ajax qui me permet sur un onKeyUp de verifier si un champs existe deja dans la base. cela marche sauf dans certains cas :

    Aimants 25mm rouge (x10) <= il me dit que l'article n'existe pas et que donc en theorie je peux l'ajoute, sauf qu'en fait je l'affiche de la base mais bon

    Boite d'agrafes bebe (boite de 1000)<= la il m'affiche directement la requete sql avec une erreure

    //fonction qui recupere l'article du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	function afficheArticle(){
    		var adr=document.getElementById('article2').options[document.getElementById('article2').selectedIndex];
    		document.getElementById('modifierArticleNouveauNom').value=adr.text;
    		document.getElementById('modifierArticleCodeNomOri').value=adr.value;
    		verifchampsAjx(adr.text,'nomarticle','nom de cet article');
    	}
    fonction ajax
    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
     
    function ajx(champs){
    	var xhr = getXhr(); 
    	xhr.open("GET", champs, false);
    	xhr.setRequestHeader('Cache-Control','no-cache');
        xhr.send(null); 
        if(xhr.readyState == 4 ) return(xhr.responseText);
        else return(false);
    }
     
    	///////////////////////////////////////
    	//creation article
    	///////////////////////////////////////
    		function verifchampsAjx(valeurchamp,adr,ref){
    			if(valeurchamp != ''){
    				if(texte = ajx('ajax/'+adr+'.php?'+adr+'='+escape(valeurchamp))){
    					if(texte == 1)
    						ecrire('<span style="color:#cc0000">le '+ref+' de cet article : <b>'+valeurchamp+'</b> est deja pris</span>');
    					else if(texte == 2)
    						ecrire('<span style="color:#1A7917">le '+ref+' de cet article : <b>'+valeurchamp+'</b>  est libre </b></span>');
    					else
    						ecrire(texte);
    					}
    			}
    		}
    page de traitement
    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
     
    <?php
    include('../verif.php');
    //appel du fichier contenant les fonctions et les paramètres de connection de la base.
    require('../../classeBD.inc');
     
    header("Pragma: no-cache");
    header("Expires: 0");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Content-type: application/xml"); 
    //Connection à la base
    $db = new gestionBD();
    $db->connect();
     
    // VERIFICATION
    $result = $db->sqlSelect("nom",TB_ART,"nom='".$_GET["nomarticle"]."'");
    if(mysql_num_rows($result)>=1)
            echo "1";
            else
            echo "2";
    $db->disconnect();
    ?>
    on dirait que c'est le ' et x dans le nom de l'article qui le perturbe, non ?

    est ce que vous avez une idee de comment je peux resoudre ce probleme ?

    meric beaucoup

  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,
    Citation Envoyé par fey Voir le message
    Aimants 25mm rouge (x10) <= il me dit que l'article n'existe pas et que donc en theorie je peux l'ajoute, sauf qu'en fait je l'affiche de la base mais bon
    là ça doit être un problème de formatage : la chaîne testée ne correspond pas à celle stockée (min/maj, caractères accentué ou autre)

    Citation Envoyé par fey Voir le message
    Boite d'agrafes bebe (boite de 1000)<= la il m'affiche directement la requete sql avec une erreure
    Là c'est une erreur SQL : la quote (') est le délimiteur de chaîne. Normallement, pour le protéger à l'intérieur d'une chaîne, il suffit de le doubler ...

    A+

  3. #3
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    oui mais comme je disais, ceula sont deja en base, donc comment je peux faire pour pallier a ce probleme ?

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par fey Voir le message
    oui mais comme je disais, ceula sont deja en base, donc comment je peux faire pour pallier a ce probleme ?
    là ça doit être un problème de formatage : la chaîne testée ne correspond pas à celle stockée (min/maj, caractères accentué ou autre)
    donc formate ta chaine pour qu'elle corresponde à celle stockée dans ta base.
    Là c'est une erreur SQL : la quote (') est le délimiteur de chaîne. Normallement, pour le protéger à l'intérieur d'une chaîne, il suffit de le doubler ...
    crée une requête sql adaptée.

  5. #5
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    je pense que j'avais identifie le probleme des le debut, mais c'est au niveau du code, je vois vraiment comment faire ou tout du moins pas dans la pratique.

  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
    A cette endroit là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $db->sqlSelect("nom",TB_ART,"nom='".$_GET["nomarticle"]."'");
    il faut que tu fasses un replace() de ' par '' sur ta variable $_GET["nomarticle"]
    Mais je connais pas la syntaxe PHP (sûrement pas sorcier) ...

    Sinon, pour le formatage, tu peux tout transformer en majuscule pour le test (champ testée et valeur de comparaison) ...

    A+

  7. #7
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    ok merci je vais voir pour le replace()

    pour le formatage, j'ai essayer de changer des lettres par des majuscules sur des articles qu'il trouvait dans la base, et cela il dit toujours qu'ils sont present dans la base

  8. #8
    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 fey Voir le message
    pour le formatage, j'ai essayer de changer des lettres par des majuscules sur des articles qu'il trouvait dans la base, et cela il dit toujours qu'ils sont present dans la base
    Je disais ça juste pour le test, pas une conversion de ta base en majuscules

    En dehors de ta page web, en SQL, fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select upper(ton_champ)
    et compare le avec la chaîne envoyée par ton appli, convertie en majuscules, tu verras bien les différences ....

    Attention, si tes champs de bdd sont déclarés en CHAR (et non VARCHAR) tu risques d'avoir des caractères blancs en fin de chaine ==>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select upper(rtrim(ton_champ))
    Remarque : mes syntaxe SQL sont valables pour Oracle => à adapter pour ton SGBD, mais normalement, c'est assez standard ...

    A+

  9. #9
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    yep j'avais saisi, mais c'est moi qui me suis mal exprime je voulais dire ce que j'avais teste, c'est le champs qui envoi la recherche (onKeyUp) et j'avais renomme l'article pour voir si cela champs quelque chose.

    je vais essayer le upper

  10. #10
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    j'ai essayer le UPPER mais j'ai pas vu la different (je suis en varchar)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $result = $db->sqlSelect("nom",TB_ART,"UPPER(nom='$str')");
    j'ai aussi dirtement aussi essayer dans phpmyadmin et cela n'a rien change

    en plus apparement il ne trouve pas de resultat lorsqu'il y a un / dans le nom de l'article.
    hum une idee ?

    merci

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    http://www.developpez.net/forums/sho...d.php?t=576812
    Tiens, tu peux essayer de regarder la, quelqu'un qui a eu un problème peut-être similaire au tien et qui a trouvé une solution...

  12. #12
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    merci pour ton aide

    mais en fait je ne pense que ce soit le meme probleme que moi.
    visiblement c'est peut etre php mais je pense pltutot que c'est le sql qui est perturbe par ces caractere.
    je vais donc m'orentie vers la partie du forum php/mysql ^^

  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 fey Voir le message
    j'ai essayer le UPPER mais j'ai pas vu la different (je suis en varchar)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $result = $db->sqlSelect("nom",TB_ART,"UPPER(nom='$str')");
    M'étonnerais qu'elle soit bonne cette syntaxe
    Ca devrait plutôt ressembler à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $db->sqlSelect("UPPER(nom)",TB_ART,"UPPER('$str')");
    A+

  14. #14
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    M'étonnerais qu'elle soit bonne cette syntaxe
    Ca devrait plutôt ressembler à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $db->sqlSelect("UPPER(nom)",TB_ART,"UPPER('$str')");
    A+
    le 1er (nom) c'est le nom du champs de la table, donc pourquoi mettre UPPER ?

  15. #15
    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 fey Voir le message
    le 1er (nom) c'est le nom du champs de la table, donc pourquoi mettre UPPER ?
    Pour le convertir en majuscules

    Si tu compare "a" (stocké en bdd) et "A" (envoyé par Ajax) ça va pas le faire.
    Il faut donc convertir les 2 pour la comparaison.
    Mais ne connaissant pas PHP ni ta bdd, ma syntaxe n'est pas fiable : c'est juste le principe qu'il faut retenir ...

    A+

  16. #16
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Pour le convertir en majuscules

    Si tu compare "a" (stocké en bdd) et "A" (envoyé par Ajax) ça va pas le faire.
    Il faut donc convertir les 2 pour la comparaison.
    Mais ne connaissant pas PHP ni ta bdd, ma syntaxe n'est pas fiable : c'est juste le principe qu'il faut retenir ...

    A+
    hum je m'exprime mal

    j'ai bien saisi a quoi cela sert, mais je ne vois pas l'interet de changer l'identifiant d'un champs d'une table et de le passer en majuscule, surtout qu'en le laissant en minuscule cela fonctionne avec certains articles ou plutôt cela ne fonctionnent pas qu'avec seulement certains articles

    sinon pour le A de l'ajax et de la bbd, sur le principe je suis d'accord sauf que la requete est directement afficher sans changement sur la chaine de caractere donc le A maj et aussi bien dans la requete que dans la bdd.
    en plus j'ai fais le test en changent la chaine afficher dans mon input pour mettre des majuscules, et quand il retourne dans la base (avec l'article qui fonctionnais deja avant) il le trouve toujours dedans ^^

  17. #17
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Vérifie peut-être la cohérence de l'encodage entre ta base, ton html et ta requête.

  18. #18
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    je vais essayer de voir cela

Discussions similaires

  1. recherche liste de données existant pas en base
    Par battl14 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/05/2009, 19h04
  2. [XSLT]verifier si un noeud existe deja
    Par davelo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/03/2006, 16h47
  3. Comment rechercher si un numéro existe déja ?
    Par Fredri dans le forum Access
    Réponses: 14
    Dernier message: 06/01/2006, 16h58
  4. Tester si une données existe deja
    Par mael94420 dans le forum ASP
    Réponses: 1
    Dernier message: 18/10/2005, 17h09
  5. [Delphi7 interbase] Rechercher si une table existe
    Par Ricardeau dans le forum Bases de données
    Réponses: 6
    Dernier message: 15/03/2004, 10h07

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