[PHP] ganz blöde frage

Goltergaul

Well-known member
ID: 17553
L
26 April 2006
480
7
hi ich hab grade ne ganz blöde frage
PHP:
if($_GET['action'] == "save") {}
wie schreib ich des unkompliziert damit ich nicht die notice "undefined index" bekomme?
ich könnte ganz oben If(!isset($_GET['action'])) { $action=""; } machen aber gehts auch einfacher?
 
happymaster schrieb:
Dein error_reporting rausnehmen? :ugly:
In die Ecke :evil: :p

Am korrektesten:
PHP:
if(isset($_GET['action']) && $_GET['action'] == "save") {}
Am einfachsten (ich glaube, das müsste auch ein E_NOTICE unterdrücken) :
PHP:
if(@$_GET['action'] == "save") {}
 
hm, auch wenns niemand gern zugibt...

schalte einfach E_NOTICE für das error-reporting aus, sowas ist wenn dann eh nur in devel-umgebungen aktiv... in produktivumgebungen sollte es in jedenfall unterdrückt, wenn net sogar vollstöndig abgeschaltet sein.
ps.. bei php muss man eh keine variablen deklarieren, also sind auch solche meldungen total gegensätzlich..
 
Dein error_reporting rausnehmen?
In die Ecke :evil: :p

Am einfachsten (ich glaube, das müsste auch ein E_NOTICE unterdrücken) :
PHP:
if(@$_GET['action'] == "save") {}

:ugly: @ verhindert nur das ein fehler gemeldet wird... der eigentlich fehler ist aber immer noch da. da kann man auch gleich das error reporting ausschalten oder das level hoch setzen. das wäre im endeffekt immer noch sauberer als mit @ zu arbeiten... @ ist eh ne unnütze erfindung die nur zum unsauberen arbeiten verleitet.

wie schreib ich des unkompliziert damit ich nicht die notice "undefined index" bekomme?
ich könnte ganz oben If(!isset($_GET['action'])) { $action=""; } machen aber gehts auch einfacher?

geht leider nicht wirklich einfacher... entweder du definierst nen standardwert, wie dus dgrade gepostet hast. oder du prüfst bei jedem test obs den index wirklich gibt... also if($_GET['action'] && $_GET['action'] == 'blub'). man könnte das natürlich auch inne funktion verpacken, aber naja... alternativ kann man auch die parameter übergabe anders gestallten... zb index.php?do_save=1 somit kannste mit if($_GET['do_save']) reagieren... was zu keinen fehler führt.
 
alternativ kann man auch die parameter übergabe anders gestallten... zb index.php?do_save=1 somit kannste mit if($_GET['do_save']) reagieren... was zu keinen fehler führt.


*hüstel* ... wenn eine derartige get-abfrage vorhanden ist, dann handelt es sich meist um den fall, das ein formular im ersten schritt angezeigt und im zweiten schritt gespeichert werden soll. demnach ist der index "do_save" ebenso wie "save" in der fragestellung beim ersten aufruf nicht vorhanden und führt bei error_reporting(E_ALL) immer zur notice ... :evil:
PHP:
<?
error_reporting(E_ALL);
if( $_GET['save'] ) {}
if( $_GET['save']==1 ) {}
?>
...
Notice: Undefined index: hallo in /srv/www/...../test1.php on line 3
Notice: Undefined index: hallo in /srv/www/...../test1.php on line 4

die einzig korrekte notierung für diesen fall, auch wenn unnötig lang und durch oben genannte mittel umgehbar, ist tatsächlich:

PHP:
if(isset($_GET['save']) && $_GET['save'] == 1) {}

sorry ... ich liebe klugscheissen ;)
 
Ich hab es geahnt.
Werd dann wohl ab nächste Woche mal schauen, wo der komische IIS irgendwelche Errors hinloggt und mir dann überlegen, ob ich die Fehler überhaupt beseitigen will.

anddie
 
Ich hab es geahnt.
Werd dann wohl ab nächste Woche mal schauen, wo der komische IIS irgendwelche Errors hinloggt und mir dann überlegen, ob ich die Fehler überhaupt beseitigen will.

anddie

wenn du es ihm nicht explizit sagst, loggt er keine scriptfehler. die werden nur während des preprocessings (geiles wort) erzeugt und in der ausgabe angezeigt. wenn du eine seite oder ein script entwickelst, dann macht es sinn, error_reporting auf E_ALL zu setzen, damit du wirklich jeden einzelnen pups sehen kannst. wenn das script dann im betrieb läuft, macht man das reporting sinnigerweise komplett aus damit der besucher nicht mit fehlermeldungen genervt wird, die er nicht versteht (bzw. die unter umständen zu viel von deinem script verraten). eventuell auftretende fehler (eigentlich dürfte bei sorgfältiger programmierung keiner mehr auftreten), werden entweder in ein logfile geschrieben oder z.b. per mail verschickt. dazu siehe handbuch -> set_error_handler.

wenn du sicher bist, dass die notices den betrieb deines scriptes nicht beeinflussen, dann kannst du diese auch einfach ignorieren bzw. das error_reporting auf "E_ALL | NOTICE" setzen. wirklich sauber ist ein script aber nur, wenn selbst alle notices ordentlich abgefangen worden sind. durch solche kleinen "unsauberkeiten" entstehen sonst unter umständen bugs, die zu finden du manchmal tage brauchst (zumindest bei grösseren projekten).
 
und weit besser als ein set_error_handler (sofern man daten nur in ein log-file schreiben will) ist eindeutig folgendes:
PHP:
ini_set('error_log','error.txt');
ini_set('log_errors',true);
UND es lässt sich parallel dazu auch noch ein error_handler nutzen

sry ActionScripter, aber ich muss so manchmal auch klugscheißen^^
 
und weit besser als ein set_error_handler (sofern man daten nur in ein log-file schreiben will) ist eindeutig folgendes:
PHP:
ini_set('error_log','error.txt');
ini_set('log_errors',true);
UND es lässt sich parallel dazu auch noch ein error_handler nutzen

sry ActionScripter, aber ich muss so manchmal auch klugscheißen^^

yo akzeptiert :)
aber mails gehen darüber nicht *bätsch*
 
yo akzeptiert :)
aber mails gehen darüber nicht *bätsch*

wie gesagt, will man nur nen log schreiben ist es eindeutig besser, und zusätzlich könnte man ja auch einen error_handler nutzen. Achso und wenn man dies direkt in die php.ini eintragen würde (bzw. über htaccess) dann würden sogar Errors geloggt werden, was dein handler nicht kann :p

*letzten Kommentar haben muss*
 
Achso und wenn man dies direkt in die php.ini eintragen würde (bzw. über htaccess) dann würden sogar Errors geloggt werden, was dein handler nicht kann :p

was kann mein handler nicht? errors loggen? was nicht geht, sind script und parsing-fehler ja, aber wenn die syntax nicht stimmt, mach ich das error_reporting nicht aus. alle anderen fehler kann man über den handler loggen.

*einen draufsetz*
 
was kann mein handler nicht? errors loggen? was nicht geht, sind script und parsing-fehler ja, aber wenn die syntax nicht stimmt, mach ich das error_reporting nicht aus. alle anderen fehler kann man über den handler loggen.

*einen draufsetz*

Error ist ein Fehlerlevel^^
E_Error, und das kann dein Script net, aber wissn ma ja beide und im Prinzip sagen ma ja auch nichts unterschiedliches^^