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 :

[Système] Apostrophes doublés SqlServer


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut [Système] Apostrophes doublés SqlServer
    Bonjour,

    J'espère être dans la bonne section

    Voilà mon problème, j'ai un formulaire sur une page PHP avec deux textarea. J'envoie les données via POST et ensuite je les traite. Je fais rien de particulier sur les chaînes de ces textarea.
    Et là c'est la cata

    Alors si je fais rien de spécial sur les chaînes pour échapper les apostrophes, dans ma base SQL Server, l'enregistrement est OK et ça m'enregistre qu'un apostrophe. Par contre quand je réaffiche la variable, je me retrouve avec des apostrophes doublés.

    Donc je me dis, hop hop tu vas chercher dans les fonctions de PHP. J'essaye striplashes, htmlentities et tous les trucs du genre rien n'y fait. C'est doublé, voir quadruplé. Ca m'énerve, parce que j'essaye dans tous les sens sans trouver !

    Quelqu'un aurait-il une idée ?
    Merci de votre aide !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2004
    Messages : 161
    Points : 142
    Points
    142
    Par défaut
    Ca serait possible d'avoir des petits bouts de code...
    Merci d'avance

  3. #3
    Membre averti Avatar de binouzzz19
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    385
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 385
    Points : 368
    Points
    368
    Par défaut
    tu peux mettre un exemple stp !! je n'ai pas bien compris ton problème

    Cordialement

  4. #4
    Invité
    Invité(e)
    Par défaut
    Oui désolée. Enfin le code n'a rien de spécial c'est pour cela que j'ai pas mis d'exemple. Mais je vais essayer d'être plus claire :

    Code de création de mon textarea :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <LABEL for="comm" title="Saisissez les éventuels commentaires concernant cette commande"> Commentaires : </LABEL>
    <TEXTAREA id="comm" name="comm" title="Saisissez les éventuels commentaires concernant cette commande" tabindex="5" onfocus='this.className="focus";' onblur='this.className="normal";' maxlength="255" rows="5" cols="40" /><?php echo $comm; ?></TEXTAREA>
    Code de traitement de ce textarea (le traitement est sur la même page que le formulaire parce que c'est un petit formulaire ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $comm = ($_POST['comm']=='') ? 'NULL' : '\''.$_POST['comm'].'\'';
    if($comm!='NULL' && strlen($comm)>257)
    {
    	$msgErreur .= '<LI>commentaires trop long</LI>';
    }
    Code pour insérer mon commentaire dans la base SQl serveur (je l'ai abrégé pour gardé que la variable commentaire et SQL_INSERT est une fonction personnelle pour insérer les données --> en fait elle utilise juste la fonction normale pour insérer dans une base) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $insertAnnexe = SQL_INSERT("INSERT INTO maTable VALUES (".$comm.") ;");
    Et ensuite pour récupérer ma variable à afficher dans mon formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    • Si c'est récupérer du traitement du formulaire : $comm = ($comm=='NULL') ? '' : trim($comm,'\'');

    Voilà pour les bouts de code. Le problème c'est que quand j'essaye de réafficher la variable dans le formulaire (à partir de ce qui est récupérer dans le traitement du formulaire), les apostrophes de mon texte sont doublés.

    Voilà j'espère avoir un peu mieux expliqué mon problème.

    Merci de votre aide!

  5. #5
    Membre averti Avatar de binouzzz19
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    385
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 385
    Points : 368
    Points
    368
    Par défaut
    [CODE]... ?></TEXTAREA>[/CODE]
    pas besoin de textarea puisque tu le ferme avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($comm!='NULL' && strlen($comm)>257)
    Je comprend pas pk tu teste strlen($comm)>257, vu que ton textarea est limité a 255 !!

    Ensuite, pour voir les erreurs, je ferais une autre page qui séparerais le code html et php (en gros affichage du form et test des valeurs ). Je suppose que tu as un bouton envoyer !!

    A mon avis, cela viendrait du fait que le textarea est automatiquement saisi entre " " " donc lorsque tu l'affiche il y les guillemets, et donc ensuite ca le double, quadruple ...

    Essaye déjà ce que je t'ai dit

  6. #6
    Invité
    Invité(e)
    Par défaut
    Oups pour la fermeture tu textarea, j'avais pas fait gaffe!

    Sinon je teste supérieur à 257 parce qu'à la ligne précédente quand je récupère le contenu du textarea dans $comm je lui affecte un apostrophe devant et un derrière en plus pour en faire une chaîne pour l'insertion SQL, donc 255+2=257.

    A mon avis, cela viendrait du fait que le textarea est automatiquement saisi entre " " " donc lorsque tu l'affiche il y les guillemets, et donc ensuite ca le double, quadruple ...
    J'ai pas vraiment compris ce que tu voulais dire, désolée.

    Je vais regarder tout ça.

    Merci

    EDIT : j'ai recréé un fichier de test ne faisant qu'afficher la variable $_POST['comm'] pour voir, et dedans les apostrophes sont doublés (je ne fais rien dans le fichier à part echo de cette variable).

  7. #7
    Membre averti Avatar de binouzzz19
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    385
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 385
    Points : 368
    Points
    368
    Par défaut
    Ce que je voulais dire, c'étais que lorsque quelque chose est saisi dans un textarea, je pense qu'il est automatiquement mis entre apostrophes, donc lorsque tu l'affiche : "<?php echo $comm ?>" les cotes seront affichées ...

    Je sais pas trop, ca me semble tiré par les cheveux ^^ mais je ne vois pas sinon désolé !!

    Je vais y réfléchir, tiens-moi au courant

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 131
    Points : 132
    Points
    132
    Par défaut
    Je ne vois pas l'intéret d'ajouter des apostrophes pour l'insertion.
    Pourquoi ne pas faire tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQL_INSERT("INSERT INTO maTable VALUES ('".$comm."') ;");

  9. #9
    Invité
    Invité(e)
    Par défaut
    A cause du fait que $comm peut prendre la valeur NULL dans ce cas là l'insertion devient :

    SQL_INSERT("INSERT INTO maTable VALUES (NULL) ;");

    Et donc là j'ai plus d'apostrophes, c'est pour cela que je les rajoute directement dans la variable $comm si elle ne vaut pas NULL pour que quelque soit la valeur de $comm mon insertion soit correcte.

  10. #10
    Membre averti Avatar de binouzzz19
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    385
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 385
    Points : 368
    Points
    368
    Par défaut
    dans ce cas, evite de mettre NULL, et fait un test :

    If (isset($_POST['comm']) && !empty($_POST['comm']) )
    {
    insert ...
    }
    else
    {
    echo "Erreur : Pas de commentaires"
    }

  11. #11
    Invité
    Invité(e)
    Par défaut


    Mais les commentaires ne sont pas obligatoires dans ma table sinon je ne m'embêterais pas avec des NULL !

  12. #12
    Membre averti Avatar de binouzzz19
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    385
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 385
    Points : 368
    Points
    368
    Par défaut
    dans ce cas ne met pas null mais ""

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bon je sais plus pourquoi mais dans une table la valeur NULL n'équivaut pas à "".
    SInon j'ai ce problème dans presque tous mes scripts, je vais pas tous les reprendre pour utiliser cette solution. Si on peut insérer NULL c'est pas pour rien Enfin ça serait bête sinon

    Je voulais une solution à ce problème là en mettant NULL et s'il n'y en a pas ben tant pis.
    Mais merci de vos réponses

  14. #14
    Membre averti Avatar de binouzzz19
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    385
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 385
    Points : 368
    Points
    368
    Par défaut
    if($comm == 'NULL')
    $insertAnnexe = SQL_INSERT("INSERT INTO maTable VALUES (NULL) ;");
    else
    $insertAnnexe = SQL_INSERT("INSERT INTO maTable VALUES (".$comm.") ;");

  15. #15
    Invité
    Invité(e)
    Par défaut


    Ca marcherait bien si j'avais une ou deux variables. Mais tu te rends compte si j'ai 15 champs à enregistrer avec plusieurs champs pouvant être à NULL ?

    C'est pas possible de faire comme tu veux.

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 131
    Points : 132
    Points
    132
    Par défaut
    Ce n'est pas parceque NULL est autorisé dans une colonne de table qu'il faut insérer NULL au lieu de "". A part pour des champs type date/heure, il vaut mieux avoir une valeur par défaut (gérée par la bdd ou dans l'insert) parece que NULL n'est pas très pratique, notamment pour faire des comparaisons (plus grand que ...)

Discussions similaires

  1. [Système] Apostrophe dans l'URL
    Par zut94 dans le forum Langage
    Réponses: 5
    Dernier message: 06/09/2006, 15h34
  2. [Système] Supprimer double quotes d'une chaine
    Par chienlou dans le forum Langage
    Réponses: 15
    Dernier message: 24/05/2006, 14h29
  3. [MySQL] pb apostrophe et double guillemets
    Par gslack dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/12/2005, 10h57

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