Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    194

    Trasferimento e gestione array con method post (serialize/unserialize)

    Ciao a tutti, ho già proposto questa problematica alla fine di un altro topic ma ero andato offtopic perchè avevo iniziato la mia discussione sul combine degli array e ho paura che non venisse più notata.

    Vado al sodo, se c'è bisogno di ulteriori spiegazioni chiedete pure.
    Ho bisogno di trasportare un array, creato con delle variabili inserite dall'utente tramite un form, con il method post.
    Dopo varie ricerche ho scoperto la funzione serialize e unserialize, ma ho un errore al quale non riesco a venirne a capo. Prima di tutto vi chiedo se ci sia un altro metodo per mettere in una singola variabile il mio array e quindi spedirlo.

    Questo è il print del mio array ricevuto dalla pagina php:
    Codice PHP:
    Array (    [0] => a:1:{i:1;a:5:{s:6:"titolo";s:7:"Titolo1";s:11:"sottotitolo";s:12:"Sottotitolo1";s:8:"prodotto";s:14:"Primo prodotto";s:11:"descrizione";s:12:"Descrizione1";s:4:"link";s:5:"link1";}}    [1] => a:1:{i:2;a:5:{s:6:"titolo";s:7:"Titolo2";s:11:"sottotitolo";s:12:"Sottotitolo2";s:8:"prodotto";s:16:"Secondo prodotto";s:11:"descrizione";s:12:"Descrizione2";s:4:"link";s:5:"link2";}}    [2] => a:1:{i:3;a:5:{s:6:"titolo";s:7:"Titolo3";s:11:"sottotitolo";s:12:"Sottotitolo3";s:8:"prodotto";s:14:"Terzo prodotto";s:11:"descrizione";s:12:"Descrizione3";s:4:"link";s:5:"link3";}}    [3] => a:1:{i:4;a:5:{s:6:"titolo";s:7:"Titolo4";s:11:"sottotitolo";s:12:"Sottotitolo4";s:8:"prodotto";s:15:"Quarto prodotto";s:11:"descrizione";s:12:"Descrizione4";s:4:"link";s:5:"link4";}}    [4] => a:1:{i:5;a:5:{s:6:"titolo";s:7:"Titolo5";s:11:"sottotitolo";s:12:"Sottotitolo5";s:8:"prodotto";s:15:"Quinto prodotto";s:11:"descrizione";s:12:"Descrizione5";s:4:"link";s:5:"link5";}}    [5] => a:1:{i:6;a:5:{s:6:"titolo";s:7:"Titolo6";s:11:"sottotitolo";s:12:"Sottotitolo6";s:8:"prodotto";s:14:"Sesto prodotto";s:11:"descrizione";s:12:"Descrizione6";s:4:"link";s:5:"link6";}} ) 
    Questo è il codice che applico:

    Dal form
    Codice PHP:
                $sql="SELECT * FROM `home`";
                $dati=mysql_query($sql);
                while($row=mysql_fetch_assoc($dati))
                {
                    $home = array( $row['id'] => array( 
                    'titolo' => $row["titolo"],
                    'sottotitolo' => $row["sottotitolo"],
                    'prodotto' => $row["prodotto"],
                    'descrizione' => $row["descrizione"],
                    'link' => $row["link"]
                     ));
                     $home = serialize($home);
                  ........
                  ........
                    <textarea name="home[]"><?php echo $home?></textarea>
                  .......
                  }
    Dalla pagina ricevente
    Codice PHP:
    $home unserialize($_POST['home']); 

    Non riesco ad applicare unserialize, ho questo errore: Warning: unserialize() expects parameter 1 to be string....

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    194
    Ho provato anche a passarlo in base64 come ho trovato suggerito altrove:

    <textarea name="home[]"><?php print base64_encode(serialize($home)) ?></textarea>
    ......
    $home = unserialize(base64_decode($home));

    Ora l'errore è: Warning: base64_decode() expects parameter 1 to be string,....


  3. #3
    Mai sentito parlare dell'<input> type hidden?
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    194
    Quote Originariamente inviata da satifal Visualizza il messaggio
    Mai sentito parlare dell'<input> type hidden?
    E che centra scusa?
    Ho trascritto la mia variabile in un campo textarea per comodità e ho lasciato visibile il tag per controllare il risultato.

  5. #5
    Quote Originariamente inviata da Ciakko Visualizza il messaggio
    E che centra scusa?
    Ho trascritto la mia variabile in un campo textarea per comodità e ho lasciato visibile il tag per controllare il risultato.
    Ahhh..se l'hai fatto per comodità allora...
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    194
    Risolto. Essendo l'array di un array richiedeva di indicare un indice per unserialized:
    $home = unserialize(base64_decode($home[0]));
    Ho fatto un ciclo e ho tirato fuori il mio array.

  7. #7
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Potresti non saperlo, ma
    Warning Do not pass untrusted user input to unserialize(). Unserialization can result in code being loaded and executed due to object instantiation and autoloading, and a malicious user may be able to exploit this. Use a safe, standard data interchange format such as JSON (via json_decode() and json_encode()) if you need to pass serialized data to the user.
    http://php.net/manual/en/function.unserialize.php

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    194
    Hai fatto benissimo a ricordarmelo. Avevo letto, non è il mio caso, ma mi era sfuggita l'alternativa in json che terrò presente.
    Grazie

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.