[gelöst] $_GET auf Inhalt überprüfen (isset schlägt fehl)

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

[gelöst] $_GET auf Inhalt überprüfen (isset schlägt fehl)

Beitrag von HabNurNeFrage »

Hi,

in einem Script, das ich gerade aus Spaß bastele, wird eine Nutzereingabe (URL oder Hostname) mit $_GET übermittelt.
Das gesamte Script fängt erst an zu arbeiten, wenn $_GET gesetzt ist: Prüfung derzeit mit if (isset($_GET['url'])) { //ab die Post

Funktioniert alles schon fast so, wie ich es mir vorstelle. Einige Arrays werden noch via var_dump bzw. print_r ausgegeben, weil ich bis jetzt zu faul war :oops:
Nun habe ich folgendes Problem: Wenn man das Formular leer absendet, legt das Script los, obwohl $_GET leer ist.
Probiert habe ich bereits zusätzlich != '' ... != null ... !empty($_GET... !=0... if(!$_GET...
Selbst eine Kombi aus allen hat es nicht gelöst. Gibt man $_GET leer abgesendet aus, kommt - wie zu erwarten - nichts.

Prüfe ich nicht richtig oder habe ich die richtige Prüfung bis jetzt nicht gefunden?
Als Ausweichlösung könnte ich ein JavaScript einbauen, das leeres Absenden verhindert, aber das löst nicht direkt mein Problem, sondern verhindert nur das Auftreten.

Wer es sich ansehen möchte: http://homestory.org/scv/ (einfach mal leer absenden)
Danach wird der HTTP_REFERER im Feld eingetragen, in dem Fall dann SELF, aber ansonsten sollte nichts weiter passieren, was aber dennoch der Fall ist.
Funktion voll: http://homestory.org/scv/index.php?url= ... mmunity%2F

LG

PS: Submit-Action ist $_SERVER['SCRIPT_NAME'] - falls das noch irgendeinen Einfluss hat...
Zuletzt geändert von HabNurNeFrage am 31.05.2014 11:52, insgesamt 1-mal geändert.
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
Benutzeravatar
Crizzo
Administrator
Administrator
Beiträge: 11953
Registriert: 19.05.2005 21:45
Kontaktdaten:

Re: $_GET auf Inhalt überprüfen (isset schlägt fehl)

Beitrag von Crizzo »

Hi,

stoppst du dein Script denn überhaupt, wenn die Variable leer ist oder macht es dann unbeeindruckt wert?

Was bekommst du denn, wenn du das "leere" $_GET ausgibst? ;)

Grüße
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: $_GET auf Inhalt überprüfen (isset schlägt fehl)

Beitrag von HabNurNeFrage »

Hi,

echo GET ergibt nichts, sofern leer abgesendet wird. Variablen werden alle erst nach der Prüfung mit isset befüllt.
Ist GET leer, werden nur ein paar konstante HTML Tags via PHP ausgegeben.
Vielleicht liegt es am &submit=> - was dann in der URL auftaucht. Scheint aber nicht als Bestandteil von GET gewertet zu werden.

LG

/** EDIT:
Juhu, ich habe es nun mit !empty lösen können. // freu
Ich hatte eine Stelle weiter unten übersehen, die GET auch noch abfragt :oops:

Mich würde aber doch interessieren, was bei isset($_GET['blabla']) gesetzt ist, wenn der Dump der Variable leer ist :-?

Nunja, es löppt. Supi, jetzt kann ich die Feinheiten beackern... :D */
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: $_GET auf Inhalt überprüfen (isset schlägt fehl)

Beitrag von Miriam »

isset($bar) gibt wahr, wenn die Variable $bar überhaupt vorhanden (also nicht NULL) ist... Das bedeutet nicht, daß sie nicht leer sein kann.
Ein Hinweis darauf ist auch, daß var_dump($bar) keine Fehlermeldung ausgibt. Ansonsten (könnte) dort dann etwas stehen wie: "Notice: Undefined variable: bar", abhänging von Deinem error_reporting();
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: $_GET auf Inhalt überprüfen (isset schlägt fehl)

Beitrag von HabNurNeFrage »

Hi,

vielen Dank, wieder ein Stück Weisheit gewonnen 8)

Als Anfänger habe ich natürlich als erste Zeile error_reporting(E_ALL);
Ich habe gestern alle Funktionen soweit mit if/else returns bzw. @ nachgerüstet, bis keine Notices mehr auftauchten.

Das Problem war nicht undefined, sondern defined, obwohl es noch nicht sollte.

Nun werde ich mal E_STRICT setzen und weiter debuggen... (PHP 5.3.8 ist auf dem Server)

LG
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: $_GET auf Inhalt überprüfen (isset schlägt fehl)

Beitrag von Miriam »

HabNurNeFrage hat geschrieben:Als Anfänger habe ich natürlich als erste Zeile error_reporting(E_ALL);...
So lange da noch ein <?php davor steht, ist ja alles gut. Happy Coding.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Re: $_GET auf Inhalt überprüfen (isset schlägt fehl)

Beitrag von cYbercOsmOnauT »

HabNurNeFrage hat geschrieben:... bzw. @ nachgerüstet, bis keine Notices mehr auftauchten.
Eine Notice mit @ zu beheben ist m.E. eine schlechte Idee. Denn Du entfernst ja nicht die Ursache der Notice, sondern nur die Auswirkung (der Fehler wird ignoriert). Die Notices sind doch meist sehr aussagekräftig. Also lieber den Fehler an sich beheben. ;)

Grüße,
Tekin

P.S.: Deine Signatur beinhaltet mehrere Fehler. Auf die Regex links, folgt rechts der Ersetzungsstring und nicht noch eine RegEx. JS Replace Zudem ändert sich in Deinem "Script" der Inhalt von geld nie, sondern der von shoppen.

Code: Alles auswählen

var geld = 'taschengeld'; while (geld.match(/^Noch was uebrig$/)) { geld = geld.replace(/geld/, 'bloedsinn'); } goHome();
Das /g habe ich extra weggelassen im RegEx, denn dann wäre beim ersten Einkauf gleich alles Geld weg. Wenn Du das Shoppen unbedingt mit drin haben willst:

Code: Alles auswählen

var geld = 'taschengeld'; function shoppen() { while (geld.match(/^Noch was uebrig$/)) { geld = geld.replace(/geld/, 'bloedsinn'); } return 'home'; } shoppen();
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: $_GET auf Inhalt überprüfen (isset schlägt fehl)

Beitrag von HabNurNeFrage »

Hi,

vielen Dank für die Korrektur meiner Signatur :lol:
Bitte nochmals mit var shoppen - es handelt sich dabei aber mehr um einen Joke :D

Danke für den Hinweis mit dem @. Damit habe ich keine Fehler unterdrückt, es können eventuell nicht jedesmal alle Werte berechnet werden und dann ist das hilfreich.
Man braucht dann nicht für jeden denkbaren Fall wieder eine if-Abfrage, ob die Variable nun befüllt ist.
Letztlich wäre das natürlich korrekter.
Da das Script auf mehrere Apis zugreift, die ggf. nicht reagieren oder unerwartete Ergebnisse liefern, erschien mir das mit dem @ dafür die einfachste Lösung zu sein.

LG
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Re: [gelöst] $_GET auf Inhalt überprüfen (isset schlägt fehl

Beitrag von cYbercOsmOnauT »

Auch unerwartete Ergebnisse sollte man erwarten und dem entsprechend reagieren. Ein @ verwende ich persönlich nirgendwo in Codezeilen die ich programmiere. Im schlimmsten aller Fälle kann man mit try/catch arbeiten, die Exception abfangen und darauf reagieren. Ein @ ist einfach nur ein "nerv mich net". ;)

var shoppen macht in der Logik Deines Pseudocode keinen Sinn. Denn das Shoppen als solches ist keine Variable, sondern das Geld welches Du besitzt. Shoppen ist eher eine Funktion, eine Tätigkeit.
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
Antworten

Zurück zu „Coding & Technik“