php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.08.2005, 20:37  
Gast
 
Beiträge: n/a
Standard problem mit session / object

hallo!

folgendes ist passiert:
ich hab einen "hauskonfigurator" geschrieben, in php5. (www.neueadresse.at)

das ganze hab ich mit einem "house" objekt gelöst, das in einer session variable steht.
das hat auch alles super geklappt.
leider läuft auf dem server wo ichs raufgeladen hab php4.3, also lad ich den "hauskonfigurator" in einem frame von einem anderen.
und jetzt klappt das nicht mehr (immer).

ich habs jetzt von 2 macs und 2 pcs aus probiert, da klappts gut, und von 4 anderen pcs aus klappts nicht, mit der meldung "Fatal error: Call to a member function xy on a non-object in ..."
(könnts ihr ausprobieren im use-case
"projekte" -> projekt aussuchen -> parzelle auswählen -> druckbare version

bzw.

"projekte" -> projekt aussuchen -> parzelle auswählen -> haus bearbeiten -> eg/og aussuchen -> fassade auswählen
)

wtf??

kann das was mit cookies zu tun haben? oder firewall? ich bin ziemlich ratlos, und der chef sitzt mir im nacken ...
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 03.08.2005, 21:01  
Erfahrener Benutzer
 
Registriert seit: 29.10.2004
Beiträge: 1.781
derHund
Standard

dann geh doch einfach der fehlermeldung nach?! sie sagt dir immerhin, um welchen zeile in welcher datei es sich handelt.
__________________
derHund ist offline   Mit Zitat antworten
Alt 03.08.2005, 21:40  
Gast
 
Beiträge: n/a
Standard

ja, schon, ich weiss eh ca. was passiert:

entweder
a) das objekt, auf dem die methode ausgeführt werden soll, ist nicht instanziert

oder

b) es wird nicht als solches erkannt

das ist nicht das problem. das problem ist, dass der fehler bei manchen usern auftritt und bei anderen nicht. (anscheinend unabhängig von betriebssystem und browser)
Dabei dachte ich, das alles sei etwas, das server-seitig passiert.

(ausserdem tu ich mir mim debuggen schwer, weil bei mir ja alles klappt) ...
  Mit Zitat antworten
Alt 03.08.2005, 21:49  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ein skript ist noch lange nicht korrekt, wenn es bei deiner klickreihenfolge keine fehlermeldung ausspuckt. wer weiß, was die anderen geklickt haben.

das skript ist trotzdem nicht korrekt. kleiner tipp zum debuggen:
1. teile das skript in handliche funktionen auf
2. teste jede funktion einzeln mit einer zusätzlichen funktion bzw. mit phpunit ( http://pear.php.net/phpunit ) oder phpunit2 . damit beweist du dir und allen anderen, dass zumindest die getestete funktion das tut, was sie soll.
3. wenn du dann den fehler immer noch nicht gefunden hast, geh zu deinen kollegen rüber und guck ihnen über die schulter - was haben sie wann wie geklickt, dass es zum fehlverhalten kam?
4. schreibe eine test-funktion, die genau das szenario initialisiert, das den fehler hervorruft.
5. korrigiere deinen code, so dass die funktion aus 4. jetzt korrekt läuft.
6. geh NIE WIEDER IN DEINEM VERDAMMTEN LEBEN davon aus, dass ein skript korrekt läuft, nur weil du beim durchklicken keinen fehler entdeckst.
7. ändere deine arbeitsweise. von deinen 'fehlermeldungen' kann ich wirklich schon riechen, wie der code aussieht. ändere dich, um nicht immer wieder auf die nase zu fallen.
8. schreibe in zukunft die tests vorher.

viel glück...
axo ist offline   Mit Zitat antworten
Alt 03.08.2005, 22:37  
Gast
 
Beiträge: n/a
Standard

???
das muss man sich dann anhören, hm?

ich hab den fehler mitlerweile gefunden. lag daran, dass ich die session als cookie gespeichert hab. ok, anfängerfehler, aber SICHER NICHT SO BLÖD, DASS MAN SICH BELEHRUNGEN ANSCHAUN MUSS ...

egal. danke jedenfalls für den tipp, phpunit hab ich nichtg gekannt.
  Mit Zitat antworten
Alt 04.08.2005, 00:09  
Gast
 
Beiträge: n/a
Standard

Zitat:
SICHER NICHT SO BLÖD, DASS MAN SICH BELEHRUNGEN ANSCHAUN MUSS ...
Wenn Du keine Tipps und Ratschläge lesen willst, dann frag halt nicht.

Zitat:
lag daran, dass ich die session als cookie gespeichert hab
Wie ist das gemeint?
  Mit Zitat antworten
Alt 04.08.2005, 01:53  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

auch wenn die sprache rauh ist, manche belehrungen lernt man nicht anders.
beherzige sie, um in zukunft deinen eigenen code gegen anfängerfehler resistent zu machen. auch wenn ich wohl einige jahre mehr programmierung hinter mir habe als du, bin ich gegen anfängerfehler nicht gefeit. ich schreibe inzwischen den code aber auf eine art und weise, die mir 1. hilft, meine eigenen anfängerfehler schneller zu finden, 2. einmal gefundene fehler nicht mehr einzubringen, und 3. findet der code mit der zeit die bugs von selbst.

was du dringendst lernen musst, ist nur noch dann 'von hand' zu testen, wenn es keinen anderen ausweg mehr gibt, denn sonst 'klappt' bei dir weiterhin 'alles', während andere wegen deines codes wahnsinnig werden.

grüße
axo

[edit]
übrigens liegt dein fehler nicht darin, dass du die session-id im cookie gespeichert hast oder nicht, sondern in deiner inkorrekten initialisierung des objekts. du verlässt dich darauf, dass das objekt, einmal initialisiert, persistent in der session bleibt. die session kann aber auf viele wege kaputt gehen. teste das ordentlich, sonst hast du morgen oder in zwei wochen wieder so einen bug.

noch ein kleiner tipp:

PHP-Code:
<?php
function &getObjectFromSession() {
    
$so =  'sessionObjectName';
    if(!isset(
$_SESSION[$so]) || !is_object($_SESSION[$so]) || !is_a($_SESSION[$so],'someClassName')) {
        
$obj = & new someClassName();
        
$_SESSION[$so] = &$obj
    }

     return 
$_SESSION[$so];
}
?>
... also nie direkt auf das session-objekt zugreifen, sondern eine methode verwenden, die das ding, falls es nicht existiert, ordentlich initialisiert und dann erst zurückgibt. im restlichen code immer auf diese methode zugreifen und niemals direkt auf das session-objekt.
und einen test schreiben, der garantiert, dass diese funktion garantiert das gemeinte objekt korrekt initialisiert zurückgibt.
[/edit]
axo ist offline   Mit Zitat antworten
Alt 04.08.2005, 02:33  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von mrburns
ja, schon, ich weiss eh ca. was passiert:
entweder
a) das objekt, auf dem die methode ausgeführt werden soll, ist nicht instanziert

oder
b) es wird nicht als solches erkannt
a. wenn Du weißt, was passiert, dann solltest Du den Fehler abfangen
b. ein Objekt ist ein Objekt

Zusätzlich zu axos Text noch das:

29.13. Wie speichere ich Objekte in Sessions?
http://www.php-faq.de/q/q-sessions-objekte.html

Mein Tip:
Objekte in einer Session zu speichern klingt zwar auf den ersten Blick verlocken, aber laß das. PHP Scripte sind "Wegwerfscripte" und keine standalone applikationen, die eventbasiert auf die nächste Userreaktion warten. Speichere die Daten, die Du auf den Folgeseiten benötigst, in der Session und erzeuge auf der Folgeseite einfach die Instanz neu. Ob Du nun die Daten mit __wakeup() oder mit einer eigenen Methode aus der Session polkst, ist egal.
Zitat:
..., weil bei mir ja alles klappt) ...
Den Fehler, das zu glauben, sollte man nur einmal machen.
  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] Session Problem karina_02 PHP Tipps 2008 6 18.05.2008 22:37
Problem bei session Lifetime Cyberbob_at_tot PHP Tipps 2007 5 05.06.2007 17:47
Problem mit Session Charly Shop Sui PHP Tipps 2006 13 25.08.2006 17:08
Und noch ein Session Problem... Weyoun PHP Tipps 2006 9 27.02.2006 22:17
Session Problem dimitri PHP Tipps 2007 8 29.12.2005 15:53
Session Problem R4v3r PHP Tipps 2007 3 30.11.2005 23:25
Session wieder aufnehmen; Problem mit GET Jacks Rache PHP-Fortgeschrittene 9 12.08.2005 14:32
[Erledigt] Problem mit Session PHP Tipps 2005-2 1 06.08.2005 19:07
SESSION Problem mit Opera 7 [Gelöst] akratellio PHP Tipps 2005-2 4 14.07.2005 10:51
seltsames php und session problem netti PHP-Fortgeschrittene 16 01.06.2005 17:01
session problem PHP Tipps 2005 10 23.05.2005 12:41
[Erledigt] Hilfe...PhpBB Session Problem!! PHP Tipps 2004-2 2 15.12.2004 18:28
Session Problem beim Login PHP Tipps 2004-2 6 15.12.2004 09:37
[Erledigt] PHP Session Problem, dringend! PHP-Fortgeschrittene 17 21.10.2004 21:15
Session wird falsch wieder aufgenommen - Problem mit Session PHP Tipps 2004 2 16.10.2004 14:30

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php zugriff auf session objekte, session objekte php, session non object, php session objekt problem

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:07 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.