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 :

unserialize d'un tableau stocké en base [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    designer, développeur & webmaster
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : designer, développeur & webmaster

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut unserialize d'un tableau stocké en base
    Bonjour à tous,

    Voila mon problème : j'enregistre un tableau à 2 dimensions dans le champ d'une table. Pour cela, j'utilise la fonction serialize lors de l'écriture qui transforme mon tableau (avec stripslashes (ma magic-quotes-gpc est on) lors de l'enregistrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (ini_get("magic_quotes_gpc") == 1) {
    // Dans le cas où magic_quotes est activé sur le serveur
    $html = stripslashes($html);}
     
    $contenu['fr']=$html;
    $contenu=serialize($contenu);
    et unserialize lors de la lecture qui restitue mon tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $contenu=$row_rs_contenu['contenu'];
    $contenu=unserialize($contenu);
    $contenu=$contenu['fr'];
    Cela fonctionne, mais si mon tableau contient des caractères à échapper, cela échoue lors de la récupération. ça ne me génère pas d'erreur mais ça ne récupère rien. J'ai essayé de supprimer le stripslashes mais sans surprise ça crée une erreur lors de l'enregistrement.

    Quelq'un a une idée pour résoudre ce problème ?
    Merci pour votre aide.

  2. #2
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    J'ai peut-être mal saisie le problème mais ne serait-ce pas addslashes ?

  3. #3
    Membre averti
    Homme Profil pro
    designer, développeur & webmaster
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : designer, développeur & webmaster

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    j'ai essayé

    addslashes échappe les caractères lors de l'enregistrement, mais la récupération avec unserialize ne ramène rien...

    J'y perds un peu mon latin…

  4. #4
    Membre averti
    Homme Profil pro
    designer, développeur & webmaster
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : designer, développeur & webmaster

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    Pour être plus précis, voila le tableau sérialisé que je vais lire dans ma table :

    a:1:{s:2:"fr";s:530:"

    S\'ed ut tum ad senem senex de senectute, sic hoc libro ad amicum amicissimus scripsi de amicitia. Tum est Cato locutus, quo erat nemo fere senior temporibus illis, nemo prudentior; nunc Laelius et sapiens (sic enim est habitus) et amicitiae gloria excellens de amicitia loquetur. Tu velim a me animum parumper avertas, Laelium loqui ipsum putes. C. Fannius et Q. Mucius ad socerum veniunt post mortem Africani; ab his sermo oritur, respondet Laelius, cuius tota disputatio est de amicitia, quam legens te ipse cognosces.
    ";}

    Le premier caractère a été échappé lors de l'écriture.
    Eh bien, un unserialize la-dessus ne retourne rien. Et pas plus si je fais un stripslashes avant unserialize.

    Peut-être qu'il y a d'autres méthodes pour enregistrer un tableau dans un champ?

  5. #5
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    qu'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo "<pre>";
    print_r(unserialize($laSerialisation));
    echo "</pre>";

  6. #6
    Membre averti
    Homme Profil pro
    designer, développeur & webmaster
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : designer, développeur & webmaster

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    <pre></pre> !!!! ça n'affiche rien !!!

  7. #7
    Membre averti
    Homme Profil pro
    designer, développeur & webmaster
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : designer, développeur & webmaster

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    Bon, prenons les choses dans l'ordre. ce n'est peut-être pas à cause de la fonction unserialize, mais peut-être de mon code.

    si j'ai crée un tableau à partir d'un contenu html géré par fck et en fonction de plusieurs langues:

    $contenu['fr']=$html;

    que je le sérialise :
    $contenu=serialize($contenu);

    que je l'enregistre :
    "UPDATE pages SET contenu='$contenu'……

    j'obtiens ça dans mon champ contenu :
    a:1:{s:2:"fr";s:530:" S\'ed ut tum ad senem senex de senectute, sic hoc libro ad amicum amicissimus scripsi de amicitia. Tum est Cato locutus, quo erat nemo fere senior temporibus illis, nemo prudentior; nunc Laelius et sapiens (sic enim est habitus) et amicitiae gloria excellens de amicitia loquetur. Tu velim a me animum parumper avertas, Laelium loqui ipsum putes. C. Fannius et Q. Mucius ad socerum veniunt post mortem Africani; ab his sermo oritur, respondet Laelius, cuius tota disputatio est de amicitia, quam legens te ipse cognosces. ";}

    je le récupère :
    "SELECT contenu FROM pages………
    $contenu=$rq_contenu['contenu'];

    je le 'désérialize':
    $contenu=unserialize($contenu);

    et j'en extrais la version française:
    $contenu=$contenu['fr'];

    qu'est-ce qui peut clocher ?

  8. #8
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Pas grand chose ...
    Montre ton code d'insertion et de d"extraction de ton contenu (utilise les balises [CODE])

  9. #9
    Membre averti
    Homme Profil pro
    designer, développeur & webmaster
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : designer, développeur & webmaster

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    Ok, voila l'enregistrement du contenu :
    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
    $html = $_POST['FCKeditor1'];
    // Dans le cas où magic_quotes est désactivé sur le serveur
    if (ini_get("magic_quotes_gpc") == 0)
    {
    $html = addslashes($html);
    }
    $html = mysql_real_escape_string($html);
     
     
    //================ mise à jour du contenu
     
    $contenu['fr']=$html;
    $contenu=serialize($contenu);
    $updatesql=sprintf("UPDATE pages SET contenu=%s, date_modif='$date_modif' WHERE ID='$ID'",
                           GetSQLValueString($contenu, "text"));
    mysql_select_db($database_cnx, $cnx);
    $req=mysql_query($updatesql,$cnx) or die (mysql_error());
    et la lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $query_rs_contenu = "SELECT contenu FROM pages WHERE ID ='$ID'";
    $rs_contenu = mysql_query($query_rs_contenu, $cnx) or die(mysql_error());
    $row_rs_contenu = mysql_fetch_assoc($rs_contenu);
    $totalRows_rs_contenu = mysql_num_rows($rs_contenu);
    $contenu=$row_rs_contenu['contenu'];
    $contenu=unserialize($contenu);
    $contenu=$contenu['fr'];
    Mais je ne pense pas que ça vienne du code (même s'il y a plus clean), parce que ça fonctionne parfaitement bien sur des chaines sans " ' " ou autres...

  10. #10
    Membre averti
    Homme Profil pro
    designer, développeur & webmaster
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : designer, développeur & webmaster

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    j'avance dans mon investigation...
    fck me génère du code html, avec des balises fermées contenant des "/" qui ne sont pas strippées :

    <p>c'est <strong>difficile</strong> !!!!</p>

    du coup, ça empêche la récup par un unserialize.

  11. #11
    Membre averti
    Homme Profil pro
    designer, développeur & webmaster
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : designer, développeur & webmaster

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    j'ai contourné le problème :

    à l'écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $html=htmlentities($html, ENT_QUOTES);
    $contenu[$langue]=$html;
    $contenu=serialize($contenu);
    à la lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $contenu=unserialize($contenu);
    $contenu=html_entity_decode($contenu[$langue]);
    ça fonctionne correctement.

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

Discussions similaires

  1. [9i]recupération de tableau dans la base
    Par hoaxpunk dans le forum Oracle
    Réponses: 7
    Dernier message: 06/02/2006, 18h16
  2. interprété du code stocké en base de donnée
    Par namosis dans le forum MFC
    Réponses: 7
    Dernier message: 14/11/2005, 22h06
  3. [PHPLIB] Source du template stocké en base de données
    Par Stef784ever dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 08/10/2005, 19h58
  4. Réponses: 7
    Dernier message: 08/06/2005, 11h04
  5. [Forms] Afficher une image stockée en base
    Par oramine dans le forum Forms
    Réponses: 12
    Dernier message: 01/02/2005, 14h14

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