undefined index | affenformular | value="$_GET['yxz']GELÖST

  • um meine frage zu veranschaulichen zuerst ein ganz einfaches affenformular , aus dem PHP-Kurs.

    Code
    <span class="syntaxhtml"><br /><span class="syntaxdefault"><?php<br />if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> empty</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_GET </span><span class="syntaxkeyword">[</span><span class="syntaxstring">'derName'</span><span class="syntaxkeyword">])</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> TRUE </span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">  echo</span><span class="syntaxstring">'<br />    <form action="'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'PHP_SELF'</span><span class="syntaxkeyword">].</span><span class="syntaxstring">'" method="get"><br />        <input type="text" name="derName" value="'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'derName'</span><span class="syntaxkeyword">].</span><span class="syntaxstring">'" /><br />        <input type="submit" name="_1" value="senden" /><br />    </form>'</span><span class="syntaxkeyword">;<br />}<br /></span><span class="syntaxdefault">else </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">  echo </span><span class="syntaxstring">'Der Name lautet: '</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'derName'</span><span class="syntaxkeyword">].</span><span class="syntaxstring">'.'</span><span class="syntaxkeyword">;<br />}<br /></span><span class="syntaxdefault">?><br /></span></span>


    wenn das die seite zum ersten mal aufgerufen wird, kommt folgende fehlermeldung -> Undefined index: derNAME in ordnerstruktur/dateiname on line 7


    mach ich da was falsch
    wie bekomm ich die fehlermeldung, oder besser den fehler weg?


    mein idee:
    wenn $_GET['derName'] leer ist in mit einen wert füllen und formular ausgeben


    nur kommt es mir spanisch vor das im tutorial nichts davon erwähnt wird
    - ->oder hab ich das übersehen
    - ->oder bin ich auf dem holzweg



    lg

  • local im browser getestet


    error_reporting() mh schade
    einen fehler zu beheben, in dem ich die meldung wegschalte...



    _______________
    EDIT
    _______________
    aber wenn ich das script auf den server lade wird die fehlermeldung nicht angezeigt ^^
    muss mit den einstellungen der php.ini zu tun haben


    ob man error_reporting gezielt einstellen kann werde ich mir durchlesen!

  • Ja, damit schaltest du die Notices aus, die auf undefinierte Variablen hinweisen.
    Lass einfach im if-block im echo das $_GET["derName"] weg, dann ist der Fehler auch weg. Und da das eh nur ausgeführt wird, wenn $_GET["derName"] nicht definiert oder 0/null/"" ist, ist die Ausgabe sinnlos
    DerWaldschrat

  • @Waldschrat:
    Hier geht das vielleicht noch, aber wenn er später ein größeres Formular, z.B. Gästebuch oder Kontaktformular hat, dann sollte er diese Angaben dringlichst machen, da es die Besucher nicht spannend finden, wenn alle ihre Gemachten Angaben weg sind, weil sie irgendein Feld vergessen oder invalide ausgefüllt haben.
    Daher sollte man schon im kleinen mit so etwas anfangen :)

  • Ja, schon, aber empty heißt ja, dass das Formularfeld leer ist, deswegen ist diese Ausgabe an dieser Stelle sinnlos.
    Natürlich ist für spätere Aufgaben eine solche Ausgabe sinnvoll, hier prüfe ich aber auch immer, ob die Variable existiert, etwa so:

    PHP
    <span class="syntaxdefault"><br />echo </span><span class="syntaxstring">"<form action=\"\"><input type=\"text\" value=\""</span><span class="syntaxkeyword">.((!empty(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"var"</span><span class="syntaxkeyword">]))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">?</span><span class="syntaxdefault"> htmlentities</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">stripslashes</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"var"</span><span class="syntaxkeyword">]))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">:</span><span class="syntaxdefault"> </span><span class="syntaxstring">""</span><span class="syntaxkeyword">).</span><span class="syntaxstring">" name=\"var\" /></form>"<br /></span><span class="syntaxdefault"> </span>


    DerWaldschrat

  • Das finde ich wiederrum vollkommen Sinnlos.. =/
    Es erhöht nur die Laufzeit der Datei, deren Größe.. denn im Endeffekt ist es doch egal, ob ich überprüfe, ob die Variabel leer ist und dann einen leeren String übergebe, oder ob ich den leeren Inhalt der Variabel übergeben.. =/

  • Aber so entstehen die Notices, die ein Anzeichen für unsauberen Programmierstil sind. In anderen Sprachen gibt es so etwas ja auch gar nicht.
    Außerdem, die Perfomanceeinbußen sind so gering, dass man sie vernachlässigen kann (da gibts deutlich schlimmere Sachen).
    DerWaldschrat

  • mh..


    wenn ich im value die variable weglasse habe ich ein problem wie sarrkan schon sagt


    nehmen wir an ich hab mehrere felder
    diese sollen alle ausgefüllt sein ( numerisch, etc geprüft ) bevor die berechnung startet


    wenn ich den wert nicht von der url mit get/post hole muss der user alles noch einmal eingeben
    und das geht heute echt nicht mehr :)


    es muss fast eine einstellung geben welche
    undefined index nicht anzeigt
    und
    undefined variables anzeigt



    auf meinem serverplatz vom freehoster bplaced werden die e_notice nicht angezeigt ^^


    lg

  • Zitat von &quot;DerWaldschrat&quot;

    Aber so entstehen die Notices, die ein Anzeichen für unsauberen Programmierstil sind. In anderen Sprachen gibt es so etwas ja auch gar nicht.
    Außerdem, die Perfomanceeinbußen sind so gering, dass man sie vernachlässigen kann (da gibts deutlich schlimmere Sachen).
    DerWaldschrat


    Notice = Notiz, also nicht unbedingt soooo wichtig. Würde da jedes mal ein Error bei rausgeworfen, dann wäre das etwas anderes.
    Außerdem kannst du PHP nicht mit anderen Sprachen vergleichen! Nehmen wir z.B. Java, da musst du ganz genau angeben, was für einen Typ von Variabel du haben willst, PHP ist z.B. auch dort in dem Punkt viel Flexibler.
    Und du kannst ja mal versuchen mit deinen Konditional Operatoren so in Java zu arbeiten, dann wirft dir der Compailer aber auch schon mal gerne einiges an den Kopf :P


    Und wenn dir nun mal diese Programmiersprache diese Möglichkeit gibt, dass du auch eine Leere/nicht Indexierte Variabel verwendest, warum sollte man diese Möglichkeit nicht nutzen?
    Ansonsten bin ich dafür, dass du ab sofort jede Programmiersprache exakt gleich Programmierst und irgendwelche Besonderheiten von diesen auch einfach weg lässt :P Denn hey:

    Zitat von &quot;DerWaldschrat&quot;

    In anderen Sprachen gibt es so etwas ja auch gar nicht.

    :P



    Peter

    Zitat von &quot;Peter1978&quot;

    es muss fast eine einstellung geben welche
    undefined index nicht anzeigt
    und
    undefined variables anzeigt


    Naja.. im Normalfalle sollte es dir doch auffallen, ob du eine Variabel definiert hast.
    Spätestens, wenn dir eine Funktion meldet, dass die Variabel Leer ist, oder am ende nichts raus kommt, sollte man Hellhörig werden ;)

  • Zitat von &quot;Sarrkan&quot;

    Naja.. im Normalfalle sollte es dir doch auffallen, ob du eine Variabel definiert hast.
    Spätestens, wenn dir eine Funktion meldet, dass die Variabel Leer ist, oder am ende nichts raus kommt, sollte man Hellhörig werden ;)


    ja ist logisch


    nur
    damals funktionierte mein script local einwandfrei


    und als ich es hochlud
    auch


    nur diese Fehlermeldung oder besser notice war dabei - undefined variable und kein zugriff auf die .ini


    ich kann es sicher mit einer abfrage umgehen
    so das die variable nur gesetzt wird wenn ich sie wirklich brauche


    fiel mir local mit eingeschränktem error_reporting jedoch nicht auf


    so ist das :)



    nun nehm ich das gesamte packet und frage in jedem value mit !empty() ab


    danke euch beiden für eure anregungen
    habt mir sehr geholfen :D


    lg


    ____________________________________________________________
    EDIT
    ____________________________________________________________


    frage jetzt mit !empty den absende button ab
    falls der leer ist wird ein formular ohne den $_GET['xxx'] angezeigt
    falls das formular gesendet wurde wird das formular mit den $_GET['xxx'] aufgerufen
    weil die nicht mehr NULL sind , sondern ein leerer string also defined

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!