Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » frage zu global    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
kleiner Schelm
Mitglied
Anfänger


Dabei seit: 29.10.2016
Herkunft: auf dem Bauernhof aufgewachsen
Posts: 74
     frage zu global Zitat | Bearbeiten

hallo,

ich habe ein File variable. in diesem File erstelle ich ein array.
 PHP 
1:
2:
3:
4:
5:
$gv = array();
$gv = array(
"p01" => "0",
"p15" => "0"
);

in der Startseite rufe ich dieses File auf
 PHP 
1:
include("variable.php");

dann setze ich innerhalb dieser Seite eine Zelle in dem array
 PHP 
1:
$gv["p01"] = "Test variable belegt !";

danach gehe ich von der Startseite auf Seite 02.
in seite 02 setze ich das global array.
 PHP 
1:
global $gv;

wenn ich dann die Zelle des Arrays aufrufe, kommt ein Fehler, dass die variable net bekannt ist.
 PHP 
1:
echo "globale variable Test01: ".$gv["p01"]."<br />";


meine Frage:
gilt das global nur innerhalb eines Files bzw. Webseite ?
oder wie bekomme ich das hin, dass ich mir ein array mit globalen variablen definieren und benutzen kann.
ich weis, das soll man net machen, man soll immer alles einzeln übergeben etc.
Gibts ne Lösung für mein vorhaben oder net ?
ich werde das später, wenn ich genug ahnung habe bestimmt umstellen. Im augenblick stellt das für mich ne praktikable Möglichkeit dar. Wenns denn zu realisieren ist.




17.02.2017, 16:32 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2334
      Zitat | Bearbeiten

Also erst einmal sollte man global nie verwenden. Es gibt eigentlich keinen guten Grund dafür. Es macht den Code nur unberechenbarer, entsprechend fehleranfälliger und schlechter wartbar. Da sollte man sich lieber ein wenig mehr mit dem Aufbau einer guten Anwendung beschäftigen, weil dann braucht man globale Variablen nicht.

In deinem Fall (wenn ich es richtig verstanden habe) funktioniert es nicht, weil Variablen usw. immer nur für einen Request gelten. Also alle Zuweisungen und ähnliches gelten nur für diesen einen Request. Bei jedem neuen Request ist es komplett so, als wäre der Besucher der Seite das erste Mal auf der Webseite. Es fängt immer wieder mit einer "frischen" Version deiner Skripte an.

Aus diesem Grund gibt es Sessions. Dort wird ein Cookie mit einer eindeutigen ID gesetzt und die Daten, die für diesen Besucher auch über mehrere Requests hinweg erhalten bleiben sollen, werden mit der ID verknüpft in einer Datei oder in einer Datenbank gespeichert.
Für dein Vorhaben solltest du dir entsprechend also mal Sessions anschauen oder eben, wenn die Daten für alle Besucher dauerhaft gelten sollen, die Daten in eine Datei oder eine Datenbank schreiben und immer bei jedem Request auslesen.


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
17.02.2017, 18:42 Profil | PM | E-Mail  
kleiner Schelm
Mitglied
Anfänger


Dabei seit: 29.10.2016
Herkunft: auf dem Bauernhof aufgewachsen
Posts: 74
      Zitat | Bearbeiten

hallo dingsdabums,

ich möchte mich für dein unermüdliche Hilfe bedanken. Das hilft mir wirklich sehr.
Dass ich net mit globalen variablen arbeiten sollte hat mir Dr. Google auch schon gesagt. Ich mach jetzt auch mehr die Übergabe von Paramteren. Ich bin ja net ganz resistent gegen die Tips.
Mit request meinst du genau was ?
Wenn ich auf eine neue Seite springe, ist das dann wie ein request ?
Sind die globalen Variablen also auf eine Seite beschränkt ?
Wenn ich auf dieser Seite ein include setze, dann sind die wieder drin, die auf der include Seite stehen, oder ? Aber eben leer, dort werden die nur "gemacht", aber net gefüllt.
Ich programmier halt so los, wenn ich erst alle Grundlagen über trockene Tutorials lernen wollte, dann ist das ne endlose geschichte.
Vielen dank für das Verständnis und die Hilfe hier.





Post wurde schon 1x editiert, das letzte mal am 17.02.2017 um 19:48 von kleiner Schelm
17.02.2017, 19:47 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2334
      Zitat | Bearbeiten

Zitat:
Orginal von kleiner Schelm
[...]
Ich programmier halt so los, wenn ich erst alle Grundlagen über trockene Tutorials lernen wollte, dann ist das ne endlose geschichte.
Vielen dank für das Verständnis und die Hilfe hier.



Habe ich auch so gemacht. Ich wollte etwas umsetzen und habe immer das dazugelernt, was ich gerade benötigt habe. Dabei sollte man halt darauf achten, wie gut die Quellen sind und was für eine Qualität gewisse Lösungsansätze haben. Aber ansonsten ist es meiner Meinung nach der beste Weg eine Programmiersprache zu lernen und dabei die Motivation zu behalten, wenn man einfach anfängt und immer das lernt, was man braucht. Man muss ja nicht direkt immer alles online stellen, weil das dann schnell wiederum kritisch sein kann, wenn man sich mit dem Thema Sicherheit noch nicht gut auskennt.
Genauso ist es normal, dass man mit der Zeit einiges normal neu programmiert, weil man neues gelernt hat und sich dann denkt "Oh Gott... Was für einen Mist habe ich da denn so umständlich und schlecht programmiert... ". Aber ist ja auch nicht schlimm, sondern wertvolle Erfahrungen, aus den man am besten lernt.

Zu deiner Frage:
Ein Request ist immer ein Aufruf der Seite. Also jedes Laden der Seite mit deinem Browser. Also jeder Klick auf einen Link oder eben abschicken eines Formulars.
Jeder dieser Requests ist KOMPLETT so, als würdest du die Seite das erste Mal aufrufen, wenn du keine Dateien oder keine Datenbank nutzt.
PHP fängt entsprechend wieder komplett bei der 1. PHP-Codezeile mit dem Ausführen deines Codes an und entsprechend gibt es an diesem Punkt nur die Standardvariablen wie z.B. $_GET oder $_POST usw., aber alle anderen Variablen sind in der ersten Zeile nicht einmal erstellt worden und entsprechend komplett "leer".
Das verwenden von "include" kannst du dir so vorstellen, dass du einfach an dieser Stelle den Code einfügst, der sich in der Datei befindet, die du mit include lädst. Also wie ein einfacher Textbaustein, um es vereinfacht zu sagen.
Der Vorteil von include ist halt einfach, dass man Code, den man an vielen Stellen braucht, zentral verwalten kann und Änderungen dann nur in der ausgelagerten Datei treffen muss und nicht überall da, wo der Code gebraucht wird.

Ich hoffe, ich konnte es einigermaßen verständlich erklären. Aber was ein Request ist und was das bedeutet, solltest du unbedingt wissen und dich damit auseinandersetzen. Das sind die absoluten Grundlagen der Webentwicklung und wirklich essentiell. Diese Grundprinzipien muss man verinnerlicht haben, damit man dann auch entsprechend weiß, wie man Daten zwischen z.B. dem Aufruf der Startseite und dem Klicken auf einen Link auf die neue Seite weitergeben kann und ähnliches.


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
17.02.2017, 20:17 Profil | PM | E-Mail  
kleiner Schelm
Mitglied
Anfänger


Dabei seit: 29.10.2016
Herkunft: auf dem Bauernhof aufgewachsen
Posts: 74
      Zitat | Bearbeiten

hallo dingsdabums,

danke für die Erklärung. Das ist sehr wichtig, dass ich das Grundverständnis habe, wie Webseiten funktionieren. Ich denke, ich weis jetzt wieder bischen mehr.
Ich baue auch keine Webseite, auf die andere Personen zugreifen oder die benutzen. Das ist rein für mich. Mit den Seiten handle ich eine Datenbank, ich ergänze eigentlich nur vorhandene Datensätze.
Als ich vor 10 Jahren mit Access vba angefangen habe, war das genauso. Später habe ich viel Code wieder geändert und das verbessert. Das mit dem, "oh Gott, was hab ich da für Mist programmiert", kenne ich nur zu gut. Gibt ja zum Glück suchen/ersetzen und so Sachen. Für mich gehört das zum lernen dazu, alten Code zu verbessern.

Ich mache mir jetzt csv Files. So kann ich die Datenpakete, mit denen ich aktuell arbeite, sehr gut handeln. Über ne Function sind die Daten schnell in ein array übergeben und so habe ich die aktuellen Daten immer present. Jetzt brauche ich keine globalen variablen mehr. Wieder ein grosser Schritt nach vorne.



18.02.2017, 07:33 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2334
      Zitat | Bearbeiten

Zitat:
Orginal von kleiner Schelm
[...]

Ich mache mir jetzt csv Files. So kann ich die Datenpakete, mit denen ich aktuell arbeite, sehr gut handeln. Über ne Function sind die Daten schnell in ein array übergeben und so habe ich die aktuellen Daten immer present. Jetzt brauche ich keine globalen variablen mehr. Wieder ein grosser Schritt nach vorne.



Falls du die Daten ausschließlich in Verbindung mit PHP nutzen möchtest und es nicht unbedingt CSV sein muss, würde ich mir unbedingt mal JSON anschauen.

Da brauchst du eigentlich nur 4 Funktionen:
file_get_contents um den Inhalt einer Datei komplett einzulesen
json_decode um einen String im JSON-Format wieder in ein Array oder ein Objekt zu konvertieren
json_encode um ein Array ins JSON-Format zu konvertieren und dieses als String zu erhalten
file_put_contents um Daten in eine Datei zu schreiben.

Das Format ist in Verbindung mit den json_* Funktionen meiner Meinung nach deutlich besser zu handhaben und weniger fehleranfällig :)


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
18.02.2017, 13:17 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » frage zu global   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz