Mysql_real_escape_string ne marche pas dans mon cas :'( [Résolu]

Messages postés
437
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
2 juillet 2014
- - Dernière réponse : payetonju
Messages postés
437
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'
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
197
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
20 février 2013
1
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 154 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_47
Messages postés
10
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
2 septembre 2010
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 154 internautes nous ont dit merci ce mois-ci

Commenter la réponse de narkos2
Messages postés
437
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
2 juillet 2014
0
Merci
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; ?
Commenter la réponse de payetonju
Messages postés
437
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
2 juillet 2014
0
Merci
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 :/
Commenter la réponse de payetonju
Messages postés
437
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
2 juillet 2014
0
Merci
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'
Commenter la réponse de payetonju