Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: serialize e oggetti

  1. #1

    serialize e oggetti

    Ragazzi ne sto uscendo pazzo, qualcuno può darmi una mano?

    allora vi dico cosa devo fare.

    Recupero da db una serie di oggetti Categoria (campi: id e nome).

    Queste categorie vanno messe in un menù a tendina (<OPTION>)

    dopodichè rispetto alla scelta effettuata su un'altra pagina devo recuperare l'oggetto corrispondente alla selezione del menù e lavorarlo...

    capisco che devo utilizzare il serialize per passare gli oggetti, dato che (almeno per ora) non ho sessioni.

    vi posto un piccolo pezzo di codice per capirci:
    codice:
    <select name=id>
    <?php
    
    $categorie=tutteCategorie();
    
    if($categorie!=false){
    	for($k=0;$k<count($categorie);$k++){
    		printf("<option value=\"%s\">%s</option>",serialize(urlencode($categorie[$k])), $categorie[$k]->getNome());
    	}
    }
    ?>

    e sull'altra pagina ho:

    codice:
    $id = unserialize(urldecode($_POST['id']));
    sia se vado in post che in get nn va, ho provato lo stripslashes, l'htmlentities e cose varie, ma nn essendo molto ferrato in questo tipo di funzioni per il passaggio di dati ho un pò di problemi.

    Diciamo che almento per ora preferirei un passaggio in GET dell'oggetto...

    il massimo che sono riuscito a raggiungere è l'eliminazione della "fatidica" scritta "error function unserialize byte 0 of 5"... ma una volta tolta quella scritta (esattamente col codice postato) la variabile è vuota...

    diciamo che nn riesco a passare nulla...

    qualche esperto sa darmi una mano?

    ciao

    e grazie

    Enrico

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    echo $_POST['id'] basta e avanza...


    Non ho capito perchè dovresti serializzare gli oggetti....

    ciao

  3. #3
    scusa:

    io faccio passare l'oggetto in post, questo oggetto ha 2 variabili di istanza settate: un id ed un nome.

    Passandolo semplicemente in Post come mi suggerisci te, quando mi ritrovo a richiamare sulla seconda pagina un metodo dell'oggetto:


    codice:
    $id=$_POST['id'];
    
    echo $id->getNome();
    ho la scritta:

    Fatal error: Call to a member function getNome() on a non-object in ...

    per questo credevo che tramite la serializzazione riuscissi a mantenere la struttura dell'oggetto...

    thx...

    qualche altro consiglio??

    grazie

    Enrico

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    ero stato fuorviato dal nome della variabile...

    Forse il problema potrebbe essere la direttiva :

    codice:
    magic_quotes_gpc = On
    Prova a fare uno stripslashes() della stringa serializzata, e poi a unserializzarla.

    L'urlencode/decode invece non ti serve di sicuro...

    ciao

  5. #5
    nn funziona....

    il codice modificato è diventato:

    codice:
    for($k=0;$k<count($categorie);$k++){
    	printf("<option value=\"%s\">%s</option>",stripslashes(serialize($categorie[$k])), $categorie[$k]->getNome());
    	}

    e dall'altro lato

    codice:
    $id = unserialize($_POST['id']);
    
    echo $id->getNome();
    ora mi da l'errore di prima (che con ecnode e decode ero riuscito a togliere:

    Notice: unserialize() [function.unserialize]: Error at offset 0 of 4 bytes in D:\ApacheRoot\insCat.php on line 9
    id
    Fatal error: Call to a member function getNome() on a non-object in D:\ApacheRoot\insCat.php on line 13


    come farò???

    ciao

    Enrico

  6. #6
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    io intendevo :

    codice:
    if($categorie!=false){
    	for($k=0;$k<count($categorie);$k++){
    		printf("<option value=\"%s\">%s</option>",serialize($categorie[$k]), $categorie[$k]->getNome());
    	}
    }
    e dove ricevi il post

    [code]

    $id = unserialize(stripslashes($_POST['id']));

    prova...

    certo che è una soluzione un po' bizzarra, non puoi passare solo l'id e nella pagina che riceve il post rifare una query su db che tramite l'id riempia l'oggetto?

    ciao

  7. #7
    Allora regà vi dico una cosa

    ho messo il GET come passaggio dei dati per vedere cosa viene passato alla pagina successiva e vi posto il codice ultimo che ho immesso:

    codice:
    printf("<option value=\"%s\">%s</option>",stripslashes(htmlentities(serialize($categorie[$k]))), $categorie[$k]->getNome());
    Seleziono un dato con:

    id: 3
    nome: Persona


    all'altra pagina arriva un id del tipo:

    id=O%3A9%3A%22Categoria%22%3A2%3A%7Bs%3A13%3A%22

    e facendo il comando:

    $id = stripslashes(htmlspecialchars(unserialize($_GET['id'])));

    mi da errore all 21 of 25 byte...

    x gianaz: era proprio questo che volevo evitare....

    se faccio una select su db alla pagina precedente per ricevere i dati...

    e posso utilizzare oggetti...


    perchè sprecare tempo riconnettendosi a db su server quando i dati ce li ho già in mano?

    nn so se sbaglio, ma mi sembra la scelta ottimale (per prestazioni e funzionalità)...


    no?

    grazie ancora

    e spero che riusciamo a risolvere il problema...


    p.s. il codice da te postato mi da sempre l'errore al byte 0... e penso che htmlentities possa essermi d'aiuto (dato che ci sono virgolette che lui trasforma direttamente in caratteri html)

    grazie mille per qualsiasi aiuto

    ciao

    Enrico

  8. #8
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Il problema è che in get avviene l'url encode, in post no, quindi non ottieni lo stesso risultato...

    ciao

    p.s.

    comunque io preferisco riconnettermi al db.

  9. #9
    Regà ho risolto!!!!!!!!

    per ora l'ho provatop solo in GET fra poco provo il post

    vi dico come (se servisse a qualcun'altro)


    da una parte

    codice:
    printf("<option value=\"%s\">%s</option>",base64_encode(serialize($categorie[$k])), $categorie[$k]->getNome());
    e dall'altra:

    codice:
    $id =$_GET['id'];
    
    $id=unserialize(base64_decode($id));

    ciaoooooooo

    Enrico

  10. #10
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    soluzione ancora peggiore...

    lo sai vero che GET ha dei limiti?

    Se mandi un oggetto di dimensioni sostanziose potrebbe essere troncato...

    rimango dell'idea che è meglio fare una query in più...

    ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.