Mysql_real_escape_string ne marche pas dans mon cas :'(

Résolu
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 - 31 août 2010 à 15:18
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 - 2 sept. 2010 à 15:45
Bonjour,

Sur mon site, il y a possibilité d'ajouter des albums photos, ça fonctionne très bien, jusqu'à ce qu'un membre ajoute un album contenu une apostrophe. J'ai pourtant utilisé mysql_real_escape_string mais ça ne fait rien.

Voici mon code :
if( isset( $_POST['ajout_album'] ) )
{ 
  $_POST['nom_album'] =  explode("\", $_POST['nom_album']);
  $_POST['nom_album'] = $_POST['nom_album'][0];
  if( isset( $_POST['nom_album'] ) && $_POST['nom_album'] == "" )
  {
    $ErreurAlbum = "Il faut que tu remplisses ce champs !";
  }
  if( isset( $_POST['sorties'] ) && $_POST['sorties'] == "rien" )
  {
    $ErreurSortie = "Il faut que tu sélectionne ce champs !";
  }
  if( ( isset( $_POST['sorties'] ) && $_POST['sorties'] != "rien" ) && ( isset( $_POST['nom_album'] ) && $_POST['nom_album'] != "" ) )
  {
    $PostCodeSortie = $_POST['sorties'];
    $PostAlbum = $_POST['nom_album'];

    // Verifie si l'utilisateur a rentre des caracteres speciaux, si c'est le cas, le programme renvoie une erreur
    if( VerifAlphanumerique($PostAlbum) == false )
{
      $ErreurAlbum = "Erreur de caractère ! Caractères acceptés : 
";
      $ErreurAlbum.= " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789_-+()*%/.!? 
";
      $ErreurAlbum. = "(ATTENTION ! les accents ne sont pas acceptès";
}
    else
    {
      $PostCodeAlbum =  str_replace(" ", "_", $PostAlbum );

      $Conn = mysql_connect($host,$user,$pwd);
      mysql_select_db($bdd,$Conn);
      mysql_query("SET NAMES 'UTF-8'");

      // Verification de doublon
      $sql "select CODE_DOSSIER from albums where CODE_DOSSIER '".$PostCodeAlbum."' ";
      $res = mysql_query($sql);
      $num = mysql_num_rows($res); 
      if( $num > 0 )
      {
        $ErreurAlbum = "Un album porte déjà ce nom. Utilise en un autre stp.";
      }
      else
      {
        //$PostCodeAlbum = str_replace("'", "", $PostCodeAlbum);
         $PostCodeAlbum = mysql_real_escape_string( $PostCodeAlbum ); 

        $AlbumFolder  = "..".$CheminPhotos.$PostCodeSortie."/".$PostCodeAlbum;
    
        $sql = "insert into albums (CODE_DOSSIER,DOSSIER,CODE_SORTIE,AJOUTE_PAR,DATE_AJOUT,IP_AJOUT) values ";
        $sql.= "('".strtolower($PostCodeAlbum)."','".$PostAlbum."','$PostCodeSortie','$SessionLogin','$date','$ip') ";
        mysql_query("SET NAMES 'UTF-8'");
        $res = mysql_query($sql);
        //echo $sql;

        // traitement de copie du dossier de l'album, dans le dossier du type de sortie correspondante
        // Apres Insertion du dossier dans la BDD, copie physique de ce dossier sur le serveur
        if(!is_dir(strtolower($AlbumFolder))) 
        {
          echo "[".$AlbumFolder."]";
          mkdir(strtolower($AlbumFolder));
          $FolderCreated = "<center>Dossier copié et enregistré avec succès.</center>";
        }
  }
      mysql_close($Conn);
}
  }
}


Je veux essayer d'inserer "salut' sa va" en tant que nom d'albums, mais ma base ne prend en compte que "salut" et donc la suite du code ne s'execute pas.

Merci d'avance.
Ju'

5 réponses

cs_47 Messages postés 197 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 20 février 2013 1
31 août 2010 à 16:38
Bonjour,

vérifie si tu n'as pas magic_quotes_gpc activé (voir la fonction get_magic_quotes_gpc() ou dans ton php.ini)
s'il est activé le problème est ici:
$_POST['nom_album'] = explode("\", $_POST['nom_album']);

à remplacer par:
$_POST['nom_album'] = explode("\", stripslashes($_POST['nom_album']));

car le ' est remplacer par \' donc quand tu fais ton explode tu te retrouve avec la 1ère partie de ta chaine

bonne soirée
3
narkos2 Messages postés 10 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 2 septembre 2010
2 sept. 2010 à 12:01
Hello,

Si l'enregistrement ressemble à ça "test\'test" sur mysql c'est oki.
Après quand tu l'affiche tu fais:

<?php
print stripslashes($res['ton_champ_sql_contenant_test_test']);
?>

stripslashes() (Supprime les \ dans la chaine donnée en paramètre)

Bonne continuation
3
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 4
31 août 2010 à 17:10
Bonjour,
Merci pour ta réponse!
Dans phpinfo j'ai effectivement :

magic_quotes_gpc On On
magic_quotes_runtime Off Off
magic_quotes_sybase Off Off


je dois donc rajouter dans mon php.ini (je suis chez 1&1, et c'est vraiment naz !) :
magic_quotes_gpc = off; ?
0
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 4
31 août 2010 à 17:50
Probleme corrigé en partie. Ma page ne saute plus, et certains programmes se mettent à marcher.
Mais là mon dossier se créé sous "test\'test" quand je tappe "test'test", mais aucune insertion dans la base ne se fait :/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 4
2 sept. 2010 à 15:45
Bon le dossier s'est bien copié, mais l'enregistrement ne se faisait pas car ça marquait :
$SQL = "INSERT INTO matable (dossier) values ('test'test')";


J'ai rajouté mysql_real_escape_string dans ma variable qui contenait "test'test" et je n'ai plus de probleme.

Souci résolu merci beaucoup.

Bonne fin de journée.

Ju'
0
Rejoignez-nous