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

PHP & Base de données Discussion :

[INSERT]garder zero au début d'une chaine de caractere


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Points : 48
    Points
    48
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $tel = htmlspecialchars($_POST['telephone'], ENT_QUOTES);

    jusque là le format est bien gardé.

    voici ma requete d'insertion:

    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
    $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.

  2. #2
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    (code et pas php)

    Quel est le type de ton champ tel dans ta base ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    salut,
    je galerai un peu avec les balises, merci de m'avoir indiqué,

    le champ est varchar(14)

  4. #4
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    $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).

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    oui $tel2 et $tel sont identiques, j'ai rectifié.

    j'ai affiché ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    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.

  7. #7
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Encadre le numéro de téléphone avec des quotes comme pour les autres champs.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    au lieu de mettre ton champ en varchar, tu peux le mettre en tinytext

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer les zéros au début d'une chaine
    Par HULK dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/11/2012, 18h13
  2. Afficher le début d'une chaine de caractère
    Par yaumme dans le forum Langage
    Réponses: 2
    Dernier message: 10/07/2007, 14h46
  3. Extraire le début d'une chaine
    Par iomega dans le forum Langage
    Réponses: 4
    Dernier message: 12/06/2007, 14h27
  4. Pour ne conserver que le début d'une chaine ?
    Par laloupiote dans le forum Langage
    Réponses: 2
    Dernier message: 22/05/2007, 19h57
  5. erreur pour une insertion d'une chaine de caractere dans une cellule
    Par amel95140 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2006, 09h09

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