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 :

Mysql, apostrophe et champ input [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut Mysql, apostrophe et champ input
    Bonjour,

    mon problème est tout simple mais je ne trouve pas la solution, j'ai un champ texte qui peut contenir une apostrophe, a l'ajout dans la base je fait un addlsashes, comme ci desous, jusque la tout va bien j'ai les données dans ma base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     $titre = addslashes($_POST['titre']);
     $contenu = addslashes($_POST['contenu']);
     $now = time();
     
     $sql = "INSERT INTO actualites
              VALUES ('','$titre','$contenu','0','$now')";
     mysql_query($sql);
    J'ai donc dans ma base comme titre pour prendre un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Test de l'actualité
    A la récupération je fait ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    $id_actu = $_GET['id_actu'];
    $sql = "SELECT * FROM actualites WHERE id_actu = '$id_actu'";
    $result = mysql_query($sql);
    while($data = mysql_fetch_array($result)){
      $titre = addslashes($data['titre']);
      $contenu = $data['contenu'];
    }
    ?>
     
    ....
     
    <input type = 'text' name = 'titre' value = '<?=$titre?>' style = 'width:100%'>
    Problème ca m'affiche dans le champ texte
    Si quelqu'un a une idée ?

    A noter que je n'ai pas de problème avec le contenu car il est géré avec CkEditor

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Il faut encoder ce caractère, en utilisant htmlspecialschar ou htmlentities (ça dépend des contenus), mettre son entité HTML à la place.

    Petit conseil en passant concernant ce code :
    Utilise plutôt :
    La syntaxe courte provoque, ou provoquera plus de problème quelle n'en résout.
    Et encore, elle ne résout rien, à part faire une soit disant économie de code.

    Aussi, j'y mets des réserve sur le fait de mettre des espaces au niveau des attributs HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type = 'text' name = 'titre' value = '<?=$titre?>' style = 'width:100%'>
    Corrige plutôt comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type='text' name='titre' value='<?php echo $titre; ?>' style='width:100%'>
    Voir aussi utiliser des doubles quotes (ou guillemets) à la place des simples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type = "text" name="titre" value="<?php echo $titre; ?>" style="width:100%">

  3. #3
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    J'ai mis a la récupération

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $id_actu = $_GET['id_actu'];
    $sql = "SELECT * FROM actualites WHERE id_actu = '$id_actu'";
    $result = mysql_query($sql);
    while($data = mysql_fetch_array($result)){
      $titre = htmlspecialchars($data['titre']);
      $contenu = $data['contenu'];
    }
    et ca affiche

  4. #4
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    Pourquoi utilises-tu addslahses lors de la récupération ? aucun intérêt à priori. Laisse tel quel et écris ta variable.

    Aussi, lors de l'insertion, pourquoi ne pas simplement utiliser http://fr.php.net/mysql_real_escape_string

    Pour finir, ta boucle while ne sert à rien, tu n'as qu'un enregistrement dans ton jeu de résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    $id_actu = $_GET['id_actu'];
    $result = mysql_query("SELECT * FROM actualites WHERE id_actu = '$id_actu'");
    $data = mysql_fetch_array($result);
     
    $titre = $data['titre'];
    $contenu = $data['contenu'];
    À bientôt,

  5. #5
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    Bonjour,

    Pourquoi utilises-tu addslahses lors de la récupération ? aucun intérêt à priori. Laisse tel quel et écrit ta variable.

    Aussi, lors de l'insertion, pourquoi ne pas simplement utiliser http://fr.php.net/mysql_real_escape_string
    Parce que l'injection et la sélection dans la base se font bien, et que c'est a l'affichage dans le champ input que ca part en nouilles...

    A moins que je n'ai pas bien compris comment utiliser ta fonction

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Change les séparateur au niveau du HTML.
    Ceci : value='... etc ...'
    En cela : value="... etc ..."

    Par contre, s'il y a un risque que le contenu ($titre) contienne des guillemets " et aussi des apostrophe ' , alors il y aura conflit entre le contenu et le code HTML.
    Il n'y a pas d'autre moyen que d'utiliser des entités, donc encoder.

  7. #7
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    Oui j'y avais pensé mais effectivement ca peut aussi contenir des guillemets

    Je suis pas contre encoder moi, c'est juste que je tourne en rond et ne vois pas trop comment faire

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 29/05/2016, 19h45
  2. champs input bd et javascript
    Par snakab dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/04/2005, 15h12
  3. Champ input et href
    Par licorne dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 21/03/2005, 16h53
  4. comment recuperer deux valeurs de deux champs input
    Par trialrofr dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/02/2005, 22h08
  5. Problème de contrôle de champ input texte
    Par NATHW dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/10/2004, 22h48

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