Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/06/2008, 09h00   #1
fey
Membre du Club
 
Inscription : 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 : 59
Points : 59
Par défaut 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 :
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 :
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 :
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
fey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 14h02   #2
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 316
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 : 9 316
Points : 15 522
Points : 15 522
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+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 14h20   #3
fey
Membre du Club
 
Inscription : 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 : 59
Points : 59
oui mais comme je disais, ceula sont deja en base, donc comment je peux faire pour pallier a ce probleme ?
fey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 14h30   #4
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 828
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 828
Points : 35 849
Points : 35 849
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 ?
Citation:
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.
Citation:
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.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 17h04   #5
fey
Membre du Club
 
Inscription : 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 : 59
Points : 59
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.
fey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 17h07   #6
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 316
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 : 9 316
Points : 15 522
Points : 15 522
A cette endroit là
Code :
$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+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 17h16   #7
fey
Membre du Club
 
Inscription : 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 : 59
Points : 59
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
fey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 17h29   #8
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 316
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 : 9 316
Points : 15 522
Points : 15 522
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 :
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 :
select upper(rtrim(ton_champ))
Remarque : mes syntaxe SQL sont valables pour Oracle => à adapter pour ton SGBD, mais normalement, c'est assez standard ...

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 17h40   #9
fey
Membre du Club
 
Inscription : 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 : 59
Points : 59
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
fey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 18h04   #10
fey
Membre du Club
 
Inscription : 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 : 59
Points : 59
j'ai essayer le UPPER mais j'ai pas vu la different (je suis en varchar)
Code :
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
fey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 21h32   #11
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 828
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 828
Points : 35 849
Points : 35 849
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...
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 08h15   #12
fey
Membre du Club
 
Inscription : 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 : 59
Points : 59
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 ^^
fey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 09h37   #13
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 316
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 : 9 316
Points : 15 522
Points : 15 522
Citation:
Envoyé par fey Voir le message
j'ai essayer le UPPER mais j'ai pas vu la different (je suis en varchar)
Code :
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 :
$result = $db->sqlSelect("UPPER(nom)",TB_ART,"UPPER('$str')");
A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 13h47   #14
fey
Membre du Club
 
Inscription : 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 : 59
Points : 59
Citation:
Envoyé par E.Bzz Voir le message
M'étonnerais qu'elle soit bonne cette syntaxe
Ca devrait plutôt ressembler à
Code :
$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 ?
fey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 13h53   #15
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 316
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 : 9 316
Points : 15 522
Points : 15 522
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+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 14h27   #16
fey
Membre du Club
 
Inscription : 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 : 59
Points : 59
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 ^^
fey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 15h10   #17
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 828
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 828
Points : 35 849
Points : 35 849
Vérifie peut-être la cohérence de l'encodage entre ta base, ton html et ta requête.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 17h16   #18
fey
Membre du Club
 
Inscription : 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 : 59
Points : 59
je vais essayer de voir cela
fey est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h47.


 
 
 
 
Partenaires

Hébergement Web