Caractères

ravello -  
 ravello -
Bonsoir,

je voudrais éclaircir un petit problème que j'ai avec un livre d'or que j'ai fait sur un site.

lorsque le visiteur poste un méssage ,au lieu d'avoir par exemple:

je n'ai

il y a:

je n\'ai

d'où celà peut il venir? pourquoi ce signe \ en plus?

merci
Configuration: Windows XP
Firefox 2.0.0.9

5 réponses

  1. Alain42
     
    Bonsoir,

    c'est un \ qui est rajouté automatiquement pour protéger les ' (car ce ' est aussi utilisé pour délimiter une chaine alors ça créerait une erreur)

    pour l'enlever passes par la fonction stripslashes() avant d'afficher.

    @lain
    0
    1. ravello
       
      Bonjour,

      je t'avoue que je ne te suis pas voilà mon script que dois je rajouter?

      merci

      <?php
      mysql_connect("", "", "i");
      mysql_select_db("livredor");

      if (isset($_POST['pseudo']) AND isset($_POST['message']))
      {

      $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));

      $message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
      $message = nl2br($message);


      mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "')");
      }
      $nombreDeMessagesParPage = 20;
      $retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livreor');
      $donnees = mysql_fetch_array($retour);
      $totalDesMessages = $donnees['nb_messages'];


      $nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);


      echo 'Page : ';
      for ($i = 1 ; $i <= $nombreDePages ; $i++)
      {
      echo '<a href="livreor.php?page=' . $i . '">' . $i . '</a> ';
      }

      ?>

      </p>

      <?php
      0
  2. Alain42
     
    Bonjour,

    Il doit manquer un bout de code, car je vois l'affichage de la pagination des messages, mais pas l'affichage du message lui même.
    0
    1. ravello
       
      re

      oui tu as raison,voilà le code complet: que dois je faire?

      <?php
      mysql_connect("", "", "");
      mysql_select_db("livreor");

      if (isset($_POST['pseudo']) AND isset($_POST['message']))
      {

      $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));

      $message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
      $message = nl2br($message);


      mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "')");
      }
      $nombreDeMessagesParPage = 20;
      $retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livreor');
      $donnees = mysql_fetch_array($retour);
      $totalDesMessages = $donnees['nb_messages'];


      $nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);


      echo 'Page : ';
      for ($i = 1 ; $i <= $nombreDePages ; $i++)
      {
      echo '<a href="livreor.php?page=' . $i . '">' . $i . '</a> ';
      }

      ?>

      </p>

      <?php


      if (isset($_GET['page']))
      {
      $page =intval( $_GET['page']);
      }
      else
      {
      $page = 1;
      }


      $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;

      $reponse = mysql_query('SELECT * FROM livreor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);

      while ($donnees = mysql_fetch_array($reponse))
      {
      echo '<p><strong>' . $donnees['pseudo'] . '</strong> :<br />' . $donnees['message'] . '</p>';
      }

      mysql_close();
      ?>
      0
  3. Alain42
     
    Bonjour,

    while ($donnees = mysql_fetch_array($reponse))
    {
    echo '<p><strong>' . $donnees['pseudo'] . '</strong> :<br />' .stripslashes( $donnees['message'] ). '</p>';
    } 
    


    je ne pense pas qu'il y ait d' apostrophe dans le pseudo, sinon tu fais pareil pour $donnees['pseudo']

    @lain
    0
    1. ravello
       
      re

      sur un tuto du site du zero,ils disent ceçi:

      Vous allez comprendre, voici un code qui annule l'effet des magic quotes :
      Code : PHP

      if(get_magic_quotes_gpc()) {
      $_POST = array_map('stripslashes', $_POST);
      $_GET = array_map('stripslashes', $_GET);
      $_COOKIE = array_map('stripslashes', $_COOKIE);
      }




      Ce code permet donc de contrer l'effet des magic quotes. Les magic quotes agissent avant l'analyse du code, ce petit code est donc à placer au tout début de votre page.


      ce n'est pas le même que le tien,il se place en début de scipt:qu'en penses tu?

      a+
      0
  4. Alain42
     
    Bonjour,

    Comme je t'ai dit plus haut les \ pour les ' sont indispensables pour éviter par exemple que ta requette qui contient des ' en début et fin de chaine ne soit perturbée par les apostrophes contenues dans les variables.

    'SELECT * FROM livreor ORDER BY id DESC WHERE message='.$message_recu.'

    qui sera en réalité si $message_recu= j'ai faim : (c'est bidon)

     'SELECT * FROM livreor ORDER BY id DESC message= ' j'ai ',


    et là le ' de j'ai est interprété comme message= j et la suite provoquera une erreur

    Il faut donc les laisser passer jusqu'au script, mais les supprimer par stripslashes avant affichage.
    0
    1. ravello
       
      donc si je comprends bien le code:{
      echo '<p><strong>' . $donnees['pseudo'] . '</strong> :<br />' .stripslashes( $donnees['message'] ). '</p>';
      } suffit


      mais que penses tu du code du site du zero?n'est il pas valable?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alain42
     
    Bonjour,
    Essayes avec ce que je t'ai donné

    Mais pour la solution du site du zero, lis le post jusqu'au bout, il fait ensuite avant la requette à la base:

    #
    // Faire une requête sécurisée
    #
            $query = sprintf("INSERT INTO products (`name`, `description`, `user_id`) VALUES ('%s', '%s', '%d')",
    #
                        mysql_real_escape_string($product_name, $link),
    #
                        mysql_real_escape_string($product_description, $link),
    #
                        $_POST['user_id']);
    #
     
    #
            mysql_query($query, $link);


    A toi de choisir
    0
    1. ravello
       
      ok

      merci

      bonne soirée
      0