php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-07-2008, 19:02
Benutzerbild von ApoY2k ApoY2k
 Registrierter Benutzer
Links : Onlinestatus : ApoY2k ist offline
Registriert seit: Nov 2006
Beiträge: 359
ApoY2k befindet sich auf einem aufstrebenden Ast
ApoY2k eine Nachricht über ICQ schicken ApoY2k eine Nachricht über Skype™ schicken
Standard [PHP5] Objekt Gültigkeit innerhalb eines Projekts

Hallöchen Skripter und Skripterinnen.

Ich bin (mal wieder ) ein bisschen verzweifelt. Mein Projekt läuft gut, aber es hat sich mal wieder eine seltsame Verhaltensweise meines Skripts ergeben.

Ich erhalte folgenden Fehler:

PHP-Code:
Fatal errorCall to a member function assign() on a non-object in /login.php on line 13 
In dieser Zeile wird eine Funktion der SMARTY-Klasse aufgerufen:

PHP-Code:
$tpl->assign('page_title''Login'); 
Tatsächlich wird $tpl vor diesem Aufruf nicht generiert, da dies bereits in der index.php erledigt wird, in welche die login.php per require_once() eingebunden wird.

Dort funktioniert die Klasse ohne Probleme.

Die Frage ist jetzt wie ich es schaffe, dass das $tpl Objekt im gesamten Skript mit allen eingebundenen Dateien gültig ist.
Ich habe es schon mit global versucht, was aber zu keinem Ergebnis geführt hat.


Ich hoffe, mein Problem ist verständlich und ihr könnt mir helfen
Mit Zitat antworten
  #2 (permalink)  
Alt 25-07-2008, 19:08
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Die Frage ist jetzt wie ich es schaffe, dass das $tpl Objekt im gesamten Skript mit allen eingebundenen Dateien gültig ist.
Wenn $tpl nicht gerade in einer Funktion o.ä. definiert wird, dann ist es in allen eingebundenen Dateien Verfügbar. Aber natürlich erst nachdem es definiert wurde:

PHP-Code:
include 'vorher.php';
$tpl = new Smarty;
include 
'nachher.php'
Hier ist es logischerweise erst in $nachher verfügbar, daher erscheint ein Fehler beim Ausführen von vorher.php

Anderes Beispiel, was auf deine Situation passen könnte:

PHP-Code:
require_once 'inc.php';
$tpl = new Smarty;
require_once 
'inc.php'
Hier wird der Fehler von inc.php verursacht. Möglicherweise hast du nicht berücksichtigt, dass inc.php bereits vor der Definition von $tpl ausgeführt wird, daher die Fehlermeldung.

Aber ich kann nur spekulieren. Hier musst du selbst mit konequentem Debugging ran...
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #3 (permalink)  
Alt 25-07-2008, 19:14
Benutzerbild von ApoY2k ApoY2k
 Registrierter Benutzer
Links : Onlinestatus : ApoY2k ist offline
Registriert seit: Nov 2006
Beiträge: 359
ApoY2k befindet sich auf einem aufstrebenden Ast
ApoY2k eine Nachricht über ICQ schicken ApoY2k eine Nachricht über Skype™ schicken
Standard

Ich bin dabei...

Mittlerweile scheint es mir so, dass er die login.php nicht tatsächlich einbindet, da sämtliche andere Seiten, die eingebunden werden, über alle bereits definierten Objekte verfügen können.

Deine Fehlerquellen habe ich berücksichtigt. Die Objekte werden in Zeile 23 - 27 definiert und der require_once() Befehl wird erst in Zeile 126 angewendet.

Und auch vorher wird kein anderer include(), require() oder require_once() Befehl ausgeführt.

Seltsamerweise also funktionieren sämtlichen anderen eingebundenen Seiten mit allen Objekten, nur diese eine eben nicht.

Und für mein Auge sind darin keine wesentlichen Unterschiede zu den anderen Dateien zu sehen.

Die erste Anweisung bei dieser und allen anderen Seiten ist oben genannter SMARTY-Befehl um eine Variable in die Templates zu speichern. Danach kommen sozusagen 08/15-Anweisungen einer Login-Oberfläche mit Passwortprüfung, Fehlerausgabe und Weiterleitung...
Mit Zitat antworten
  #4 (permalink)  
Alt 25-07-2008, 19:16
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Tja, dann musst du gucken, wo der unterschied liegt. Von "außen" kann man dir jedenfalls so nicht helfen.
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #5 (permalink)  
Alt 25-07-2008, 21:11
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von ApoY2k
Deine Fehlerquellen habe ich berücksichtigt. Die Objekte werden in Zeile 23 - 27 definiert und der require_once() Befehl wird erst in Zeile 126 angewendet.

Und auch vorher wird kein anderer include(), require() oder require_once() Befehl ausgeführt.
Wie kannst du ein Objekt definieren, bevor du Smarty überhaupt mit require oder include eingebunden hast? Oder arbeitest du mit Autoloading?
Mit Zitat antworten
  #6 (permalink)  
Alt 25-07-2008, 23:34
Benutzerbild von ApoY2k ApoY2k
 Registrierter Benutzer
Links : Onlinestatus : ApoY2k ist offline
Registriert seit: Nov 2006
Beiträge: 359
ApoY2k befindet sich auf einem aufstrebenden Ast
ApoY2k eine Nachricht über ICQ schicken ApoY2k eine Nachricht über Skype™ schicken
Standard

Smarty wird indirekt über eine eigene Klasse, die ich geschrieben habe (Templates) eingebunden (per extends-Befehl) und vor dem definieren dieser Klasse natürlich auch mit require_once() eingebunden.

Die Klasse Templates wird wiederum über eine __autoload()-Funktion geladen.

Das kann aber nicht das Problem sein da es bei anderen Seiten, die genauso aufgebaut sind, funktioniert... nur bei "login.php" nicht...

Geändert von ApoY2k (25-07-2008 um 23:38 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 25-07-2008, 23:36
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Hast de Fehler immer noch nicht gefunden?

Du brauchst doch nur Zeile für Zeile ne Testausgabe zu machen. (in der langsamsten Variante)
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #8 (permalink)  
Alt 25-07-2008, 23:45
Benutzerbild von ApoY2k ApoY2k
 Registrierter Benutzer
Links : Onlinestatus : ApoY2k ist offline
Registriert seit: Nov 2006
Beiträge: 359
ApoY2k befindet sich auf einem aufstrebenden Ast
ApoY2k eine Nachricht über ICQ schicken ApoY2k eine Nachricht über Skype™ schicken
Standard

Nein ich versteh einfach die Welt nicht mehr.

Eigentlich ist das Skript total simpel...

1. Konfigurationsdatei einbinden (Beinhaltet: Definition von Konstanten, Globalen Variablen und die __autoload()-Funktion für Klassen
2. Einige Objekte erstellen (per __autoload werden die Dateien eingebunden)
3. Einzubindende Datei suchen (Startseite, News, etc... Login ebenso)
4. Datei einbinden (require_once())

In dieser Datei werden dann alle weiteren Operationen, je nach Seite, erledigt...

Das funktioniert auch bei allen Seiten wunderbar - News werden angezeigt, die Startseite wird geladen, statische Seiten ebenso - auch Memberlisten, Fehlerseiten... alles... nur nicht Login...

Irgendwie ist das schon fast gruselig.


Ich habe jetzt zum Spaß die Login komplett geleert. Theoretisch sollte nun also die index.php "leer" erscheinen, also ohne Seiteninhalt (das Gerüst außenrum erscheint ja dennoch, da dies im index Template steht).

Ergebnis: Eine weiße Seite ohne alles.

Anscheinend überspringt das Skript bei der Login-Seite den Befehl des Einbindens (require_once) - was aber einfach nicht sein kann, da es mit jeder anderen Seite funktioniert.

Kann das irgendwas mit .htaccess zu tun haben? Wobei mir das auch spanisch vorkommen würde...


Zu den Testausgaben: Ich habe mir mal in den require_once-Befehl der index-Datei reingeschrieben, dass er mir die anzuzeigende Seite ausgeben soll.

Ergebnis was wie gewollt:

http://www.domain.de/seite1 -> 'seite1'
http://www.domain.de/start -> 'start'

Aber, und jetzt kommt das schärfste:

http://www.domain.de/login -> <gähnende leere>
(soll heißen: weiße seite wie about:blank ^^)

Geändert von ApoY2k (25-07-2008 um 23:47 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 25-07-2008, 23:53
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Was gibt var_dump($tpl)?

Zitat:
Ergebnis: Eine weiße Seite ohne alles.
Haste nen Link dahin?
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #10 (permalink)  
Alt 26-07-2008, 00:18
Benutzerbild von ApoY2k ApoY2k
 Registrierter Benutzer
Links : Onlinestatus : ApoY2k ist offline
Registriert seit: Nov 2006
Beiträge: 359
ApoY2k befindet sich auf einem aufstrebenden Ast
ApoY2k eine Nachricht über ICQ schicken ApoY2k eine Nachricht über Skype™ schicken
Standard

Oh mein Gott... das hab ich ja noch nie gesehen.

Okay Leute, Panikmache ist vorbei - wobei, vll gehts auch grade erst los.

Ich habe grade mal vor lauter Verzweiflung zum testen einen abschließenden Slash nach login gemacht...

Siehe da: Die Seite wird angezeigt.


Also, ich bin ja mittlerweile echt kein Vollpfosten mehr was PHP und Servergeschichten angeht, aber: Was zum Teufel?!.

Seit wann kann ein fehlender Abschlussslash (wasn Wort o,O) das komplette Skript durcheinanderwürfeln? Das ist ja... Horror!

Wenn irgendein DAU jez auf die Idee kommt mal die URL selbst einzugeben ohne Slash is die Seite gleich down für ihn? Das ist ja... omg...


Erklär mir das bitte einer. Ist zwar schön, dass ich jetzt weiß, woran es liegt... aber warum es daran liegt, würde ich jetzt natürlich auch noch gerne wissen!
Mit Zitat antworten
  #11 (permalink)  
Alt 26-07-2008, 00:21
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Tja, scheint als hättest du deine rewrite rules nicht unter kontrolle.

Zitat:
Erklär mir das bitte einer. Ist zwar schön, dass ich jetzt weiß, woran es liegt... aber warum es daran liegt, würde ich jetzt natürlich auch noch gerne wissen!
Könntest du auch alles durch gezieltes Debuggen (u.a. Testausgaben) selbst herausfinden, aber irgendwie muss ich das trotzdem in jedem Thread erwähnen. In diesem hier sogar mehrfach. my2ct.
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!

Geändert von TobiaZ (26-07-2008 um 00:37 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 26-07-2008, 09:51
Benutzerbild von ApoY2k ApoY2k
 Registrierter Benutzer
Links : Onlinestatus : ApoY2k ist offline
Registriert seit: Nov 2006
Beiträge: 359
ApoY2k befindet sich auf einem aufstrebenden Ast
ApoY2k eine Nachricht über ICQ schicken ApoY2k eine Nachricht über Skype™ schicken
Standard

Ja schön... aber wie soll ich denn mit Testausgaben drauf kommen, dass es an einem abschließenden / liegt?
Wenn ich irgendwo eine Ausgabe hinmach, wird sie ja entweder garnicht erst geschrieben oder sie stimmt, wenn ich eine andere seite aufrufe...

Also meine RewriteRule sieht folgendermaßen aus...

Code:
!\.[a-z]+$ index.php
Ich erkenne da für mein (zugegeben für RegExp ungeübtes) Auge eigtl. kein PRoblem, das mit einem abschließenden Slash zu tun haben könnte...

Geändert von ApoY2k (26-07-2008 um 10:03 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 26-07-2008, 13:35
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Wenn ich irgendwo eine Ausgabe hinmach, wird sie ja entweder garnicht erst geschrieben oder sie stimmt, wenn ich eine andere seite aufrufe...
Naja, normalerweise ist es üblich, dass die Rewirte-rule auch bestimmte Parameter übergibt. Wenn diese dann nicht erscheinen, kann man davon ausgehen, dass schon VOR der PHP-Verarbeitung etwas nicht stimmen kann.

Zitat:
Ich erkenne da für mein (zugegeben für RegExp ungeübtes) Auge eigtl. kein PRoblem, das mit einem abschließenden Slash zu tun haben könnte...
Ach was? Du willst mir sagen, dass du nichtmal erkennst, dass du das abschließende / nicht annähernd berücksichtigt hast?
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #14 (permalink)  
Alt 26-07-2008, 14:10
Benutzerbild von ApoY2k ApoY2k
 Registrierter Benutzer
Links : Onlinestatus : ApoY2k ist offline
Registriert seit: Nov 2006
Beiträge: 359
ApoY2k befindet sich auf einem aufstrebenden Ast
ApoY2k eine Nachricht über ICQ schicken ApoY2k eine Nachricht über Skype™ schicken
Standard

Mir kam einfach nie in den Sinn, dass ein fehlendes / auch nur annähernd irgendwelche Probleme verursachen könnte. Das is mir völlig neu...

Aber naja, man lernt dazu wo man kann^^
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:23 Uhr.