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

Langage PHP Discussion :

[Tableaux] Problème uniquement sur Firefox !


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2006
    Messages : 216
    Par défaut [Tableaux] Problème uniquement sur Firefox !
    Bonjour à tous,

    Voilà mon souci... J'ai une entrée dans un formulaire dont le premier caractère est très souvent "," (exemple : ",Machin,Bidule,Truc,chose"). Cette entrée est récupérée dans un formulaire suivant et traitée comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $entree= addslashes($_POST["entree"]);
    if(substr($entree,0,1)==",") { // On enleve la premiere "," si elle y est.
    	$entree[0]="";
    }
    En gros, j'enlève la première virgule pour éviter diverses erreurs par la suite. Cela est alors mis en base de données : aucun problème !
    Mais je récupère ceci dans un deuxième formulaire...
    Dans un input dont la valeur est mon entrée, sans virgule toujours.
    Et voilà que sous firefox, j'ai un bug ! Si je soumets le deuxième formulaire, il me dit que $_POST["entree"] n'est pas définie et il ne la met donc pas en base !
    Si j'essaye de modifier le contenu de mon formulaire, je m'aperçois qu'il y a un petit carré présent tout au début du texte de $entree...
    Si je l'enlève, ça marche.

    Ce problème ne m'arrive pas avec IE...

    Si quelqu'un a une idée... là pour moi c'est mystère et boule de gomme !

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Salut,

    Je ne pense pas que tu puisses manipuler ta chaine ainsi, en mettant la première valeur à "" pour espérer supprimer le premier caractère.

    Il faut que tu recrées une chaine, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // $entree= addslashes($_POST["entree"]);
    if(substr($entree,0,1)==",") { // On enleve la premiere "," si elle y est.
    	$entree= substr($entree,1);
    }
    Question : pourquoi faire le addslashes à ce moment là ? Je te conseille de le faire au moment de l'insertion en base

    A+

  3. #3
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    change de méthode pour supprimer le premier caractère. Ce que tu fais... c'est mal !

    Si tes chaînes sont modifiées de cette manière, je mets le fil de mon clavier à couper qu'elles ne te poseront plus de problème.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2006
    Messages : 216
    Par défaut
    Merci à vous deux pour vos réponses rapides (ce forum est vraiment exceptionnel).

    Citation Envoyé par Eusebius
    change de méthode pour supprimer le premier caractère. Ce que tu fais... c'est mal !
    Pourquoi c'est si mal ? Je croyais qu'on pouvait considérer les caractères d'une chaîne de la même manière qu'un tableau...

    Si tes chaînes sont modifiées de cette manière, je mets le fil de mon clavier à couper qu'elles ne te poseront plus de problème.
    Bon ben, tu seras ravi de savoir que tu peux encore garder ton clavier quelques temps .

    Question : pourquoi faire le addslashes à ce moment là ? Je te conseille de le faire au moment de l'insertion en base
    Déjà, merci de ta réponse .
    Il y a une insertion en base juste après ça...
    En version simplifiée, on a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $entree=addslashes($_POST["entree"]);
     
    $sql=mysql_query("INSERT INTO .......")
    directement après donc... Tu verrais ça autrement ?

  5. #5
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par Msieurduss
    Pourquoi c'est si mal ? Je croyais qu'on pouvait considérer les caractères d'une chaîne de la même manière qu'un tableau...
    En C oui, mais pas en PHP ! En PHP il faut utiliser des accolades et pas des crochets. Et encore, même si on considère que ça pourrait être le cas, tu veux mettre "" dans la première case du tableau, comment ça pourrait être codé en interne ? Même en C on ne peut pas faire comme ça, il faut décaler tout le tableau d'une case. D'où la reconstruction d'une nouvelle chaîne avec substr.

    Citation Envoyé par Msieurduss
    Bon ben, tu seras ravi de savoir que tu peux encore garder ton clavier quelques temps .
    T'inquiète, j'avais pas pris de risques, c'est un clavier infrarouge

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2006
    Messages : 216
    Par défaut
    Citation Envoyé par Eusebius
    En C oui, mais pas en PHP ! En PHP il faut utiliser des accolades et pas des crochets. Et encore, même si on considère que ça pourrait être le cas, tu veux mettre "" dans la première case du tableau, comment ça pourrait être codé en interne ? Même en C on ne peut pas faire comme ça, il faut décaler tout le tableau d'une case. D'où la reconstruction d'une nouvelle chaîne avec substr.
    Maintenant que tu le dis, oui, je me rends compte de mon (énorme) erreur . Merci pour les infos

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Etant donné que addslashes ne sert que dans la création de la requête, tu n'as pas vraiment besoin de l'utiliser ailleurs qu'au moment de la création de celle-ci justement ! ;)
    Je vois . J'avoue que j'ai pas l'habitude de procéder comme ça... Mais tu as raison, ta version permet quelque chose de plus souple .

  7. #7
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Non non, c'est OK alors C'est une bonne idée de récupérer les valeurs de ton formulaire dans des variables au lieu d'utiliser directement le tableau _POST, ça permet une meilleure lisibilité + une meilleure maintenabilité.

    Mais Je verrais plutot quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $entree = $_POST['entree'];
     
    $sql = "SELECT * FROM table WHERE entree = ' " . addslashes($entree) . "' ";
    Etant donné que addslashes ne sert que dans la création de la requête, tu n'as pas vraiment besoin de l'utiliser ailleurs qu'au moment de la création de celle-ci justement !

    C'est un tout petit peut plus propre quand même !

    A+

    PS : il vaut mieux utiliser mysql_real_escape_string() que addslashes

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

Discussions similaires

  1. Slidedown saccadé uniquement sur firefox
    Par durnambule dans le forum jQuery
    Réponses: 4
    Dernier message: 21/04/2011, 16h23
  2. Problème affichage sur firefox
    Par steph70 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 20/07/2010, 15h00
  3. [Tableaux] probléme étrange sur un array
    Par boadog dans le forum Langage
    Réponses: 2
    Dernier message: 28/11/2007, 10h43
  4. [Smarty] problème compréhension sur les tableaux
    Par mohican13 dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 09/02/2006, 16h44
  5. Réponses: 11
    Dernier message: 25/11/2005, 09h52

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