Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 12/06/2006, 11h26   #1
Futur Membre du Club
 
Inscription : février 2005
Messages : 80
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 80
Points : 19
Points : 19
Par défaut [INSERT]garder zero au début d'une chaine de caractere

Bonjour,
j'ai une zone telephone dans un formulaire à remplir par l'utilisateur.
le zero du debut n'est pas gardé lorsque j'insere l'info dans la base MYSQL.

je recupere la valeur :


Code :
$tel = htmlspecialchars($_POST['telephone'], ENT_QUOTES);

jusque là le format est bien gardé.

voici ma requete d'insertion:

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
26
27
28
29
30
31
32
33
$query = sprintf('UPDATE Distributeur
			SET region = %s,
			enseigne = %s,
			adresse1 = %s,
			adresse2 = %s,
			cp = %s,
			ville = %s,
			tel = %s,
			fax = %s,
			mail = %s,
			descriptif = %s,
			site = %s,
			code_distributeur = %s,
			mailing_list = %s,
			civilite = %s,
			nom = %s
			WHERE ID = %s',
			quote_smart($dpt),
			quote_smart($enseigne),
			quote_smart($adresse_1),
			quote_smart($adresse_2),
			quote_smart($cp),
			quote_smart($ville),
			quote_smart($tel),
			quote_smart($fax),
			quote_smart($mail),
			quote_smart($descriptif),
			quote_smart($site),
			quote_smart($code_client),
			quote_smart($mailing),
			quote_smart($civilite),
			quote_smart($nom),
			quote_smart($ID));
là le zero de debut n'est plus gardé.

j'ai essayé en faisant :
mais ca ne change rien.
je ne veux pas forcer le zero car le telephone n'est pas forcement en france.

si qqu'un peut me donner un coup de main ce serait parfait.
Merci.
guns17 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 11h36   #2
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
(code et pas php)

Quel est le type de ton champ tel dans ta base ?
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 13h06   #3
Futur Membre du Club
 
Inscription : février 2005
Messages : 80
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 80
Points : 19
Points : 19
salut,
je galerai un peu avec les balises, merci de m'avoir indiqué,

le champ est varchar(14)
guns17 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 13h25   #4
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
$tel 2 et $tel je suppose que c'est la même chose...

Il doit y avoir une conversion implicite en entier quelque part, mets des echo un peu partout pour savoir où (à chaque traitement sur $tel).
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 13h47   #5
Futur Membre du Club
 
Inscription : février 2005
Messages : 80
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 80
Points : 19
Points : 19
oui $tel2 et $tel sont identiques, j'ai rectifié.

j'ai affiché ma requete :

Code :
1
2
3
4
5
 
UPDATE Distributeur SET region = 1, enseigne = 'test', adresse1 = 'test',
adresse2 = '', cp = 1000, ville = 'TEST', tel = 0123456789, fax = '', mail = '',
descriptif = '', site = '', code_distributeur = 1, mailing_list = 1, civilite = 'Mlle',
nom = '' WHERE ID = 357
un echo($tel); me donne 0123456789 que ce soit avant ou apres l'execution de ma requete.

mais je me retrouve avec 123456789 dans ma base.

la valeur de tel n'a pas de guillemets dans la requete, il faudrait forcer le type mais je ne sais pas comment.
guns17 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 13h52   #6
Membre chevronné
 
Inscription : mars 2005
Messages : 583
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 583
Points : 651
Points : 651
hello,

ta fonction quote_smart, j'imagine que c'est celle qu'on peut trouver sur php.net, ou qu'elle lui ressemble.

donc dans ce cas, elle echappe les chaines et les met entre guillemets pour l'insertion dans la base. et elle laisse passer les numériques. du coup comme un n° de téléphone n'est composé que de chiffres, elle confond et le traite comme un entier, alors que toi tu t'attends à le voir traité comme chaine.

pour résoudre ce probleme tu as juste à rajouter des guillemets ou des apostrophes dans le modele de ta requete ==> tel='%s' , fax='%s' etc. et ce pour tous les trucs qui peuvent porter à confusion.

Bon courage pour la suite.
Petibidon est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 13h54   #7
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Encadre le numéro de téléphone avec des quotes comme pour les autres champs.
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 14h25   #8
Futur Membre du Club
 
Inscription : février 2005
Messages : 80
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 80
Points : 19
Points : 19
Merci, le pb vient bien de quote_smart.

du coup j'ai géré la variable à part car je laisse la possiblité d'inserer des separateurs pour le telephone, donc la variable peut etre numerique ou une chaine.

Code :
1
2
3
4
5
6
7
8
9
10
11
 
// gestion du tel et du fax
	if(is_numeric($tel))
		$tel_ins = 'tel = \'%s\'';
	else
		$tel_ins = 'tel = %s';
 
	if(is_numeric($fax))
		$fax_ins = 'fax = \'%s\'';
	else
		$fax_ins = 'fax = %s';
Merci, le pb est réglé.
guns17 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 15h37   #9
Membre émérite
 
Inscription : juin 2002
Messages : 1 013
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 1 013
Points : 959
Points : 959
au lieu de mettre ton champ en varchar, tu peux le mettre en tinytext
francis m est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h39.


 
 
 
 
Partenaires

Hébergement Web