Assoziatives Array überschreibt sich mit Nullwerten

  • PHP

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Link.

    Assoziatives Array überschreibt sich mit Nullwerten

    Huhu zusammen!

    Ich hatte vor, eine globales assoziatives Array im Script zu setzen:

    PHP-Quellcode

    1. $Benutzer = array();
    2. /*
    3. * Bei einem erfolgreichen Login, werden die Informationen aus der DB ins Array geschrieben. Das geht auch soweit
    4. */


    Damit ich halt von anderen Scripts aus auf die jeweiligen Keys zugreifen kann:

    PHP-Quellcode

    1. echo $Benutzer['display_name'];


    Wenn ich die Seite allerdings nochmal aufrufe, wird (schätze ich mal) das Array überschrieben.
    Daher habe ich versucht zu prüfen ob Benutzer bereits gesetzt ist, also mit isset(), damit eben diese Überschreibung/Neuinstanzierung nicht passiert.

    Leider will das nicht so ganz gehen.
    Vielleicht ist es auch ein falscher Ansatz, bin ja noch nicht so lange im PHP unterwegs und musste bisher nur kleineres damit bewerkstelligen.
    Alternativ könnte ich hier natürlich auch eine Klasse benutzen, aber da sehe ich momentan noch keine Vorteile, ggf. falls ich noch benutzerbezogene Funktionen brauche oder so.

    Sonst würde mir nur noch einfallen, mit json_encode() in eine Session-Variable zu schreiben und diese dann auf n Leer-String zu überprüfen..
    Ich kam nur auf diese Idee, weil man diese Funktionalität auch in Wordpress Seiten sieht.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Rootbob91“ ()

    Hi,

    Nun ja, WordPress sollte man hinsichtlich des Codes nicht gerade als Parade-Beispiel heranziehen ;)

    Der Fehler hat mit dem Neuladen der Seite eigl nix zu tun. Ich kann mir nur vorstellen dass dein SQL-Code falsch ist, weil ja offenbar das $Benutzer->array nicht mit Werten befüllt wird. Prüfe mal ob dein Query erfolgreich ausgeführt wird oder ob du ne Fehlermeldung kriegst.

    Link :thumbup:
    Hello World
    Vielleicht verstehe ich die Frage auch falsch, aber es ist doch völlig normal, dass beim Neuladen eines PHP-Skripts die Variablen nicht mehr ihren alten Wert haben. Das ist doch wie ein frischer Programmstart.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hi,

    @Marcus Gräfe ja so wollte ich zuerst auch argumentieren, bis ich im Code die Stelle gefunden hab:
    Bei einem erfolgreichen Login, werden die Informationen aus der DB ins Array geschrieben. Das geht auch soweit

    Das heißt nach der Initiierung der Variable $Benutzer in der 1. Zeile wird dies auch sofort mit Werten aus einer Datenbank befüllt. Und ich schätz' mal dass aufgrund von 'nem Fehler im SQL-Code nix zurückgegeben wird - oder die Verbindung vielleicht schon garned zustande kommt. @TE erleuchte uns ^^

    Link :thumbup:
    Hello World
    Hat sich nun eh erledigt. Es sollte einfach ein globales Array werden, was von anderer Stelle befüllt wird. Wie eine VB Property die von nem Modalen Dialog die Werte übernimmt. Aber mir wurde da bereits in nem PHP Forum weitergeholfen und davon abgeraten globale Variablen zu benutzen.
    Hab es jetzt komplett anders & ist erledigt.

    Danke trotzdem!
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Ja globale Variablen sind ungeil und stiften nur Verwirrung. Vielleicht erfahren wir noch wie du es nun gelöst hast? Ich nehme an wenn dir die im anderen Forum von globalen Variablen abgeraten haben, dann haben sie dir geraten, für derlei Aktionen Klassen zu verwenden, oder? Wäre zumindest die eleganteste Lösung.

    Link :thumbup:
    Hello World
    Ich zitiere "man hat in PHP keine persistenten Daten, man nimmt die praktisch nur von Anfrage zu Anfrage/Seite zu Seite mit.". Klassen hatte ich selber schon vorgeschlagen, aber auch direkt abgelehnt, denn ich brauche die Funktionalität einer Klasse für diese Geschichte nicht (keine Funktionen etc.), nichts was ein assoz. Array nicht auch könnte.

    Als Lösung nehm ich jetzt einfach n Array was inner Session gespeichert wird.
    Hab vorher dazu schommal was gelesen und nur so Sachen mit json_encode/decode gefunden, aber dann rausgefunden, dass man Arrays auch direkt inner Session speichern kann und das Encoding/Decoding nicht nötig ist.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Auch ok. Und nich vergessen: vor session_start() keine Ausgaben und Zugriff auf Daten der $_SESSION-Variable erst nach session_start().
    Vielleicht magst du dir in dem Zusammenhang mal das Thema Serialisierung ansehen, könnte interessant sein wenn du die Persistenz von Daten in einem Array an Orten gewährleisten willst, die das Speichern dieses Typs nicht unterstützen - ohne später mühsam mit explode o.ä. alles wieder rausklamüsern zu müssen (Beispiel filesystem oder datenbank etc..).

    Mit meinem Vorschlag mit den Klassen wollte ich auch nicht das Persistenz-Problem lösen sondern der Zugriff auf die Variable an sich sowie das Anwenden von Klassenmethoden auf benutzerspezifische Ereignisse (Erstellen, Bearbeiten, Löschen) sollte sich so angenehmer gestalten lassen - je nach Einsatzzweck (und $Benutzer klingt für mich als hättest du irgendwo 'ne Benutzerverwaltung) wär das wie gesagt ein eleganter Weg.


    Link :thumbup:
    Hello World