php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.01.2005, 01:10  
Gast
 
Beiträge: n/a
Standard Problem mit Serialize (mal wieder)

Hi Leute,
mal wieder stört mich etws mit der unreifen serialize-Funtkion von php.
Also folgendes:
Ich habe ein Image-Objekt komplett serialisiert in eine Datenbank geschrieben. Nach einer Suchanfrage holt sich das Script dann dieses Objekt und soll es wieder desrialisieren. Aber das tut es genau nicht.
Anbei der Code:
Code:
while($zeile = mysql_fetch_array($erg)){
	if($zeile['foto1'] != NULL){
	        echo $zeile['foto1']."
"; 
		$ich = unserialize($zeile['foto1']);
		echo $ich;
		exit;
Das erste echo gibt korrekt das serialisierte Objekt aus.
Das zweite echo gibt mir nichts aus. Normalsweise müsste php mir mitteilen, dass es sich um ein Objekt handelt.
Die Klasse des Objekts habe ich natürlich inkludiert.

Hoffe ihr könnt mir weiterhelfen. Danke
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.01.2005, 01:36  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 1.531
Quadaptor befindet sich auf einem aufstrebenden Ast
Standard

Da stimmt was mit deinen geschweiften Klammern nicht. Zwei werden geöffnet - aber wo geschlossen?!
Änder das mal und dann schauen wir weiter.
Quadaptor ist offline   Mit Zitat antworten
Alt 06.01.2005, 10:54  
Erfahrener Benutzer
 
Registriert seit: 17.08.2004
Beiträge: 213
carrib befindet sich auf einem aufstrebenden Ast
Standard

Wenn die Option display_errors deaktiviert wurde (Off), oder error_reporting() für das Unterdrücken der Fehlermeldungen verwendet wurde, erhälst Du keine Fehlermeldung - die in diesem Fall eigentlich angezeigt werden sollte. Bei Deinem Snippet ist ein Parser-Fehler garantiert.

Wenn die Klassendefinition definitiv vor diesem Snippet verfügbar ist, wird es funktionieren.
Code:
while($zeile = mysql_fetch_array($erg))
{ 
     if($zeile['foto1'] != NULL)
     { 
           echo $zeile['foto1']."
"; 
           $ich = unserialize($zeile['foto1']); 
           echo $ich; 
           exit; 
     }
}
carrib ist offline   Mit Zitat antworten
Alt 07.01.2005, 02:56  
Gast
 
Beiträge: n/a
Standard

@carrib:
Ich habe die Klassendefinition definitiv inkludiert und er unterdrückt auch keine Parser-Meldungen.
Ich bin ebenso überrascht, dass es nicht funktioniert wie wahrscheinlich du! Ist es evtl. Möglich, dass in MySQL gespeicherte serialisierte Objekte nicht wieder deserialisiert werden können?
Zumal ich folgenden Code-Schnipsel perfekt serialisieren bzw. deserialisieren konnte und zwar BEVOR ich den serialisierten String in die DB geschrieben habe:
PHP-Code:
echo $fileVars['foto1']."
"
;
$e serialize($fileVars['foto1']);
echo 
$e."
"
;
$f unserialize($e);
echo 
$f."
"

Momentan scheint es so auszusehen, dass serialisierte Objekte nicht in DB gespeichert werden können, oder?
  Mit Zitat antworten
Alt 07.01.2005, 04:46  
Gast
 
Beiträge: n/a
Standard

Zitat:
Momentan scheint es so auszusehen, dass serialisierte Objekte nicht in DB gespeichert werden können, oder?
Was erwartest Du von einem 'serialisierten Objekt'?

Arrays kannst Du rekursiv so serialisieren:
http://test.php-help.info/serialize-1/ (Quelltext wird angezeigt)
aber Objekte? Wie willst Du eine Objektinstanz mitsamt aller Attribute und Methoden in einen String verwandeln, den Du (warum auch immer) in eine Datenbank stopfen könntest?
  Mit Zitat antworten
Alt 07.01.2005, 08:42  
Erfahrener Benutzer
 
Registriert seit: 17.08.2004
Beiträge: 213
carrib befindet sich auf einem aufstrebenden Ast
Standard

@florianwendland:
Achte bitte auf die, bei Dir fehlenden schließenden geschweiften Klammern für die while-Schleife und den if-Block, wie bereits von Quadaptor erwähnt. Das aufgeführte Snippet ist definitiv unvollständig.

Serialisierte Variablen und Objekte können in einer DB gespeichert werden, da Du durch die Serialisierung einen String erhälst, der die Variable bzw. das Objekt repräsentiert und von unserialize() verwendet werden kann um die ursprüngliche Variable bzw. das Objekt wiederherzustellen. Somit speicherst Du nur eine Zeichenfolge, nichts anderes.

Objekt -> serialize() -> String -> unserialize() -> Objekt

Gehen wir davon aus, dein Snippet wurde wie oben beschrieben korrigiert, kann es daran liegen, dass Du an Slashes scheiterst. Verwendest Du bsp. mysql_escape_string(), werden den Eigenschaften des Objekts vor Serialisierung Werte von $_POST-Variablen zugewiesen? Poste mal bitte die Ausgabe von folgendem Snippet:
Code:
while($zeile = mysql_fetch_array($erg)) 
{ 
     if($zeile['foto1'] != NULL) 
     { 
           echo $zeile['foto1']."
"; 
           exit; 
     } 
}
Vorweg kannst Du mal die Verwendung von stripslashes() vor dem Aufruf von unserialize() ausprobieren:
Code:
$ich = stripslashes($zeile['foto1']);
$ich = unserialize($ich);
@meikel:
Objekte können serialisiert werden, allerdings werden hierbei nur die Eigenschaften serialisiert, die Methoden werden nicht berücksichtigt. Daher ist es bei einem unserialize() erforderlich, dass die Klassendefinition bereits verfügbar ist, ansonsten kann das Objekt nicht erstellt werden. Siehe hierzu auch:
serialize
Serializing objects - objects in sessions
carrib ist offline   Mit Zitat antworten
Alt 07.01.2005, 09:46  
Gast
 
Beiträge: n/a
Standard

Objekte:
Zitat:
Siehe hierzu auch:
Bekannt, bringt aber kaum Punkte...
  Mit Zitat antworten
Alt 07.01.2005, 10:04  
Erfahrener Benutzer
 
Registriert seit: 17.08.2004
Beiträge: 213
carrib befindet sich auf einem aufstrebenden Ast
Standard

Punkte? Steh' ich auf dem Schlauch oder ist es Dir sauer aufgestossen?

Auf deine Frage
Zitat:
... aber Objekte? Wie willst Du eine Objektinstanz mitsamt aller Attribute und Methoden in einen String verwandeln ...
hin habe ich folgende Aussage getroffen:
Zitat:
Objekte können serialisiert werden, allerdings werden hierbei nur die Eigenschaften serialisiert, die Methoden werden nicht berücksichtigt. Daher ist es bei einem unserialize() erforderlich, dass die Klassendefinition bereits verfügbar ist, ansonsten kann das Objekt nicht erstellt werden.
Die darauf folgenden Links sind Referenzen die belegen, dass mir diese Informationen nicht im Traum zugefolgen sind.

Des weiteren wird ein Beitrag nicht nur von den beteiligten Usern gelesen, sondern unter Umständen auch von anderen, die sich mit dem Thema noch nie beschäftigt haben und gerne wissen möchten, woher die Informationen stammen. Demnach sollte es nicht verkehrt sein, auf Quellen zu verweisen.
carrib ist offline   Mit Zitat antworten
Alt 07.01.2005, 10:13  
Gast
 
Beiträge: n/a
Standard

Zitat:
Punkte? Steh' ich auf dem Schlauch oder ist es Dir sauer aufgestossen?
Nein. Wenn von einem serialisierten Objekt gerademal ein paar Eigenschaften gespeichert werden, bringt es wirklich "keine Punkte" (svw. lohnt sich nicht).
Zitat:
Die darauf folgenden Links sind Referenzen die belegen, dass mir diese Informationen nicht im Traum zugefolgen sind.
Das hatte ich nicht bezweifelt.
  Mit Zitat antworten
Alt 07.01.2005, 10:27  
Erfahrener Benutzer
 
Registriert seit: 17.08.2004
Beiträge: 213
carrib befindet sich auf einem aufstrebenden Ast
Standard

Hast recht. Wenn es um nur die Eigenschaften geht und die Klasse an sich vielleicht keine Methoden aufweist kann man unserialze() die Mühe mit dem Erzeugen des Objekts sparen und lieber ein Array verwenden und ein/zwei Methoden durch Funktionen ersetzen.
carrib ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
Sessions Problem StephenKing PHP Tipps 2008 3 16.10.2007 08:30
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Problem mit Weiterleitung PHP Tipps 2004-2 16 22.12.2004 17:49
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
[Erledigt] PHP Upload (Master Value/Local Value Problem) PHP-Fortgeschrittene 5 23.11.2004 07:21
[Erledigt] Serialize problem. PHP-Fortgeschrittene 9 26.10.2004 21:37
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
[Erledigt] Problem mit Timestamp! PHP Tipps 2004 24 08.06.2004 19:51
Login Problem PHP Tipps 2004 4 04.06.2004 18:46
foreach problem mAy^daY PHP Tipps 2004 3 02.06.2004 20:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
serialize klasse mit objekt als attribut php, php serialize problem string, serialisiert mysql unvollständig, unserialize zeile, php nach übergabe slash in serialize, php serialize setzt klammern nicht, serialisierter string nach post unvollständig php, mysql serialize geschweifte klammern, objekte serialize, serialize php object problem, php objekte serialize, php unserialize objekt eigenschaften gehen verloren, php blöcke serialisieren, serialize rekursiv, php serialize klammern, serialize eigenschaften, serialisierung objekte quellcode

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:09 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.