32 messaggi dal 22 dicembre 2013
Ciao a tutti,
ancora una volta mi trovo a chiedere il vostro aiuto.
Sto realizzando un sito-web ovviamente usando il framework asp.net, l'applicazione in alcune sezioni permetterà di visualizzare degli articoli che verranno pubblicati ovviamente attraverso un area amministrativa. Gli articoli risiederanno in un database mysql, e qui nasce il problema, chi ha commissionato il sito mi ha fornito un dump di un db mysql di un vecchio sito che aveva, in modo da poter prelevare degli articoli salvati.
Fino a qui diciamo che andrebbe tutto bene, ma il problema è che attraverso workbanch ho in locale ripristinato il db vecchio per vedere come era strutturata la gestione di questi articoli. In alcuni campi della tabella che dovrebbe contenere i suddetti però invece di esserci del semplice testo, c'è scritto qualcosa che non ho mai visto, del tipo: "a:3:{s:11:"description";s:0:"";s:3:"alt";s:0:"";s:5:"title";s:0:"";}". L'unica cosa in più che posso dirvi è che il vecchio sito che ormai non c'è più per interfacciarsi con il db mysql usava il CMS Drupal.
La cosa è che in questa tabella vedo la data di pubblicazione articolo, il titolo ma non c'è il contenuto di quest'ultimo, ma poiché in alcuni campi ci sono queste scritte "strane" non so se siano proprio queste a nascondere ciò che cerco.

Spero di essere stato più o meno chiaro, anche perché essendo la prima volta che mi imbatto in una cosa del genere non è facile spiegare al meglio la questione.

Attendo con ansia una vostra risposta.

Cordiali Saluti,
Lorenzo Monforte
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Lorenzo,
quella stringa è ottenuta da PHP serializzando un array associativo con il metodo serialize(). La documentazione ti dà delle informazioni per interpretarla.

Con a:3 si intende che la stringa rappresenta un array di 3 elementi.
Dentro le graffe ci sono stringhe (indicate da s) di un certo numero di caratteri (s:11 indica stringa di 11 caratteri).
Le stringhe con indice pari sono le chiavi dell'array associativo, mentre quelle con indice dispari sono i rispettivi valori.

Quando "reidrati" la stringa, otterrai un array associativo così fatto.
array("description" => "", "alt" => "", "title" => "");


I CMS, che sono sistemi di gestione di contenuti generici, a volte usano questa notazione per infilare più proprietà, magari custom, in un solo campo del record.
Penso che se vuoi convertire i dati ad un formato a te consono, dovrai scriverti una procedura apposita. Magari un'applicazione console che passa in rassegna tutti i record e li reinserisce in un altro database (o ti produce un CSV o delle istruzioni SQL).

Puoi avvalerti di questa libreria per deserializzare facilmente quelle stringhe in C#.
http://sourceforge.net/projects/csphpserial/

ciao,
Moreno
Modificato da BrightSoul il 02 febbraio 2016 23.12 -

Enjoy learning and just keep making
32 messaggi dal 22 dicembre 2013
Ciao,
intanto grazie per avermi risposto, però c'è ancora qualcosa che non mi è chiaro.
Rispetto a quello che mi hai postato ho scaricato la libreria da te suggerita; sto usando la classe serializer.cs di cui uso il metodo deserializer a cui passo la stringa che avevo definito "strana". Questo metodo dovrebbe restituirmi se le chiavi sono da 0 a N un arraylist, altrimenti un hashtable. Nel mio caso mi restituisce sempre un hashtable, e provando a leggerne i valori questi sono tutti diciamo settati o a stringhe vuote, oppure mi restituisce le scritte delle graffe come: "title, description, alt".

Essendo purtroppo questo per me un campo finora inesplorato, c'è qualcosa che sto sbagliando, o è giusto che mi restituisca questo; quando restituisce i titoletti presenti all'interno delle graffe e basta vuol dire che non c'è nessun altro testo effettivamente salvato??

Grazie come sempre per le eventuali risposte.

Cordiali Saluti,
Lorenzo
Modificato da Lomsoft il 03 febbraio 2016 13.27 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Lorenzo,


Nel mio caso mi restituisce sempre un hashtable

Corretto, perché la stringa originale descrive un array associativo (cioè dizionario o hashtable che dir si voglia).


questi sono tutti diciamo settati o a stringhe vuote

E' normale, perché nella stringa originale le tre chiavi description, alt e title sono assegnate a valori vuoti.

Provando con questa stringa, invece, vedrai che i valori salteranno fuori.
var stringa = "a:3:{s:11:\"description\";s:7:\"valore1\";s:3:\"alt\";s:7:\"valore2\";s:5:\"title\";s:7:\"valore3\";}";
var risultato = serializer.Deserialize(stringa) as Hashtable;
var valore = risultato["description"]
//la variabile valore conterrà la stringa "valore1"


Del perché tu abbia trovato dei valori vuoti, non so dirtelo. Può darsi che chi aveva a suo tempo inserito i contenuti in Drupal avesse lasciato quelle caselle vuote.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.