Announcement

Collapse
No announcement yet.

Inhalt der Dropdown übergeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Inhalt der Dropdown übergeben

    Hallo Leute,

    PHP Code:
    if(isset($_SESSION['login']) && $_SESSION['login'] == 1) {

    $data = array();                        
    $userdatei fopen("user.txt","r");                
    while(!
    feof($userdatei))                 
       {
       
    $zeile fgets($userdatei,1024);        
       
    $data[] = $zeile;                    
       }
    fclose($userdatei);                    
    echo 
    '<select name="pro">';             
    foreach(
    $data as $a=>$b){                
       echo 
    '<option value="'.$b.'">'.$b.'</option>';
    }
    echo 
    '</select>'
    Aus einer Textdatei wird hier eine Dropdown ausgelesen.
    Inhalt der Textdatei sind einfach nur Namen.

    Ich möchte jetzt z.B. sagen:

    PHP Code:
    echo "Sie haben den Namen $pro ausgewählt" 
    Also der ausgewählte Name der Textdatei soll wo ausgegeben werden. Ich weiß aber nicht wie ich den anspreche. Habe da alle Variablen durchprobiert. Aber das funktioniert nicht ganz. Was muss ich da tun?

    Probiert hab ichs dann jetzt so mit einem Affenformular:

    PHP Code:

    <form action="bla.php" method="post">
    <select name="mydropdown">
    <option value="1">Wert 1</option>
    <option>Wert 2</option>
    </select>
    </form>




    <?php
    echo 'Sie haben ' $_POST['mydropdown'] . ' gewählt';
    ?>
    Und so möchte ich es eben auch mit dem obigen Beispiel, also das alles mit einer .txt Datei machen, verstehe aber garnicht wie ich da machen soll??


    Danke!
    Alexander

  • #2
    Hallo,

    Da PHP eine serverseitige Sprache ist und eine HTML-Dokument lokal dargstellt wird, wirst Du wohl auf eine neue Seite verzweigen müssen, die den ausgewählten Namen anzeigt.
    Möchtest Du, daß dies automatisch nach dem Auswählen passiert, könntest Du das OnChange-Ereignis der SelectBox per JavaScript abfragen.

    Zudem bin ich mir grad nicht sicher, ob die Eigenschaft "title" oder "name" als Wert der SelectBox an die neue Seite übergeben wird.
    Im Zweifelsfall trag beide ein:
    <SELECT name="pro" title="pro"> ... </SELECT>

    Dann sollte es grob funktionieren.
    PHP rocks!
    Eine Initiative der PHP Community

    Comment


    • #3
      Das was an die nächste Seite übergeben wird (hängt von der Auswahl ab) ist der "value", also so wie Du es oben schon gemacht hast. Ich kann mich nur nie entscheiden ob die ID die im nächsten Script abgefrag werden kann die "id" oder der "name" ist, deshalb schreib ich immer beides hin und wenn ich eins ändere, dann ändere ich das andere mit.

      Schau dir mal an welches PHP dein Server unterstützt. Wenns PHP5 ist, ist dein $pro richtig. Wenns PHP4 ist, dann müsste es $_POST['pro'] sein.
      PHP Code:
      <?php
      echo 'http://acs-it-worx.de/';
      echo 
      'http://www.youtube.com/user/ACSITWorx/'// mein YouTube Kanal
      echo '-----------------------------------------------------------------';
      echo 
      'http://www.autoservice-asberg.de/';
      ?>

      Comment


      • #4
        Ja, sorry!

        "pro" ist sozusagen der Variblenname und das value der ausgewählten <option ... >...</option> natürlich der Wert!

        Wenn Du in dem neuen PHP-Dokument als erstes ein extract($_REQUEST) machst, kannst Du auch unter PHP 4.x Dein $pro weiterverwenden.
        Dabei sollte man aber aufpassen, daß man nicht zufällig in dem Script schon eine Variable gleichen namens verwendet.
        Dies kann man mit extract($_REQUEST,"req_") verhindern. Dann wäre es allerdings $req_pro anstatt $pro.
        PHP rocks!
        Eine Initiative der PHP Community

        Comment


        • #5
          Wuaaa, wenn ich das hier lese, dann krieg ich Gänsehaut. Sorry, ich will mich nicht als Besserwisser aufspielen, aber extract($_REQUEST) ist der größte Fehler den man machen kann und ich erkläre euch auch warum.

          Sowohl PHP4, als auch PHP5 kennen $_POST,$_GET,$_SESSION,$_COOKIE, etc. und auch beide beherrschen register_globals, das heisst das die Übergebenen Schlüssel aus den o.g. Arrays direkt als "normale" Variable zur Verfügung stehen, also statt $_POST['submit'] direkt $submit.

          Der einzige Unterschied zwischen PHP4 und PHP5 liegt hierbei darin, das in der php.ini bei PHP5 register_globals standardmäßig auf off steht, das war in PHP4 leider noch nicht so.

          Nun kann man ja denken, das ist doch schön Komfortabel, aber das ganze ist ganz einfach eine riesige Einladung zu Sicherheitslücken. Es können durch register_globals, z.B. einfach durch Anhängen von GET-Parametern an die Url, Variablen gesetzt werden, die evtl. in eurem Script schon genutzt werden, bevor ihr denen einen Wert zuweist und somit das Verhalten eures Scripts so stark beeinflussen.

          Ein extract($_REQUEST) ist nichts anderes, als ein nachbau von register_globals und somit genau so gefährlich. Bei extract($_REQUEST,"req_") ist die Gefahr zwar nicht mehr so groß, aber das ganze ist sinnlos, da ich genau so die definierten Variablen nutzen kann. Ist doch egal ob ich jetzt $post_name oder $_POST['name'] schreibe, das zweite ist so vorgesehen und auch schön auffällig, das es sich hierbei um Daten von aussen handelt und man diese unbedingt validieren muss.

          Und zurück zu den Formularelementen: Generell wird im Browser der Name, als Key mitgesendet, außnahmen mit id wären mir jetzt nicht bekannt und title schon gar nicht.

          Comment


          • #6
            Originally posted by cycap
            ...aber extract($_REQUEST) ist der größte Fehler den man machen kann und ich erkläre euch auch warum.
            OK...
            Originally posted by cycap
            Ein extract($_REQUEST) ist nichts anderes, als ein nachbau von register_globals und somit genau so gefährlich. Bei extract($_REQUEST,"req_") ist die Gefahr zwar nicht mehr so groß, aber das ganze ist sinnlos, da ich genau so die definierten Variablen nutzen kann. Ist doch egal ob ich jetzt $post_name oder $_POST['name'] schreibe
            Das ist alles richtig!

            Ich denke aber Deine Gänsehaut würdest Du bei jeder Variante bekommen.
            Du hast eigentlich auf den Punkt gezeigt, daß jede der Varianten eine Sicherheitslücke aufweist und da stimme ich Dir zu!

            Doch nur weil Du eine andere ebenfalls "unsichere" Variante bevorzugst, muß man ja nicht gleich Gänsehaut bei anderen Lösungen bekommen.
            es geht sowohl über $_POST[...], als auch über extract(...).
            Daß beides "gefährlich" sein kann sollte man natürlich wissen, aber auf irgendeine Art muß man ja nunmal an die Werte rankommen...
            (und sei mir bitte nicht böse, aber warum ist extract() der größte Fehler, den man machen kann, wenn es doch lt. deiner aussage ein nachbau, also das gleiche wie register_globals ist)
            Originally posted by cycap
            Und zurück zu den Formularelementen: Generell wird im Browser der Name, als Key mitgesendet, außnahmen mit id wären mir jetzt nicht bekannt und title schon gar nicht.
            Das stimmt! Hatte ich nur so ausm Gedächtnis gschüttelt, sorry...
            PHP rocks!
            Eine Initiative der PHP Community

            Comment


            • #7
              Sicher, das extract mit dem Präfix ist das gleiche wie $_POST etc., aber überflüssig... du hast damit alle Daten doppelt und darin sehe ich keinen Sinn...

              Das extract ohne Präfix ist jedoch ein Nachbau von register_globals und ich wollte eigentlich klar machen das das eine gaaanz schlecht Idee ist, es wurde auch nicht umsonst in PHP5 standardmäßig auf off gesetzt.

              Hier ein schöner Artikel zu register_globals (und damit auch zu dem extract ohne Präfix) der die Problematik nochmal genauer erklärt: http://www.openwebboard.org/Tutorial...ist_das_1.html

              Wenn du den gelesen hast ist dir hoffentlich klar warum ich Gänsehaut bekomme wenn einem Anfänger soetwas geraten wird

              Comment


              • #8
                @cycap
                Ich hatte Dir bereits Recht gegeben
                Wollte nur darauf hinweisen, daß alles sachlich geschrieben werden kann.
                Dann hält auc keiner irgendjemanden für einen "Besserwisser"...


                ABER: Wir schweifen vom Thema ab... !!!
                Deshalb würde ich das gerne beenden...
                PHP rocks!
                Eine Initiative der PHP Community

                Comment


                • #9
                  Ich wollt auch nur meine Gänsehaut erklären

                  Aber du hast Recht, zurück zum Thema: Wo ist das Problem? Alles was du brauchst steht doch schon im Ausgangspost? Wo genau hast du die schwierigkeit beide Codes miteinander zu verbinden?

                  Comment


                  • #10
                    Ich vermute die Problematik liegt im allgemeinen Verständnis von PHP.
                    Nichts, was man nicht mit RTFM lösen könnte.

                    Allerdings glaube ich auch, daß das Problem nicht mehr aktuell ist, denn der Verfasser des Themas hat sich seit einem Monat nicht mehr dazu geäußert.

                    So denn, ich bin raus...
                    PHP rocks!
                    Eine Initiative der PHP Community

                    Comment

                    Working...
                    X