anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Mo 09 Jun, 2025 10:20

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi 17 Feb, 2010 19:18 
Offline
Newbie

Registriert: Do 07 Jun, 2007 15:31
Beiträge: 5
Hallo zusammen,

ich bin beim Programmieren über ein Problem gestolpert, das ich irgendwie nicht gelöst bekomme. Und zwar möchte ich längere Texte (also gewöhnliche Strings) als serialisiertes Array in meiner Datenbank speichern und abrufen - was auch soweit klappt. Wenn allerdings in einem dieser Strings ' oder " vorkommen, gibt mir unserialize() false zurück anstatt des Arrays. Ich hab bereits versucht, beides zu escapen (zuerst mit addslashes(), dann mit mysql_real_escape_string()) - und als das nicht funktionierte, habe ich sogar zur Funktion htmlspecialchars() gegriffen, um so sämtliche Störfaktoren aus den Strings zu bekommen. Geholfen hat's leider nicht, bekomme weiterhin false zurück. Habt ihr eine Idee, wie ich dieses Problem lösen kann? Hab schon einige andere Threads in diesem Forum zu ähnlichen Themen durchstöbert, aber leider keine Lösung gefunden.

Cheers,
Silva

(Meinen Server findet ihr hier. Unten stehenden Code findet ihr in der bio.php, gespeichert werden die Strings in der prefs_new.php. Mein Server hat die Dragonslayer Edition V2.5 als Basis.)

Uhm.. an Code gibt es ja nicht viel, eigentlich nur diesen hier:

PHP:
$result2 = db_query("SELECT xcharbios FROM account_extra_info WHERE acctid=".$row['acctid']);
$row2 = db_fetch_assoc($result2);
$xcbios2 = unserialize($row2['xcharbios']);

Und in der Datenbank steht das hier:
a:2:{s:9:"xcharbio1";s:11:"muh "";s:9:"xcharbio2";s:2:"hu";}

Sagt mir einfach, was ihr noch braucht, ich poste es dann umgehend.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi 17 Feb, 2010 20:24 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Eigentlich sollte serialize mit Single-Quotes und Double-Quotes zurecht kommen.
Könntest du ev. mal zeigen, wie ein solches Text-Array aussieht, und wie du es serialisierst, speicherst?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi 17 Feb, 2010 20:33 
Offline
Newbie

Registriert: Do 07 Jun, 2007 15:31
Beiträge: 5
Voilà:

PHP:
// 1. X-Charbio
if(isset($_POST['xcharbio1']) && $rowex['biotime'] != BIO_LOCKED)
{
$long = preg_replace('/\r\n|\r|\n/', '', $_POST['xcharbio1']); // Zeilenumbrüche raus
$max_l = getsetting('xcharbiomaxlength',4096);
$long = substr($long,0,$max_l);
$xcbios['xcharbio1'] = stripslashes($long);
$array_aei_changes['xcharbios']['xcharbio1'] = htmlspecialchars($long);
$array_aei_changes['biotime'] = date("Y-m-d H:i:s");
}
[...]
if( sizeof($array_aei_changes) > 0 )
{
if (isset($array_aei_changes['xcharbios']['xcharbio1']))
{
$array_aei_changes['xcharbios'] = serialize($array_aei_changes['xcharbios']);
}
user_set_aei($array_aei_changes);
}

Funktion user_set_aei():
PHP:
function user_set_aei ($changes,$acctid=0,$where="") {

global $session;

if(!sizeof($changes)) {return(false);}

$acctid = ($acctid == 0 ? $session['user']['acctid'] : $acctid);

$sql = "UPDATE account_extra_info SET acctid=acctid";

foreach($changes as $field => $val) {

$sql .= ",".$field." = '".$val."'";

}

$sql .= " WHERE ".($acctid > 0 ? " acctid=".$acctid : "").($where != "" ? $where : "")." LIMIT 1";

$res = db_query($sql);

return( db_affected_rows() );

}


edit: Das kommt davon, wenn man zu früh abschickt... -.-
Was genau meinst du mit "wie ein solches Text-Array aussieht"? Ein Beispiel habe ich ja oben schon gepostet. Das Datenbank-Feld selbst ist ein Textfeld.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr 19 Feb, 2010 21:23 
Offline
Newbie

Registriert: Do 07 Jun, 2007 15:31
Beiträge: 5
Des Rätsels Lösung:

PHP:
function mb_unserialize($serial_str)
{
$serial_str= preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $serial_str );
//$serial_str= str_replace("\r", "", $serial_str);
//$serial_str= str_replace("\n", "", $serial_str);
return unserialize($serial_str);
}

Hier gefunden.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum