tropenberta: leeres formularfeld

hi leuts

bin gerade dabei eine formularabfrage zu basteln.

  
<form method="get" action="verarbeiten.php">  
  Bitte geben Sie Ihren Namen an : &nbsp;  
  <input id="vname" name="vname" type="text" size="30" maxlength="30">  
  <br><br>  
  Bitte geben Sie Ihre Email an : &nbsp;&nbsp;&nbsp;&nbsp;  
  <input id="email" name="email" type="text" size="30" maxlength="30">  
  <br><br>  
  Bitte geben Sie Ihre Wohnort an :  
  <input id="ort" name="ort" type="text" size="30" maxlength="30">  
  <br><br>  
  <input type="reset" id="clear" name="clear" value="Eingabe l&ouml;schen">&nbsp;  
  <input type="submit" id="absenden" name="absenden" value="Absenden">  
</form>  

jetzt möchte ich die einzelnen felder nach inhalt abfragen.

  
  $name = htmlspecialchars ($_GET["vname"]);  
  
  if ( empty ($name) )  
  {  
    echo"Bitte Name angeben !";  
  }  
  else  
  {  
    echo"Dein name ist "$name;  
  }  

leider funzt das nicht ganz - dann hab ich noch so probiert :

  
if ( empty ($_GET['vname']) == TRUE )  
  {  
    echo"Bitte Name angeben !";  
  }  
  else  
  {  
    echo"Dein name ist "$name;  
  }  

irgendwo mach ich noch nen fehler und ich komm nicht drauf.

gruss micha

  1. Tach!

    leider funzt das nicht ganz - dann hab ich noch so probiert :
    irgendwo mach ich noch nen fehler und ich komm nicht drauf.

    Du hast vergessen, den Fehler zu beschreiben. Was erwartest du konkret (in welcher Variable, als Funktionsergebnis, ...) und was erhältst du stattdessen.

    dedlfix.

    1. hi leuts

      danke für deine antwort dedlfix.

      hab noch nie wirklich was in php gemacht und wollte jetzt mal eine formularabfrage basteln.

      ziel ist es zu schauen ob ein formularfeld leer ist. wenn es leer ist soll er die meldung "Bitte Name angeben" auf den bildschirm schreiben, wenn das formularfeld nen inhalt hat soll halt ne andere meldung bringen.

      das ist jetzt nur zu übungszwecken um die syntyx von php zu lernen.

      momentan gibt er mir beb weisen bildschirm aus.

      gruss micha

      1. Tach!

        momentan gibt er mir beb weisen bildschirm aus.

        Dann stell das error_reporting auf E_ALL und display_errors auf on - zumindest auf dem Entwicklungssystem und/oder im Testbetrieb. Vermutlich musst du das bereits irgendwo außerhalb PHPs machen.

        Die Aussage "weiße Seite" ist nicht aus der Sicht eines Programmierers getroffen. Der schaut sich das Ergebnis direkt an. In dem Fall wäre das der erzeugt HTML-Code. Ist die Seite nur augenscheinlich leer oder kommt nicht mal ein einziges Zeichen in der Quelltextansicht des Browsers zu sehen? "Keine Ausgabe" kann durch einen Syntaxfehler verursacht werden. Da hilft nur, die oben genannten Einstellungen außerhalb der PHP-Datei vorzunehmen, damit diese bereits beim Parsen und nicht erst bei der Abarbeitung wirksam werden.

        Tritt der Fehler erst während der Verarbeitung auf, ist ebenfalls ein Blick in den Quelltext die erste Maßnahme, um die Stelle (zumindest grob) bestimmen zu können, bis zu der noch alles funktioniert hat. In dem Fall sollte aber auch PHP einene Meldungstext abgegeben haben, wenn es sich nicht nur um ein Problem mit unvorhergesehenem aber ansonsten korrektem Programmablauf handelt.

        dedlfix.

        1. hi dedlfix

          sry - ich bin noch lange kein programmierer - befasse mich nur gerne mit codes.

          was du beschrieben hast versteh ich leider nicht.

          ( error_reporting auf E_ALL und display_errors auf on )

          wie gesagt bin totaler anfänger - werde mal googlen und schauen ob ich dann deine aussage verstehe.

          wegen der fehlerbestimmung :
          bisher schau ich mir immer die fehlerkonsole vom mozilla an. werde in zukunft nicht mehr "weise seite" schreiben, sondern den fehler genauer beschreiben.

          auf jeden fall vielen dank für die antwort dedlfix.

          gruss micha

          1. Tach!

            was du beschrieben hast versteh ich leider nicht.

            Du darfst auch gern konkret nachfragen. Ich weiß nicht, sondern kann nur schätzen, was du weißt und verstehst und was nicht.

            ( error_reporting auf E_ALL und display_errors auf on )
            wie gesagt bin totaler anfänger - werde mal googlen und schauen ob ich dann deine aussage verstehe.

            Das sind zwei Konfigurationswerte PHPs. Die regeln welche Fehler und Mitteilungen PHP ausgibt und ob es das generell macht oder nicht. Für den Produktivbetrieb ist es nicht sinnvoll, die Besucher mit zu konkreten Meldungen zu belästigen. Während der Entwicklung sind diese beiden Einstellungen aber Gold wert, weil sie auf Probleme hinweisen.

            Man kann diese beiden innerhalb eines Script setzen:

            error_reporting(E_ALL);
            ini_set('display_errors', 1);

            Aber dann wirken sie nur ab diesem Zeitpunkt und wie gesagt nicht auf das Parsen (lediglich für Includes). Deshalb sollte man sie generell setzen. Das ist jedoch je nach Installation unterschiedlich vorzunehmen: http://www.php.net/manual/en/configuration.changes.php

            wegen der fehlerbestimmung :
            bisher schau ich mir immer die fehlerkonsole vom mozilla an. werde in zukunft nicht mehr "weise seite" schreiben, sondern den fehler genauer beschreiben.

            Die Fehlerkonsole bringt dir nur was bei Javascript- oder CSS-Fehlern. Wenn der von dir erzeugten HTML-Code (inklusive Javascript und CSS) nicht deinen eigentlichen Erwartungen entspricht, muss das nicht unbedingt von der Fehlerkonsole bemängelt werden. Deshalb solltest du auch und ncht zuletzt in die Quelltextansicht des Browsers schauen.

            dedlfix.

  2. Hallo,

    <form method="get" action="verarbeiten.php">

    Bitte geben Sie Ihren Namen an : &nbsp;
      <input id="vname" name="vname" type="text" size="30" maxlength="30">
      <br><br>
      Bitte geben Sie Ihre Email an : &nbsp;&nbsp;&nbsp;&nbsp;
      <input id="email" name="email" type="text" size="30" maxlength="30">
      <br><br>
      Bitte geben Sie Ihre Wohnort an :
      <input id="ort" name="ort" type="text" size="30" maxlength="30">
      <br><br>
      <input type="reset" id="clear" name="clear" value="Eingabe l&ouml;schen">&nbsp;
      <input type="submit" id="absenden" name="absenden" value="Absenden">
    </form>

      
    wozu die &nbsp; in Rudeln? Doch nicht etwa um Abstände oder Positionierungen zu erreichen? Denn dafür gibt's CSS.  
    Und das Verst&uuml;mmeln von Umlauten ist auch eine schlechte Angewohnheit.  
      
    `$name = htmlspecialchars ($_GET["vname"]);`{:.language-php}  
      
    Escaping für den HTML-Kontext bei der \_Eingabe\_? Fehler im Konzept.  
      
    
    >     echo"Dein name ist "$name;  
      
    Parse Error. Nutze entweder Variablen-Ersetzung (Variablen im String eingebettet), oder Stringverkettung, oder trenne mehrere Werte mit Komma. Ein Leerzeichen nach dem Keyword wäre auch schön. Nicht zwingend, aber willkommen. Ein Leerzeichen vor der öffnenden Klammer beim Funktionsaufruf (wie oben) ist dagegen sehr eigenartig.  
      
    
    > `if ( empty ($_GET['vname']) == TRUE )`{:.language-php}  
      
    "Wenn es wahr ist, dass empty(...) wahr ist ..."  
    Nicht wirklich, oder?  
      
    Ciao,  
     Martin  
    
    -- 
    [Ich bin im Prüfungsstress](http://community.de.selfhtml.org/zitatesammlung/zitat436), ich darf Scheiße sagen.  
      (Hopsel)  
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    
    1. hi martin

      vielen dank für deine antwort.

      &nbsp; : hab ich halt mal schnell hier zum üben benutzt, zum positionieren nimm ich schon im normal fall die css.

      das mit den umlauten hör ich heute auch das erste mal. was spricht dagegen ?

      $name = htmlspecialchars ($_GET["vname"]);
      wenn ich mit echo die variable ausgebe hat sie den korekten inhalt.

      Escaping für den HTML-Kontext bei der _Eingabe_? Fehler im Konzept.
      sry - verstehe ich nicht.

      variablen ersetzung:
      werde ich mir einprägen - danke.
      du meinst das so oder :
      $text = "Dein name ist ";
      echo $text, $name;

      ( empty ($_GET['vname']) == TRUE )
      hab das so verstanden : ist vname empty true (also ist es wahr das vname leer ist) dann mache folgendes. ist aber anscheinend nicht so und ich denke ich verstehe da mal wieder was falsch.

      gruss micha

      1. $name = htmlspecialchars ($_GET["vname"]);
        wenn ich mit echo die variable ausgebe hat sie den korekten inhalt.

        Escaping für den HTML-Kontext bei der _Eingabe_? Fehler im Konzept.
        sry - verstehe ich nicht.

        Was Martin damit meinte, dass du du das Maskieren für den HTML-Kontext schon vor der Verarbeitung der Daten vollziehst. Das ist der Fehler im Konzept. Die kontextgerechte Maskierung sollte bei dem Kontextwechsel geschehen. Mehr dazu findest du im Wiki.

        Parse Error. Nutze entweder Variablen-Ersetzung (Variablen im String eingebettet), oder Stringverkettung, oder trenne mehrere Werte mit Komma.
        du meinst das so oder :

        Variablenersetzung: echo "Dein Name ist $name";
        Stringverkettung: [code lang?php]echo "Dein Name ist".$name;[/code]
        Trennung mehrerer Werte:

        $text = "Dein name ist ";

        echo $text, $name;

        Ist syntaxbezogen korrekt, wenn du `$text`{:.language-php} allerdings nur ein mal verwendest, lohnt die Speicherung in einer Variable nicht: `echo "Dein Name ist ",$name;`{:.language-php}  
        Mehr dazu im Handbuch unter [Variable parsing](http://php.net/manual/de/language.types.string.php)  
          
          
        
        > ( empty ($\_GET['vname']) == TRUE )  
        > hab das so verstanden : ist vname empty true (also ist es wahr das vname leer ist) dann mache folgendes.  
        
        Hast du richtig verstanden, Martin wollte aber auf etwas anderes hinaus.  
        ~~~php
        if($ausdruck) {  
            code();  
        }
        

        code() wird nur ausgeführt, wenn $ausdruck true ergibt (oder zu true konvertiert wird, mehr dazu im Handbuch)

        if ( empty ($_GET['vname']) == TRUE )
        Das mal ein wenig zerpflückt:
        Ermittelt Rückgabewert von empty() (gehen wir mal im Beispiel davon aus, dass true zurückgegeben wird, dass macht es deutlicher)
        if( TRUE == TRUE )
        Vergleich mit true.
        if( TRUE )
        Code ausführen.

        Jetzt mal den Vergleich mit true weg gelassen:
        if ( empty ($_GET['vname']))
        Rückgabewert ermitteln.
        if ( TRUE )
        Code ausführen.

        Ich glaube das Bedarf keiner weiteren Erklärung.

        MfG
        bubble

        --
        If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
        1. hi bubble & dedlfix

          ihr seid cool.

          vielen dank verstehe jetzt schon mehr, gerade durch bubble seiner leicht zu verstehenden beschreibung.

          habt mir ja jede menge lesestoff gepostet - werde jetzt mal bissl lesen.

          gruss micha

      2. Tach!

        das mit den umlauten hör ich heute auch das erste mal. was spricht dagegen ?

        Neben der besseren Lesbarkeit die Nichtnotwendigkeit, wenn du die verwendete Zeichenkodierung korrekt angegeben hast.

        $name = htmlspecialchars ($_GET["vname"]);
        wenn ich mit echo die variable ausgebe hat sie den korekten inhalt.

        Escaping für den HTML-Kontext bei der _Eingabe_? Fehler im Konzept.
        sry - verstehe ich nicht.

        "Eingabe - Verarbeitung - Ausgabe" heißt ein sehr einfaches Prinzip, das sich bei der Strukturierung bewährt hat. Wenn Daten bereits während der Eingabe oder Verarbeitung für eine bestimmte Ausgebe aufbereitet sind (sprich: zum Beispiel zusätzliche Zeichen für die Maskierung enthalten), kann sich das ungünstig auf die Verarbeitung auswirken, weil diese dann erschwert wird, wenn man nicht mit Rohdaten arbeiten kann. Das Escaping für den jeweiligen Ausgabe-Kontext sollte daher erst kurz vor die Übergabe in diesen Kontext erfolgen. Dann sieht man auch gleich, dass es nicht vergessen wurde.

        variablen ersetzung:
        werde ich mir einprägen - danke.
        du meinst das so oder :
        $text = "Dein name ist ";
        echo $text, $name;

        So kann man das machen, aber die Variable $text bringt für das kleine bisschen Text keinen Vorteil.

        echo "Dein name ist ", $name;

        Wenn die Texte länger werden und die Einsetzungen mitten in ihnen erfolgen sollen, bringt (s)printf() einen Übersichtlichkeitsvorteil.

        ( empty ($_GET['vname']) == TRUE )
        hab das so verstanden : ist vname empty true (also ist es wahr das vname leer ist) dann mache folgendes. ist aber anscheinend nicht so und ich denke ich verstehe da mal wieder was falsch.

        Das Ergebnis von empty() ist bereits true oder false. Es noch einmal dagegen zu testen, nur um wieder true oder false zu erhalten ist sinnlos. Verwende var_dump(), überzeug dich damit selbst, was das jeweilige Ergebnis ist.

        var_dump(empty($_GET['vname']));
        var_dump(empty($_GET['vname']) == true);

        dedlfix.

  3. hi leuts

    hab jetzt so gemacht und es funzt - erstmal erledigt - danke für eure hilfe.

      
    $name =  $_GET['vname'];  
    $fehler1 = 'Das Feld Name muss ausgefüllt sein !';  
    $text1 = 'Dein Name ist ';  
      
    if ( $name == "" )  
    {  
    echo $fehler1;  
    }  
    else  
    {  
    echo $text1, $name;  
    }  
    
    

    gruss micha

    1. Tach!

      hab jetzt so gemacht und es funzt - erstmal erledigt - danke für eure hilfe.

      So ist das noch nicht erledigt, sondern falsch.

      $name =  $_GET['vname'];
      $text1 = 'Dein Name ist ';
      echo $text1, $name;

      Was ist, wenn mein Name <script>alert('Ätsch!')</script> wäre?

      dedlfix.

      1. Hi dedlfix,

        Was ist, wenn mein Name <script>alert('Ätsch!')</script> wäre?

        Dann würde Deine Unterschrift beschissen aussehen! ;)

        Mit freundlichen Grüßen

        Hugo Egon Balder

    2. હેલો

       $name =  $_GET['vname'];  
      
      

      $_GET['vname'] brauchst du nicht umkopieren, auf den kannst du auch direkt zugreifen.

      if (empty($_GET['vname'])) {  
        # Fehler  
      } else if (isset($_GET['vname'])) { # else nur, wenn $_GET['vname'] verfügbar ist, nicht immer  
        # kein Fehler  
      }
      

      બાય

      --
       .
      ..:
      1. Tach!

        if (empty($_GET['vname'])) {

        # Fehler
        } else if (isset($_GET['vname'])) { # else nur, wenn $_GET['vname'] verfügbar ist, nicht immer
          # kein Fehler
        }

          
        Eins von beiden reicht. Beide zu verwenden ist überflüssig. In Bezug auf $\_GET/POST gilt: wenn !empty() true ergibt, ergibt isset() ebenfalls immer true. (Von isset() ausgehend ist es umgedreht jedoch nicht so.)  
          
        Wenn man nur die Existenz sicherstellen will, dann reicht isset(). Wenn man zudem eine Eingabe haben möchte, reicht !empty(). Ausnahme ist die Eingabe von 0, die wäre auch als empty erkannt worden.  
          
          
        dedlfix.
        
        1. હેલો

          if (empty($_GET['vname'])) {  
            # Fehler  
          } else if (isset($_GET['vname'])) { # else nur, wenn $_GET['vname'] verfügbar ist, nicht immer  
             # kein Fehler  
          }
          

          Eins von beiden reicht. Beide zu verwenden ist überflüssig. In Bezug auf $_GET/POST gilt: wenn !empty() true ergibt, ergibt isset() ebenfalls immer true. (Von isset() ausgehend ist es umgedreht jedoch nicht so.)

          Stimmt natürlich. Ich weiss nicht, wie ich manchmal auf solche Klöppse komm. Zumal ich es immer ohne den zusätzlichen if-Zweig mache. Danke für die Korrektur,

          બાય

          --
           .
          ..: