PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP/localhost: keine Übernahme von Variablen!



GanbaruX
11.06.2004, 08:53
Hallo habe folgendes seltsames Probelm, das ich an einem Newsscript zu erklären versuche.

news.php?aktion=detail&newsid=12

Die Aktion und die Id werden beim Aufruf nicht übernommen! Ich kann keine Seleketion ausführen.
Online funktionierts! Aber local werden die Daten nicht übergeben.

Suse 9.0/apache/php/mySQL

Ich bin ratlos. Habe gestern den ganzen Tag damit verbracht den Fehler im Code zu suchen...

Kennt jemand die Ursache des Problems?

oenone
11.06.2004, 09:28
hallo..

(ich geh einfach mal davon aus, du benutzt die aktuelle php version, meine kristallkugel ist leider defekt)

greifst du auch per $_GET["aktion"] bzw. $_GET["newsid"] auf die variablen zu?
wenn nicht und wenn du dies nicht willst, musst du in deiner php.ini die register_globals auf Off stellen, was allerdings nicht empfehlenswert ist.

auf bald
oenone

PS: meine kristallkugel wird noch ne weile defekt bleiben, waere also nett, wenn du mehr informationen geben wuerdest ;)

GanbaruX
11.06.2004, 09:46
Ich habe die "Sachen" installiert, die bei Suse dabei waren.

Die Möglichkeit mit $aktion=$_GET['aktion']; kannte ich bisher noch nicht.
Schon eingebaut und getestet - es geht!

Bisher (W98AMP) habe ich einfach die Variablen "nur so" übergeben und konnte damit arbeiten.
Mache ich es jetzt halt so, Hauptsache es funktioniert.

Danke

oenone
11.06.2004, 13:51
seit version 4.1.0 gibt es das :)

siehe hierzu diesen link: http://www.php.net/release_4_1_0.php

auf bald
oenone

GanbaruX
12.06.2004, 06:55
Danke, für den Link.

Ich melde mich morgen nochmal, weil das eigentliche Problem ja noch nicht gelöst ist.
Es wurde ja es sozusagen - umgangen.

Habe ja noch mehr Webseiten, und die "funktionieren" jetzt lokal nicht mehr.

thorus
12.06.2004, 11:12
Ich melde mich morgen nochmal, weil das eigentliche Problem ja noch nicht gelöst ist.
Es wurde ja es sozusagen - umgangen.

Habe ja noch mehr Webseiten, und die "funktionieren" jetzt lokal nicht mehr.
Das ist kein Problem.
Es gibt schon Gründe, warum register_globals abgechaltet wurde. Vor allem nämlich wegen der Performance und wegen der Übersichtlichkeit.
Ich persönlich finde das wirklich nicht do doll, wenn ich aus Versehen eine Variable überschreibe, die ich aber übergeben habe und später noch brauche...
Da ist die Methode, die übergebenen Variablen über einen assoziativen Array zu holen wesentlich sauberer.

Du solltest alle deine Webseiten register_globals=off kompatibel machen, weil du nie wissen kannst, wann dein Webhoster das umstellt und außerdem bietet es nur Vorteile.
Die paar Zeichen extra zu schreiben sollte ja kein Prob sein. ;)

GanbaruX
12.06.2004, 15:54
....jetzt wird mir einiges klarer. EINIGES! :O

http://geeklog.info/article.php/20030415111921975

..und von http://www.netz-id.de/article1823.html das Zitat:



Gerade PHPNuke Benutzer werden immer häufiger mit register_globals konfrontiert - doch wissen immer noch nur wenige was das nun bedeutet. Da register_globals in Zukunft ohnehin auf OFF steht, ergeben sich zunehmend Probleme in der Anwendung älterer Skripte und auch beim Einsatz von PHPNuke und register_globals=off

Register_Globals ist eine PHP interne Option die automatisch globale Variablen unter ihrem Eigen-Namen zur Verfügung stellt. Typisches Beispiel: Ein Formular hat ein Textfeld "eingabe" - bei register_globals=on steht im Empfängerskript unter $eingabe der eingegebene Wert zr Verfügung.

Das scheinbar so gemütliche System hat schwerwiegende Nachteile: Werte werden ohne Prüfung übernommen. $eingabe wird genutzt, gleich ob der Wert aus einem Skript stammt, per GET oder POST übermittelt wurde. Darum gibt es seit 4.1 die Variablen _GET, _POST etc in denen diese Variablen auch zur Verfügung stehen - und man weiss genau worauf man zugreift! So steht das Feld "eingabe" bei einem Formular das per POST arbeitet danach unter $_POST['eingabe'] zur Verfügung

Es ist somit nicht mehr möglich, per GET einen Wert unterzuschieben, da er explizit in der POST variable gesucht wird. Das spricht für saubereren Code und weniger Sicherheitslücken
...


Ich werde dann mal nach und nach meinen alten Code anpassen....

Das Newsscipt ist zum Glück die erste Seite des neuen Projekts :)

Vielen Dank, es ist schön wenn einem die "alten Hasen" mal einen Schubs in die richtige Richtung geben.

DaMutz
12.06.2004, 17:11
mach doch für jede Variable die du übergibst am Anfang der Seite folgenden Befehl, damit musst du nicht alle Variablen im Skript ändern.


if(isset($_GET['seite'])){$seite = $_GET['seite'];}else{$seite="";}

GanbaruX
12.06.2004, 20:24
So ähnlich, nur ohne isset, hatte ich jetzt auch schon testweise angefangen! :-)
Deine Lösung ist allerdings etwas eleganter...meine war eher ein "Provisorium".

Danke, schon eingebaut.

The Unknown
13.08.2004, 00:49
mittels export() kann man auch die superglobalen arrays in wie gehabt auch direkt nutzbar machen als $seite o.Ä. - aber auch dies ist kein guter Stil und sollte eigentlich nur ein würgaround sein für alte scripte die trotzdem "irgendwie" laufen sollen ;)

Vor allem kommt eine Programmierung mittels register_blobals=off auch der Sicherheit zugute, da nicht einfach variablen aus einer anderen Quelle überschrieben werden können so einfach.