php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.01.2005, 08:55  
Gast
 
Beiträge: n/a
Standard Variablen

Hallo PHP-Experten!

Ich hab zwar schon einige Threats zum Thema Variblen in PHP gelesen, bin aber noch nicht ganz schlau daraus geworden. Nun meine Frage:

Gibt es in PHP eine Möglichkeit Variablen für alle Scripte einer Applikation gültig zu machen, so das diese ihren Wert nicht verlieren? Ich hab früher mal viel in VBA mit MS Access programmiert. Dort gibt es die Möglichkeit globale Variablen so zu definieren, dass sie auch in allen Funktionen und Modulen gültig sind.

Meine Aufgabenstellung:
Ich möchte ein Array "einmalig" beim Aufruf eines Scripts mit Werten vollpacken. Dieses Array soll dann in allen Modulen verfügbar sein. Das Problem dabei ist, das Array wird mit shuffle durchgemischt und darf die Sortierreihenfolge nicht ändern, bis es über ein programmmiertes Flag die Anweisung dazu bekommt. Wäre das nicht so, könnte ich es ja mit normalen $_GLOBALS machen. Geht aber in diesen Fall nicht.

Ich weiß, dass man mit Sessions das Problem lösen könnte, suche aber eine alternative Lösung.

Danke
 
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 26.01.2005, 09:45  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

ähm wie soll man das verstehen?
es wird gemischt, soll aber sortiert bleiben?

Code:
Das Problem dabei ist, das Array wird mit shuffle durchgemischt und darf die Sortierreihenfolge nicht ändern,

wenn du innerhalb jeder funktion wo du auf das array zugreifst, ne veränderbare isntanz brauchst, dann machs doch einfach

PHP-Code:
function foo()
{
global 
$deinarray
$meinarray 
$deinarray
/* mehr code */

mfg
robo47
robo47 ist offline  
Alt 26.01.2005, 10:09  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von robo47
ähm wie soll man das verstehen?
es wird gemischt, soll aber sortiert bleiben?
Ja genau so.

Zitat:
Zitat von robo47
wenn du innerhalb jeder funktion wo du auf das array zugreifst, ne veränderbare isntanz brauchst, dann machs doch einfach
Das ist nicht das Problem das ich habe, sondern - ich versuchs nochmal:
1. Script wird aufgerufen und erstellt ein Array das gemischt wird.
2. Flag wird erstellt und sperrt mir das Füllen und Mischen des Array bei nochmaligen aufruf des Scripts.
3. Script wird nochmals aufgerufen Array muss noch in der selben Sortierung (wie beim ersten aufruf erstellt) vorhanden sein.

Das Problem ist nun bei mir, dass bei Punkt 3 - also dem 2. Aufruf das Array einfach nicht mehr gültig ist, da es ja nicht nochmals definiert werden darf um den Inhalt nicht zu verändern. Da ja auch globale Variablen bei einem erneuten Script Aufruf nicht mehr vorhanden sind wenn sie nicht als Sessionvaribale definier oder per POST/GET übergeben wurden.

Wie ja gesagt, mit sessions funktioniert das ja - brauche jedoch eine alternative lösung, die die selbe Funktion wie eine Session variable erfüllt - also immer gültig bis die variable freigegeben wird - z.b. unset()
 
Alt 26.01.2005, 10:19  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

erneute aufrufe haben nix mit global zu tun, es gibt dazu mehrere möglichkeiten um eine variable in einem script wieder anzusprechen

-> sessions (schon von dir genennt)
-> cookies (nix anderes als ne session, ausser dass es aus meiner perspektive noch etwas unsicherer ist)
-> datenbank (eigentlich perfekt, da hier keiner rankommt ausser dem script)
-> textdatei (wie datenbank, mussnur ausreichend durch ne htacess oder ähnlichem in einem geschützen verzeichnis liegen)

das sind alles dinge wo du daten speichern kannst, jenachdem was für ein system dahintersteht, bin ich der faule mensch und bevorzuge die datenbank, aber das musst du dir überlegen. wenn das ganze z.b. abhängig von nem login ist, muss du in der db halt die userid speichern und kannst anhand dieser dann wieder draufzugreifen.

mfg
robo47
robo47 ist offline  
Alt 26.01.2005, 10:34  
Gast
 
Beiträge: n/a
Standard

@robo47
Vielleicht hab ich mich falsch ausgedrückt. Ich meinte, dass auch eine globale Variable nach erneuten Aufruf eines Scripts den Inhalt verliert.

Die Möglichkeiten die Du genannt hast sind mir bekannt, trotzdem danke für die Antwort da ich nun weiß dass es keine alternative zu diesen Möglichkeiten gibt bin ich auch gescheiter geworden.

Leider:
Sessions -> kann ich nicht verwenden
cookies -> sind mir zu unsicher da die vom User auch deaktiviert werden können
datenbank und textdatei -> wäre eventl. eine Möglichkeit doch habe ich keine userid in dem projekt zur Verfügung habe, da diese ja wieder nur mit sessions oder cookies gemacht werden kann

Trotzdem Danke
 
Alt 26.01.2005, 10:44  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Denise
@robo47
Vielleicht hab ich mich falsch ausgedrückt. Ich meinte, dass auch eine globale Variable nach erneuten Aufruf eines Scripts den Inhalt verliert.

Die Möglichkeiten die Du genannt hast sind mir bekannt, trotzdem danke für die Antwort da ich nun weiß dass es keine alternative zu diesen Möglichkeiten gibt bin ich auch gescheiter geworden.

Leider:
Sessions -> kann ich nicht verwenden
cookies -> sind mir zu unsicher da die vom User auch deaktiviert werden können
datenbank und textdatei -> wäre eventl. eine Möglichkeit doch habe ich keine userid in dem projekt zur Verfügung habe, da diese ja wieder nur mit sessions oder cookies gemacht werden kann

Trotzdem Danke
beschreib doch mal genauer für was du es einsetzt, vieleicht lässt es sich ja anders lösen.

mfg
robo47
robo47 ist offline  
Alt 26.01.2005, 11:00  
Gast
 
Beiträge: n/a
Standard Re: Variablen

@Denise
>Ich weiß, dass man mit Sessions das Problem lösen könnte, suche aber eine alternative Lösung.

a. fein, b. es gibt keine sinnvolle andere Lösung, als die zum Client passenden Variablen in einer Session zu speichern.

>Sessions -> kann ich nicht verwenden

Begründung, warum Du auf die Funktionalität des Sessionmechanismus (Prozeßcookie mit Fallback) verzichten willst.

> datenbank und textdatei -> wäre eventl. eine Möglichkeit doch habe
>ich keine userid in dem projekt zur Verfügung habe, da diese ja wieder
>nur mit sessions oder cookies gemacht werden kann

Korrekt erkannt, falls Du unter userid eine client_id verstehst.
back to session!
 
Alt 26.01.2005, 11:53  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.818
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Ich hab zwar schon einige Threats zum Thema Variblen in PHP gelesen
ja, das thema "Variblen in PHP" ist schon eine bedrohung. :zitter:



und bitte - kannst du mal erläutern, warum du keine sessions verwenden kannst oder darfst?
axo ist offline  
Alt 26.01.2005, 12:03  
Gast
 
Beiträge: n/a
Standard

@robo47
Es handelt sich dabei um ein Fotovoting Script, dass ich für PHP-Nuke erstellt habe. Normale Fotovotings funktionieren meist so, dass immer vom 1. Bild bis zum letzten Bild in der Datenbank durchgevotet wird. Der Nachteil dabei ist, dass viel User nicht bis zum Ende (letzten Bild) voten und vorher aufhören. Somit sind die Bilder am Ende der Datenbank immer benachteiligt.

Daher war die Idee:
Beim Einstieg ins Fotovoting werden alle verfügbaren Bilder aus der Datenbank in ein Array geschrieben. Das Array soll dann durchgemischt werden um eine zufällige Reihenfolge zu erstellen. Diese Reihenfolge soll dann in unveränderter Form vom 1. bis zum letzten Bild durchgevotet werden können. Das Mischen darf daher nur beim 1. Aufruf eines Users des Scripts erfolgen und das Array muss dann beibehalten werden.
Ich habe bereits eine funktionierende Lösung die auf Sessions aufbaut. Diese Lösung funktioniert genau wie oben beschrieben.

Ich habe auch eine 2. Lösung, die ich auch verwenden werde wenn es keine alternative zu Sessions gibt. Diese Lösung mischt das Array nicht, sondern wählt einen zufälligen Startpunkt in der Datenbank und rotiert dann in der Reihenfolge wie die Bilder in der Datenbank stehen. Das funktioniert deshalb, weil ich in diesem Fall nur den Startpunkt als integer per z.B. GET oder POST übergeben kann, was ja mit arrays bekanntlich nicht funktioniert.

Ist also nicht so tragisch wenn es nicht klappt die 1. Variante ohne Sessions zu realisieren. Mir wäre es nur lieber gewesen, wenn auch die Reihenfolge der Bilder ständig variiert.
 
Alt 26.01.2005, 12:09  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.818
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

achso, dann geht's doch auch ohne sessions.

siehste: bessere problembeschreibung schreiben und nicht immer das problem verallgemeinern, das kann auch fehlschlagen.

du kannst doch das array als serialisierten string in ein verstecktes formularfeld packen, wenn die 'navigation' beim voting eh durchgängig über formulare abläuft ... aber nicht vergessen: die maximale länge der GET-parameter insgesamt liegt bei 2 KB, bei POST kannst du mehr daten schicken.
axo ist offline  
 


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
Klasse statt globaler Variablen ecomeback PHP-Fortgeschrittene 6 15.07.2008 16:30
Fehler bei Übergabe von Variablen aus MySQL in Firefox jensoweber Datenbanken 0 13.07.2008 13:14
Übergeben von Variablen an in PHP eingebundenes Perl-Script shredder01 PHP Tipps 2008 3 04.04.2008 09:25
Datei mit Variablen so includen, dass Variablen nutzbar? BartTheDevil89 PHP Tipps 2008 6 22.01.2008 20:57
unerklärliches Leeren von Variablen KuShi PHP Tipps 2007 2 08.07.2007 15:19
Teil einer Variablen mit einer Variablen ersetzen ? simsalabim PHP Tipps 2007 11 20.03.2007 20:36
Function und Variablen Quagga PHP Tipps 2006 2 11.08.2006 18:23
variablen aus textfile erzeugen (shellscript) noskule Server, Hosting und Workstations 2 19.07.2006 15:42
Variable aus Variablen zusammensetzen juhuwoorps PHP Tipps 2007 1 28.11.2005 21:50
variablen in url automatisch hinzufügen Promaetheus PHP Tipps 2007 2 26.11.2005 12:52
Variablen übergeben PHP Tipps 2005-2 9 30.08.2005 10:58
Variablen übergeben bzw. auslesen? PHP Tipps 2005 4 30.01.2005 03:56
[Erledigt] register globals off bei variablen Variablen... PHP Tipps 2005 4 25.01.2005 17:50
post variablen vorgaukeln PHP-Fortgeschrittene 4 11.01.2005 15:21
Variablen per adresse übergeben rocco PHP Tipps 2004 7 24.07.2004 12:03


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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.