PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : globale Variablen bei PHP


RattuS
2007-09-10, 12:16:35
Seid gegrüßt,

da ich dynamischen Inhalt in meine Website einbinden möchte, habe ich angefangen, mich mit PHP zu beschäftigen, denn ich möchte ein Bewertungssystem auf meiner Website integrieren.

Der Algorithmus (Mittelwertsberechnung), den ich mir dafür überlegt habe, greift auf eine globale Variable zu, der die Bewertungen als Zahlenwert addiert bekommt und dann durch eine weitere globale Variable (die pro Bewertung um 1 erhöht wird) geteilt wird. Das Ergebnis wird ganzzahlig abgerundet, damit es im Integerbereich bleibt. Die Anzeige des abgerundeten Ergebnisses soll durch eine Bildgrafik (JPEG) auf der HTML Seite dargestellt werden. Die Prüfung, welche Bildgrafik er nimmt, würde ich entweder mit einer IF-Kette oder mit CASE umsetzen.

Das eigentliche Problem an der Sache ist nun, dass ich nicht weiß...

wo man die globalen Variablen (die sich ihren Wert immer merken muss) deklarieren muss, damit sie auch von anderen PHP Seiten abgerufen werden kann und

wie man innerhalb einer Funktion eben diese globale Variable abrufen kann.

Ist das allein mit PHP realisierbar oder brauch ich dazu auch eine SQL-Datenbank? Wäre alternativ eine Auslagerung in eine Textdatei auf dem Server, die der PHP Code schreibt und liest möglich? Der Wert darf jedenfalls öffentlich zugänglich sein. Danke im voraus.

Mit freundlichen Grüßen
Alex

Tommes
2007-09-10, 12:21:00
Pack die werte doch in eine config.php oder so und diese includierst du in deinem Script. Wenn du mit globalen Variablen arbeiten willst, musst du diese in der Funktion mittels "global" ansprechen bzw. mittels $GLOBALS arbeiten. Noch besser wären hier Konstanten.

darph
2007-09-10, 12:22:54
wo man die globalen Variablen (die sich ihren Wert immer merken muss) deklarieren muss, damit sie auch von anderen PHP Seiten abgerufen werden kann
<?php
session_start();
$_SESSION["myglobal"] = 15;
?>

<?php
session_start();
echo($_SESSION["myglobal"]);
?>



wie man innerhalb einer Funktion eben diese globale Variable abrufen kann.

Die Session-Variablen sollten auch von innerhalb der Funktion abrufbar sein. Ohne Sessions sollte es, wenn ich mich recht entsinne, so gehen:

<?php

function lala($x) {
global $y;
echo($x+$y);
}

$y = 15;

lala(5);
?>

RattuS
2007-09-10, 12:33:17
Ich bin mir nicht sicher bei Sessions. Das, was ich eben darüber gelesen habe, hört sich so an, als wenn die Werte dann nur pro Cookie/Browser weitergegeben werden, nicht aber vom Server gespeichert werden. :confused:

Wäre folgender Gedanke möglich?

Globale Variable erzeugen:
<?php
$_GLOBALS["bew_var"] = 0;
?>

Globale Variable irgendwo ausgeben lassen:
<?php
echo(global $bew_var);
?>

darph
2007-09-10, 12:41:15
Nein, das wäre nicht in zwei unterschiedlichen Dateien möglich. Dafür brauchst du eine Session.

Wenn der Wert konsistent gespeichert werden soll, als von unterschiedlichen Benutzern auch verwendet werden soll, dann hat das nyx mit globaler Variable zu tun, dann brauchst du einfach eine Datenbank, in der der Wert gespeichert wird, nachdem die Applikation durchgelaufen ist.

Gast
2007-09-10, 12:46:42
Seid gegrüßt,

da ich dynamischen Inhalt in meine Website einbinden möchte, habe ich angefangen, mich mit PHP zu beschäftigen, denn ich möchte ein Bewertungssystem auf meiner Website integrieren.

Der Algorithmus (Mittelwertsberechnung), den ich mir dafür überlegt habe, greift auf eine globale Variable zu, der die Bewertungen als Zahlenwert addiert bekommt und dann durch eine weitere globale Variable (die pro Bewertung um 1 erhöht wird) geteilt wird. Das Ergebnis wird ganzzahlig abgerundet, damit es im Integerbereich bleibt. Die Anzeige des abgerundeten Ergebnisses soll durch eine Bildgrafik (JPEG) auf der HTML Seite dargestellt werden. Die Prüfung, welche Bildgrafik er nimmt, würde ich entweder mit einer IF-Kette oder mit CASE umsetzen.

Das eigentliche Problem an der Sache ist nun, dass ich nicht weiß...

wo man die globalen Variablen (die sich ihren Wert immer merken muss) deklarieren muss, damit sie auch von anderen PHP Seiten abgerufen werden kann und

wie man innerhalb einer Funktion eben diese globale Variable abrufen kann.

Ist das allein mit PHP realisierbar oder brauch ich dazu auch eine SQL-Datenbank? Wäre alternativ eine Auslagerung in eine Textdatei auf dem Server, die der PHP Code schreibt und liest möglich? Der Wert darf jedenfalls öffentlich zugänglich sein. Danke im voraus.

Mit freundlichen Grüßen
Alex

Eine Datenbank, egal ob relational oder als flache DB in einer Textdatei, wirst du benötigen - immerhin willst du die Bewertungen dauerhaft speichern.
Ich empfehle dir eine XML-Datei als DB, die lässt sich mit der SimpleXML Erweiterung seit PHP 5 (http://de.php.net/manual/de/ref.simplexml.php) herrlich einfach verarbeiten.
Darin speicherst du dir deine IDs für die zu bewertenden Objekte inkl. der Bewertungsnoten ab und liest diese immer wieder aus (und berechnest den Durchschnitt).

RattuS
2007-09-10, 19:40:43
Warum nicht gleich so? ;)
Gut, jetzt muss ich nur noch wissen, wie man Variablen in eine Text/XML-Datei speichern lässt.

The_Invisible
2007-09-10, 21:35:05
ich kann sqlite (http://at.php.net/manual/de/ref.sqlite.php) auch empfehlen

mfg

rotalever
2007-09-10, 21:46:25
ich kann sqlite (http://at.php.net/manual/de/ref.sqlite.php) auch empfehlen
Aber so eine "richtige" Datenbank ala MySQL oder PostgreSQL ist doch wohl noch was besser bzw. schneller, besonders bei größeren Projekten.

The_Invisible
2007-09-11, 12:32:34
hm?

zuerst wird über text/xml-dateien geredet und jetzt willst du auf einmal eine "bloatware" datenbank?

mfg

Tommes
2007-09-11, 13:13:05
Völlig verrückt :D Also XML in Verbindung mit SimpleXML eignet sich eigentlich gar nicht, wenn man sich mal anschaut wie SimpleXML arbeitet.

Die Frage ist ja auch, ob es ein Usersystem gibt und jeder nur ein mal Voten darf, oder ob nur ein Cookie oder so gesetzt wird. Wenn es kein Usersystem gibt, reicht eigentlich eine Struktur (ob in XML, einer Datenbank ...) mit den Daten: ID (des zu bewertenden Objektes), Anzahl Stimmen, Summe Stimmen. So dass man aus Summe Stimmen / Anzahl Stimmen den Mittelwert hat.

Mit Usersystem könnte man jeden Vote einzeln speichern. Aber ohne macht das keinen Sinn imho. Just my 2 cents.

Kinman
2007-09-11, 13:25:33
--- Anzeigen ---
Öffne zu Beginn eine Textdatei
Lies zwei Werte aus (Summierte Werte des Voting + Anzahl Votings)
rechne den Mittelwert aus
zeige ihn an
schließe die Datei

--- Neues Voting hinzufügen ---
Öffne die Textdatei
Lies beide Werte aus
Addiere die Stimme + das Voting
Schreibe es in die Datei
schließe die Datei


Alles was Du brauchst findest im PHP Manual http://de.php.net/manual/de
Funktionen: fgets, fopen, fclose fwrite usw. findest alles unter den "Funktionen des Dateisystems"

Ist auch nicht wirklich schwer.

mfg Kinman

Gast
2007-09-11, 13:27:51
Völlig verrückt :D Also XML in Verbindung mit SimpleXML eignet sich eigentlich gar nicht, wenn man sich mal anschaut wie SimpleXML arbeitet.
Warum? :) Einfacher als erst ein Parser-System aufzubauen ist es garantiert.


Die Frage ist ja auch, ob es ein Usersystem gibt und jeder nur ein mal Voten darf, oder ob nur ein Cookie oder so gesetzt wird. Wenn es kein Usersystem gibt, reicht eigentlich eine Struktur (ob in XML, einer Datenbank ...) mit den Daten: ID (des zu bewertenden Objektes), Anzahl Stimmen, Summe Stimmen. So dass man aus Summe Stimmen / Anzahl Stimmen den Mittelwert hat.

aha, also doch XML ;)
Aber du hast recht, es kommt drauf an was er machen möchte - nun hat er zwei Möglichkeiten und muss sich entscheiden.

Tommes
2007-09-11, 13:35:18
Klar ist es einfacher, jedoch lädt es den Inhalt der gesamten XML Datei in den RAM. Das betrachte ich nicht als optimal ;)

The_Invisible
2007-09-11, 13:49:43
Klar ist es einfacher, jedoch lädt es den Inhalt der gesamten XML Datei in den RAM. Das betrachte ich nicht als optimal ;)

solange das nicht mehrere hundert mb ausmacht sollte das kein problem sein.

mfg

RattuS
2007-09-11, 15:47:03
Es muss nichts umständliches sein. Es wird kein User/Login-System geben. Cookies sind zwar keine gute Möglichkeit um "ungerechtes" Bewerten zu verhindern, aber würde alle Male genügen. Es handelt sich bei dieser Website nur um ein kleines Fanprojekt.