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

Bibliothèques et frameworks PHP Discussion :

Unserialize(urldecode()) php, ajax, php


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 181
    Par défaut Unserialize(urldecode()) php, ajax, php
    Bonjour, je vais essayer de vous expliquer mon problème le plus simplement possible.
    Je travail sous symfony2 mais cela n'est qu'un détail.
    Je possède un objet chel sur lequel j'ai utilisé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = urlencode(serialize($chel));
    Par la suite, sur un onclick, je passe ma variable $chaine à mon javascript.
    Dans ce javascript, j'utilise de l'AJAX pour appeler un fichier php pour réalisé un insertion dans ma bdd.
    Voici mon javascript :
    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
    function Insertbdd (x)
    {
        if(window.XMLHttpRequest)
            xhr = new XMLHttpRequest ();
        else if (window.ActiveXObject("Microsoft.XMLHTTP"))
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        else 
        {	
            alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
            return;
        }
        var filename = '../../../vendor/fonction_php/remplir_table_finale.php';
        var s1 = x;
        var data = null;
        data = "s1="+x;
        xhr.open("POST", filename,false);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.send(data);
        alert(xhr.responseText);
        if(xhr.responseText == "true")
        {
            alert('Votre event a été programmé');
            if(confirm('Voulez-vous continuer avec cette POI ?'))
            {
                var tab = new Array ();
                tab[0] = x;
                post('./planif', tab, "post");
            }
        }
        else alert('Erreur lors de la sauvegarde. Veuillez contactez l\'administrateur.');
    }
    Mon souci est le suivant : lors de mon appel à mon fichier php, je passe ma variable chaine à mon deuxième fichier php en POST.
    Je le récupère de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $chaine = $_POST['s1'];
        $lp = unserialize(urldecode($chaine));
    Lorsque j'exécute ce code, j'affiche une erreur
    Fatal error: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Orange\TestBundle\Entity\Arm" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition.
    Je ne comprends pas ce que je fais de travers. Si vous avez une idée je suis preneur

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    pour faire ce que tu veux (déserialisation d'objet), il faut obligatoirement que le moteur PHP ait connaissance de la définition de la classe avant de procéder.
    Clairement, il faut charger la classe avant de déserialiser une variable renvoyant vers cette classe.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 181
    Par défaut
    Merci de ton intérêt.
    Je pense que mon moteur PHP connait ma classe étant donné que je serialize mon objet. De plus, j'ai tenté de mettre un lien pour définir ma class dans mon dernier fichier PHP mais sans résultat.
    Je viens de m'apercevoir que ma variable s1 fait plus de 1300 caractères et je me demande si mon erreur ne viens pas de la.
    Par contre, dans une autre partie de mon logiciel, je réalise le même type de fonction, la variable que je dois désérialisé fait 1444 caractères et cela fonctionne complètement.
    La différence est que j'utilise de l'ajax dans cette partie. Je pense que le souci est du à l'AJAX puisque ma variable doit être trop grande pour l'AJAX.

    Je ne vois pas comment faire autrement.

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Tu récupères ta variable via $_POST, la longueur n'entre pas en ligne de compte à la différence du $_GET.

    Après, il faudrait vérifier la configuration de ton serveur web s'il n'y a pas une limite de définie.

    Compare aussi l'objet serialisé entre php et celui reçu via ajax s'il ne manquerait pas un bout par exemple

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 181
    Par défaut
    je viens de faire un echo de ma variable $chaine dans le fichier appellé en ajax et j'ai l'impression de bien récupéré la même chaine même si les caractères comme }{: ne sont plus codé en %3A par exemple mais son bien sous la forme }{:

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 181
    Par défaut
    J'ai modifié mon code pour vérifier si mon fichier appelé en ajax connaissait l'objet. Voilà à quoi ressemble mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    use Orange\testBundle\Entity;
        //return $_POST['s1'];
        //var_dump($_POST);
        $chaine = $_POST['s1'];
        $arm = unserialize(urldecode($chaine));
        //var_dump($poi);
        return $arm->getChk()->getReference();
    Lorsque je fais un alert(xhr.responseText), j'obtiens l'erreur suivante :
    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
    <br />
    <font size='1'><table class='xdebug-error xe-warning' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Warning: Class __PHP_Incomplete_Class has no unserializer in D:\wamp\www\TurtoiseSVN\testSymfony\vendor\fonction_php\remplir_table_finale.php on line <i>6</i></th></tr>
    <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
    <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
    <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0008</td><td bgcolor='#eeeeec' align='right'>256432</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='D:\wamp\www\TurtoiseSVN\testSymfony\vendor\fonction_php\remplir_table_finale.php' bgcolor='#eeeeec'>..\remplir_table_finale.php<b>:</b>0</td></tr>
    <tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0009</td><td bgcolor='#eeeeec' align='right'>258544</td><td bgcolor='#eeeeec'><a href='http://www.php.net/function.unserialize' target='_new'>unserialize</a>
    (  )</td><td title='D:\wamp\www\TurtoiseSVN\testSymfony\vendor\fonction_php\remplir_table_finale.php' bgcolor='#eeeeec'>..\remplir_table_finale.php<b>:</b>6</td></tr>
    </table></font>
    <br />
    <font size='1'><table class='xdebug-error xe-fatal-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Fatal error: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition &amp;quot;Orange\testBundle\Entity\Arm&amp;quot; of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition  in D:\wamp\www\TurtoiseSVN\testSymfony\vendor\fonction_php\remplir_table_finale.php on line <i>8</i></th></tr>
    <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
    <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
    <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0008</td><td bgcolor='#eeeeec' align='right'>256432</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='D:\wamp\www\TurtoiseSVN\testSymfony\vendor\fonction_php\remplir_table_finale.php' bgcolor='#eeeeec'>..\remplir_table_finale.php<b>:</b>0</td></tr>
    </table></font>

Discussions similaires

  1. [PHP-JS] PHP + AJAX : Actualisation
    Par poussinphp dans le forum Langage
    Réponses: 4
    Dernier message: 28/07/2006, 10h22
  2. [PHP-JS] Php & Ajax !
    Par TheNet dans le forum Langage
    Réponses: 5
    Dernier message: 04/07/2006, 19h23
  3. [MySQL] Projet de Chat PHP/Ajax
    Par linkowich dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/04/2006, 14h37
  4. Config IIS pour PHP / Ajax
    Par didjac dans le forum IIS
    Réponses: 1
    Dernier message: 02/04/2006, 10h03
  5. [Rico] Afficher depuis d'une liste deroulante (PHP+AJAX)
    Par maxis dans le forum Bibliothèques & Frameworks
    Réponses: 9
    Dernier message: 27/02/2006, 12h47

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