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 :

Serialize et apostrophe


Sujet :

Langage PHP

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 Serialize et apostrophe
    Bonjour

    pour passer un tableau en GET je le serialize et le unserialize. Tout fonctionne bien sauf quand j'ai une apostrophe dans ma chaine "sérialisé". Dans ce cas la le unserialize ne renvoye pas de tableau.

    Par exemple pour la chaine "sérialisé" suivante :
    a:1:{i:1;a:7:{s:7:"contenu";s:18:"Benoît De'nis";s:10:"alignement";s:0:"";s:6:"police";s:5:"arial";s:6:"taille";s:2:"10";s:4:"gras";N;s:8:"italique";N;s:8:"souligne";N;}}
    si j'exécute le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $contenu = unserialize($serialize);
                  print_r($contenu);
    Je n'ai pas de $contenu.

    Merci d'avance à tous de votre aide.
    Benoit

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Ça sent les magic_quotes_gpc ... En effet, si cette fonctionnalité de PHP est active (cf phpinfo), PHP cherchera automatiquement à échapper un certain nombre de caractères (dont l'apostrophe) pour les variables GET (entre autres). Cet ajout d'échappements rendant alors impossible la désérialisation.

    Il faut donc désactiver magic_quotes_gpc (php.ini ou à niveau local - dépendant de votre configuration) ou alors d'abord appliquer stripslashes à cette chaîne.

    Cf FAQ (à moins de passer par http_build_query, par exemple, au lieu d'une sérialisation PHP).

  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
    Non mais ca passe bien en GET, l'echo de la variable que j'ai affiché ci-dessus est sur la même page (une ligne au dessus dans le code) que le unserialize

  4. #4
    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
    Après vérification magic_quote_gpc est bien à off...

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Il faudrait fournir :
    • le code complet des parties de sérialisation et de passage au script + désérialisation
    • un var_dump : de ce qui est sérialisé, de ce qu'on obtient de la sérialisation et avant désérialisation

  6. #6
    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
    Alors la sérialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    $contenu_panier = array();
    for($li=1;$li<=8;$li++){
      $contenu = $_POST["ligne$li"];
      $alignement =  $_POST["alignement_$li"];
      $police = $_POST["font$li"];
      $taille = $_POST["taille$li"];
      $gras = $_POST["gras$li"];
      $italique = $_POST["ita$li"];
      $souligne = $_POST["soul$li"];
      if($contenu != ''){
        $contenu_tampon .= "Ligne $li - $contenu ($alignement - $police - $taille pt - $gras$italique$souligne) <br />";
        $contenu_panier[$li]['contenu'] = htmlspecialchars($contenu, ENT_QUOTES, 'ISO-8859-1');
        $contenu_panier[$li]['alignement'] = $alignement;
        $contenu_panier[$li]['police'] = $police;
        $contenu_panier[$li]['taille'] = $taille;
        $contenu_panier[$li]['gras'] = $gras;
        $contenu_panier[$li]['italique'] = $italique;
        $contenu_panier[$li]['souligne'] = $souligne;
     
      }
    }
     
    $serialise = serialize($contenu_panier);
    Le passage de la la vairiable en GET
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <li>
              <a href='panier.php?action=ajout&l=<?php echo $moment; ?>&q=1&p=<?php echo $tarif; ?>&cont=<?php echo $serialise ?>&visuel=<?php echo $visuelzoom; ?>'>
                <img src = 'images/bloc-achetez.png' />
              </a>
            </li>
    La désérialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    if (!$erreur){
         switch($action){
            Case "ajout":
               ajouterArticle($l,$q,$p,$cont,$visuel);
               break;
     
            Case "suppression":
               supprimerArticle($l);
               break;
     
            Case "refresh" :
               for ($i = 0 ; $i < count($QteArticle) ; $i++)
               {
                  modifierQTeArticle($_SESSION['panier']['libelleProduit'][$i],round($QteArticle[$i]));
               }
               break;
     
            Default:
               break;
         }
      }
     
    <?php
          	if (creationPanier())	{
          		$nbArticles=count($_SESSION['panier']['libelleProduit']);
          		if ($nbArticles <= 0)
          		  echo "<tr><td colspan = '4' align = 'center'><br /><br />Votre panier est vide </td></tr>";
          		else{
          			for ($i=0 ;$i < $nbArticles ; $i++){
                  $serialize = $_SESSION['panier']['contenuProduit'][$i];
                  $contenu = unserialize($serialize);
                  //echo "<br /><br />serialize : ".$serialize;
                  //print_r($contenu);
                  $premiere_ligne = $contenu[1]['contenu'];
          				echo "<tr>";
          				echo "<td width = '75px' valign = 'center'>
                          <a title = 'Supprimer le tampon' href=\"".htmlspecialchars("panier.php?action=suppression&l=".rawurlencode($_SESSION['panier']['libelleProduit'][$i]))."\"><img src = 'images/suppr.png' /></a>
                          <a title = 'Visualisez le tampon' href ='".htmlspecialchars($_SESSION['panier']['visuelProduit'][$i])."' class = 'colorbox'><img src = 'images/oeil.png' /></a>
                        </ td>";
          				echo "<td width = '300px'valign = 'center'><strong>".htmlspecialchars($premiere_ligne)."</strong></ td>";
          				echo "<td width = '175px' align = 'center' valign = 'center'><input style = 'text-align:center' type=\"text\" size=\"4\" name=\"q[]\" value=\"".htmlspecialchars($_SESSION['panier']['qteProduit'][$i])."\"/></td>";
          				echo "<td width = '125px' align = 'right' valign = 'center'>".htmlspecialchars(number_format($_SESSION['panier']['prixProduit'][$i],2))." € HT</td>";
                  $sous_total = number_format(($_SESSION['panier']['qteProduit'][$i]*$_SESSION['panier']['prixProduit'][$i]),2);
                  echo "<td width = '125px' align = 'right' valign = 'center'>".$sous_total." € HT</td>";
                  echo "</tr>";
          			}
          		}
          	}
          ?>
    La fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function ajouterArticle($libelleProduit,$qteProduit,$prixProduit, $contenuProduit, $visuelProduit){
        //Si le panier existe
        if (creationPanier() && !isVerrouille()){
          //Si le produit existe déjà on ajoute seulement la quantité
          $positionProduit = array_search($libelleProduit,  $_SESSION['panier']['visuelProduit']);
     
          if ($positionProduit !== false){
             $_SESSION['panier']['qteProduit'][$positionProduit] += $qteProduit ;
          }
          else{
             //Sinon on ajoute le produit
             array_push( $_SESSION['panier']['libelleProduit'],$libelleProduit);
             array_push( $_SESSION['panier']['qteProduit'],$qteProduit);
             array_push( $_SESSION['panier']['prixProduit'],$prixProduit);
             array_push( $_SESSION['panier']['contenuProduit'],$contenuProduit);
             array_push( $_SESSION['panier']['visuelProduit'],$visuelProduit);
          }
        }
        else
          echo "Un problème est survenu veuillez contacter l'administrateur du site.";
      }

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/06/2004, 22h34
  2. Apres l'accent l'apostrophe
    Par man80 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 04/05/2004, 16h47
  3. Stocker un apostrophe
    Par Bowen dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/03/2004, 00h00
  4. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39
  5. Problème de serialization
    Par bruno270579 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 30/04/2003, 18h11

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