Alex: Problem mit dem option selected

Hi,
ich möchte auf meiner Seite ein Script zum Bewerten von Downloads
verwenden. Ähnlich wie bei Amazon. Mein Problem ist das bei dem
Dropdownmenu bei dem man die Bewertung auswählt "extrem schlecht" der
Wert ist, der an erster Stelle steht. Wenn also jemand nicht richtig
hinschaut bewertet er ausversehen das Download schlechter als er will.
Hier der Code aus dem Script:
print "<font size="1" face="Verdana">Bewertung:</font></td><td align="center"><select name="rating" size="1" style="font-family: Verdana; font-size: 8pt">";
    my @opinions = ("sehr schlecht", "schlecht", "durchschnittlich", "gut", "sehr gut", "extrem gut");
    for ($i = 0; $i <= $maxRating; $i++){
     print "<option value="$i">$opinions[$i]</option>";
    }
    print "</select></td></tr>";

Ich weis das man in HTML mit <option selected="selected"></option> die
Option festlegen kann die am Anfang ausgewählt ist. Nur wie mache ich
das in dem Script?

Danke schon mal für eure Hilfe.

Gruß, Alex

  1. Hallo,

    indem du dem Skript mitteilst, wann er
    "<option selected>" einsetzen soll.
    Also wenn i den Wert hat, der dem
    von dir gewünschten Text entspricht.

    if (i==ArrayIndex[Text])
    ...

    Grüße,

    Dr Z.

    1. Hallo,

      indem du dem Skript mitteilst, wann er
      "<option selected>" einsetzen soll.
      Also wenn i den Wert hat, der dem
      von dir gewünschten Text entspricht.

      if (i==ArrayIndex[Text])
      ...

      Grüße,

      Dr Z.

      Danke für deinen Tip. Ich bin leider nicht so fit mit solchen Sachen.
      Es hat schon allein ein paar Monate gedauert nur das Design des Scripts
      an meine Bedürfnisse anzupassen. Könntest du mir den Code vieleicht so
      abändern das "extrem gut" Standard ist? Ich verstehe nicht ganz wo
      "if (i==ArrayIndex[Text]) eingefügt werden muss.

      Gruß Alex

      1. Hallo,

        nein - ich kann kein Perl ;-).

        Die vorher angegebene Zeile, also die Bedingung
        musst du inklusive dem was das Skript dann
        machen soll in der Schleife unterbringen.

        for ($i = 0; $i <= $maxRating; $i++){

        if(Bedingung)
           {
              print "mach jetzt genau das";
           }

        print "<option value="$i">$opinions[$i]</option>";
            }

        Woher kommt eigentlich $maxRating? Ich hoffe es
        gilt $maxRating = 5.

        Grüße,

        Dr Z.

        1. Hallo,

          nein - ich kann kein Perl ;-).

          Die vorher angegebene Zeile, also die Bedingung
          musst du inklusive dem was das Skript dann
          machen soll in der Schleife unterbringen.

          for ($i = 0; $i <= $maxRating; $i++){

          if(Bedingung)
             {
                print "mach jetzt genau das";
             }
               print "<option value="$i">$opinions[$i]</option>";
              }

          Woher kommt eigentlich $maxRating? Ich hoffe es
          gilt $maxRating = 5.

          Grüße,

          Dr Z.

          Hi, das is ne sehr gute frage ich denke aber auch $maxRating = 5.
          Aber ich komme irgentwie kein Stück weiter, weil ich auch kein Perl kann.. Ich komm einfach nicht drauf, wie ich den Code ändern muss. Ich hab gerade noch ein bisschen rumprobiert, aber dann ging das ganze gar nicht mehr.

          gruß, alex

          1. hi,

            versuchs mal so:

              
                 my @opinions = ("sehr schlecht", "schlecht", "durchschnittlich", "gut", "sehr gut", "extrem gut");  
                 mz $defaultValue = 2;    # index des wertes der vorselektiert sein soll (hier 2 für durchschnittlich)  
              
                 for ($i = 0; $i < @opinions; $i++)  
                 {  
                   if ( $i == $defaultValue )  
                   {  
                       print "<option value=\"$i\" selected>$opinions[$i]</option>";  
                   }  
                   else  
                   {  
                      print "<option value=\"$i\">$opinions[$i]</option>";  
                   }  
                 }  
            
            

            schönen sonntag noch,
            steckl

            1. versuchs mal so:

              my @opinions = ("sehr schlecht", "schlecht", "durchschnittlich", "gut", "sehr gut", "extrem gut");
                   mz $defaultValue = 2;    # index des wertes der vorselektiert sein soll (hier 2 für durchschnittlich)

              for ($i = 0; $i < @opinions; $i++)
                   {
                     if ( $i == $defaultValue )
                     {
                         print "<option value="$i" selected>$opinions[$i]</option>";
                     }
                     else
                     {
                        print "<option value="$i">$opinions[$i]</option>";
                     }
                   }

                
              Wie [schon gezeigt](https://forum.selfhtml.org/?t=136508&m=886679), das ist ein Einzeiler mit dem CGI Modul, eigentlich fast immer in einem CGI Programm gebraucht wird.  
                
              
              >   
              > schönen sonntag noch,  
              > steckl  
              
              Struppi.
              
              -- 
              [Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)
              
            2. hi,

              versuchs mal so:

              my @opinions = ("sehr schlecht", "schlecht", "durchschnittlich", "gut", "sehr gut", "extrem gut");
                   mz $defaultValue = 2;    # index des wertes der vorselektiert sein soll (hier 2 für durchschnittlich)

              for ($i = 0; $i < @opinions; $i++)
                   {
                     if ( $i == $defaultValue )
                     {
                         print "<option value="$i" selected>$opinions[$i]</option>";
                     }
                     else
                     {
                        print "<option value="$i">$opinions[$i]</option>";
                     }
                   }

              
              >   
              > schönen sonntag noch,  
              > steckl  
                
              Hi,  
              ich habe deinen Code gerade einmal ausprobiert. Jetzt wird leider  
              das Dropdownmenu gar nicht mehr angezeigt und alles was im Formular  
              hinter dem Dropdown ist auch nicht mehr. Könnte ich dir vieleicht  
              die ganze Datei mailen, das du dir das mal anschaust? Ich glaube dein  
              Ansatz ist richtig.  
                
              Gruß, Alex  
                
              An Struppi:  
              Ich glaube so kann ich das nicht machen. Ich will ja kein neues script schreiben, sondern lediglich ein vorhandenes Freewarescript  
              anpassen.
              
              1. Ich glaube so kann ich das nicht machen. Ich will ja kein neues script schreiben, sondern lediglich ein vorhandenes Freewarescript
                anpassen.

                und das hat nicht irgendwo ein use CGI stehen?

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. Ich glaube so kann ich das nicht machen. Ich will ja kein neues script schreiben, sondern lediglich ein vorhandenes Freewarescript
                  anpassen.

                  und das hat nicht irgendwo ein use CGI stehen?

                  Struppi.

                  Nein nirgentwo ein CGI USE..

                  Gruß, Alex

                  1. und das hat nicht irgendwo ein use CGI stehen?

                    Struppi.

                    Nein nirgentwo ein CGI USE..

                    Das wär auch merkwürdig, wenn muss es heißen use CGI;

                    Aber wenn das Skript das Modul nicht nutzt, ist das seltsam, entweder ist es uralt (vor 1998) oder es nutzt ein Template System (so sieht der Quellcode den man bisher sah nicht aus) oder schlecht geschrieben (am wahrscheinlichsten)

                    Struppi.

                    --
                    Javascript ist toll (Perl auch!)
              2. morgen

                versuchs mal so:

                print "<font size="1" face="Verdana">Bewertung:</font></td><td align="center"><select name="rating" size="1" style="font-family: Verdana; font-size: 8pt">";

                my @opinions = ("sehr schlecht", "schlecht", "durchschnittlich", "gut", "sehr gut", "extrem gut");
                     mz $defaultValue = 2;    # index des wertes der vorselektiert sein soll (hier 2 für durchschnittlich)

                for ($i = 0; $i < @opinions; $i++)
                     {
                       if ( $i == $defaultValue )
                       {
                           print "<option value="$i" selected>$opinions[$i]</option>";
                       }
                       else
                       {
                          print "<option value="$i">$opinions[$i]</option>";
                       }
                     }

                print "</select></td></tr>";

                
                > >   
                  
                
                > Hi,  
                > ich habe deinen Code gerade einmal ausprobiert. Jetzt wird leider  
                > das Dropdownmenu gar nicht mehr angezeigt und alles was im Formular  
                > hinter dem Dropdown ist auch nicht mehr. Könnte ich dir vieleicht  
                > die ganze Datei mailen, das du dir das mal anschaust? Ich glaube dein  
                > Ansatz ist richtig.  
                  
                du musst das  
                print "<font size=\"1\" face=\"Verdana\">Bewertung:</font></td><td align=\"center\"><select name=\"rating\" size=\"1\" style=\"font-family: Verdana; font-size: 8pt\">";  
                davor, und das  
                print "</select></td></tr>";  
                danach im script lassen.  
                  
                mfG,  
                steckl
                
                1. morgen

                  versuchs mal so:

                  print "<font size="1" face="Verdana">Bewertung:</font></td><td align="center"><select name="rating" size="1" style="font-family: Verdana; font-size: 8pt">";

                  my @opinions = ("sehr schlecht", "schlecht", "durchschnittlich", "gut", "sehr gut", "extrem gut");
                       mz $defaultValue = 2;    # index des wertes der vorselektiert sein soll (hier 2 für durchschnittlich)

                  for ($i = 0; $i < @opinions; $i++)
                       {
                         if ( $i == $defaultValue )
                         {
                             print "<option value="$i" selected>$opinions[$i]</option>";
                         }
                         else
                         {
                            print "<option value="$i">$opinions[$i]</option>";
                         }
                       }
                  print "</select></td></tr>";

                  
                  > > >   
                  >   
                  > > Hi,  
                  > > ich habe deinen Code gerade einmal ausprobiert. Jetzt wird leider  
                  > > das Dropdownmenu gar nicht mehr angezeigt und alles was im Formular  
                  > > hinter dem Dropdown ist auch nicht mehr. Könnte ich dir vieleicht  
                  > > die ganze Datei mailen, das du dir das mal anschaust? Ich glaube dein  
                  > > Ansatz ist richtig.  
                  >   
                  > du musst das  
                  > print "<font size=\"1\" face=\"Verdana\">Bewertung:</font></td><td align=\"center\"><select name=\"rating\" size=\"1\" style=\"font-family: Verdana; font-size: 8pt\">";  
                  > davor, und das  
                  > print "</select></td></tr>";  
                  > danach im script lassen.  
                  >   
                  > mfG,  
                  > steckl  
                    
                    
                  Also ich habe deinen Code kopiert, habe den Code im Script markiert und dann den Code eingefügt. Dann habe ich die ">>" weg gemacht. Das fenster vom Script öffnet sich. Aber das Dropdownfeld ist immernoch leer und danach höert das ganze Formular auf.  
                    
                  gruß, Alex
                  
                  1. Also ich habe deinen Code kopiert, habe den Code im Script markiert und dann den Code eingefügt. Dann habe ich die ">>" weg gemacht. Das fenster vom Script öffnet sich. Aber das Dropdownfeld ist immernoch leer und danach höert das ganze Formular auf.

                    Meine güte dann probier doch mal:

                      
                    my @opinions = ("sehr schlecht", "schlecht", "durchschnittlich", "gut", "sehr gut", "extrem gut");  
                    print CGI::popup_menu(  
                    -values => \@opinions,  
                    -default => 'gut'  
                    );  
                    
                    

                    Struppi.

                    --
                    Javascript ist toll (Perl auch!)
                    1. Also ich habe deinen Code kopiert, habe den Code im Script markiert und dann den Code eingefügt. Dann habe ich die ">>" weg gemacht. Das fenster vom Script öffnet sich. Aber das Dropdownfeld ist immernoch leer und danach höert das ganze Formular auf.

                      Meine güte dann probier doch mal:

                      my @opinions = ("sehr schlecht", "schlecht", "durchschnittlich", "gut", "sehr gut", "extrem gut");
                      print CGI::popup_menu(
                      -values => @opinions,
                      -default => 'gut'
                      );

                      
                      >   
                      >   
                      > Struppi.  
                        
                      Das verursacht das selbe Problem wie Steckel's idee. Das Dropdown ist  
                      leer, und danach hört das Fomrmular einfach aus.
                      
                      1. Hell-O!

                        Das verursacht das selbe Problem wie Steckel's idee. Das Dropdown ist leer, und danach hört das Fomrmular einfach aus.

                        Dann liegt der Fehler nicht in dem Stückchen Code sondern woanders, denn dieser tut genau das, was du willst. Gibt denn das Errorlog irgendwas her? Wie sieht denn der fehlerhafte (?) HTML-Code aus, der im Browser ankommt?

                        Siechfred

                        --
                        Ich bin strenggenommen auch nur interessierter Laie. (molily)
                        Welcome To Carcass Cuntry || Steuerfreie Geburtsbeihilfen?  || RT 221 Erfurt-Altstadt i.V.
                        1. Hell-O!

                          Das verursacht das selbe Problem wie Steckel's idee. Das Dropdown ist leer, und danach hört das Fomrmular einfach aus.

                          Dann liegt der Fehler nicht in dem Stückchen Code sondern woanders, denn dieser tut genau das, was du willst. Gibt denn das Errorlog irgendwas her? Wie sieht denn der fehlerhafte (?) HTML-Code aus, der im Browser ankommt?

                          Siechfred

                          Es kommt kein Fehler. Es fehlt einfach der Rest von dem Formular und der
                          Inhalt des Dropdowns. An dem Script funktioniert an sonsten alles enwandfrei. Es kann also kein anderes Fehler sein. soll ich notfalls den ganzen Code hier posten? Dieser wäre ziemlich lange.

                          1. hi,

                            Das verursacht das selbe Problem wie Steckel's idee. Das Dropdown ist leer, und danach hört das Fomrmular einfach aus.

                            Dann liegt der Fehler nicht in dem Stückchen Code sondern woanders, denn dieser tut genau das, was du willst. Gibt denn das Errorlog irgendwas her? Wie sieht denn der fehlerhafte (?) HTML-Code aus, der im Browser ankommt?
                            Siechfred

                            Es kommt kein Fehler. Es fehlt einfach der Rest von dem Formular und der
                            Inhalt des Dropdowns. An dem Script funktioniert an sonsten alles enwandfrei. Es kann also kein anderes Fehler sein. soll ich notfalls den ganzen Code hier posten? Dieser wäre ziemlich lange.

                            Poste lieber (wie siechfred schon geschrieben hat) erstmal den HTML-Code, den dein Script erzeugt.

                            mfG, steckl

                            1.   
                              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
                              <html xmlns="http://www.w3.org/1999/xhtml">  
                              <head>  
                              <meta http-equiv="Content-Type"content="text/html; charset=iso-8859-1"/>  
                              <script src="http://1.2.3.4/bmi-int-js/bmi.js"language="javascript"></script>  
                              <title>Fastlane - Intro</title>  
                              </head>  
                              <body>  
                              <body link="#000000" vlink="#000000" alink="#000000">  
                              <center><font size="2" face="Verdana, Arial, Helvetica, sans-serif">  
                              <b>Fastlane - Intro</b></font>  
                              <br>  
                              <font face="Verdana, Arial, Helvetica, sans-serif" size="1">Durchschnittliche Bewertung:</font>  
                              <img src="http://www.duncman.de/images/criticalreviews/star.gif"><img src="http://www.duncman.de/images/criticalreviews/star.gif"><img src="http://www.duncman.de/images/criticalreviews/star.gif"><img src="http://www.duncman.de/images/criticalreviews/star.gif"><img src="http://www.duncman.de/images/criticalreviews/star.gif"><br>  
                              <font face="Verdana, Arial, Helvetica, sans-serif" size="1">Wie findest Du den Track? Bewerte ihn doch einfach!</font>  
                              <br>  
                              <center><b></b><br><br><form action="criticalreviews.pl" method="POST">  
                              <table border="0" cellpadding="0" cellspacing="0" width="260px"><tr><td align="left" width="80px">  
                              <font size="1" face="Verdana">Name:</font></td><td align="center"><input type="text" name="reviewer" value="" size="20" maxlength="15" style="font-family: Verdana; font-size: 8pt"></td>  
                              </tr><tr><td align="left"><font size="1" face="Verdana">Bewertung:</font></td><td align="center">  
                              <select name="rating" size="1" style="font-family: Verdana; font-size: 8pt">  
                              
                              

                              So, das ist der Quelltext der seite.
                              Gruß, Alex

                              1. hi,

                                So, das ist der Quelltext der seite.

                                sieht aus, als ob dein script an der stelle mit dem select-Feld abbricht.
                                es waere vielleicht hilfreich, wenn du die warnings einschaltest ( -w am Ende der ersten Zeile des scripts dranhaengen) und am Anfang des Scripts
                                use strict;
                                und
                                use CGI::Carp qw(fatalsToBrowser);
                                schreiben wuerdest, damit dir eventuelle Fehler angezeigt werden.

                                gibt es von deinem Server ein error-logfile? hier koennten auch nuetzliche informationen stehen.

                                ausserdem steht da noch
                                mz $defaultValue = 2;    # index des wertes der vorselektiert sein soll (hier 2 für durchschnittlich)
                                wobei das 'mz' ein tippfehler ist und 'my' heissen muss.

                                mfG,
                                steckl

                                1. Hi nochmal an alle die mir geholfen haben,
                                  jetzt klappt es. Ich habe das 'mz' in ein 'my' geändert und
                                  alles funktioniert so wie ich es mir vorgestellt habe.
                                  Vielen Dank an alle! Ihr wart eine große Hilfe.

                                  Gruß, Alex

                      2. my @opinions = ("sehr schlecht", "schlecht", "durchschnittlich", "gut", "sehr gut", "extrem gut");
                        print CGI::popup_menu(
                        -values => @opinions,
                        -default => 'gut'
                        );

                        
                        > >   
                        > >   
                        > > Struppi.  
                        >   
                        > Das verursacht das selbe Problem wie Steckel's idee. Das Dropdown ist  
                        > leer, und danach hört das Fomrmular einfach aus.  
                          
                        Wenn ich einfach den Code da oben ausführe gibt mir Perl auf der Konsole folgendes aus:  
                        ~~~html
                          
                        <select name="select">  
                        <option value="sehr schlecht">sehr schlecht</option>  
                        <option value="schlecht">schlecht</option>  
                        <option value="durchschnittlich">durchschnittlich</option>  
                        <option selected="selected" value="gut">gut</option>  
                        <option value="sehr gut">sehr gut</option>  
                        <option value="extrem gut">extrem gut</option>  
                        </select>  
                        
                        

                        Du hast irgendwo einen anderen Fehler.

                        Struppi.

                        --
                        Javascript ist toll (Perl auch!)
      2. Nochmal Hallo,

        bin noch nicht ganz wach...

        Ausserdem darf dein Skript die bisherige
        Ausgabe nur dann machen, wenn die Bedingung
        nicht wahr ist - else also

        Grüße,

        Dr. Z

  2. hi,

    Mein Problem ist das bei dem Dropdownmenu bei dem man die Bewertung auswählt "extrem schlecht" der Wert ist, der an erster Stelle steht. Wenn also jemand nicht richtig hinschaut bewertet er ausversehen das Download schlechter als er will.

    Wenn du das änderst, bewertet also nachher jemand, der nicht genau hinschaut, aus Versehen einen Download besser als er wollte.
    Es geht dir also nur um ein für dich psychologisch angenehmereres Ergebnis?

    my @opinions = ("sehr schlecht", "schlecht", "durchschnittlich", "gut", "sehr gut", "extrem gut");
        for ($i = 0; $i <= $maxRating; $i++){
         print "<option value="$i">$opinions[$i]</option>";
        }

    Einfach die Reihenfolge umdrehen wäre hier vermutlich keine gute Idee - dann ändern sich zwar die Beschriftungen, aber die Option-Values bleiben gleich - dann würde für "extrem gut" der Wert 0 übergeben, und dein verarbeitendes Script würde das immer noch als "sehr schlecht" werten.

    Du könntest aber die Reihenfolge der opionins umdrehen - und dann in der Ausgabeschleife als Value (5-$i) ausgeben. Dann sollten m.E. angezeitge Bewertung und übergebener Wert wieder zueinander passen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. print "<font size="1" face="Verdana">Bewertung:</font></td><td align="center"><select name="rating" size="1" style="font-family: Verdana; font-size: 8pt">";
        my @opinions = ("sehr schlecht", "schlecht", "durchschnittlich", "gut", "sehr gut", "extrem gut");
        for ($i = 0; $i <= $maxRating; $i++){
         print "<option value="$i">$opinions[$i]</option>";
        }
        print "</select></td></tr>";

    Mal abgesehen von dem nicht mehr erwünschten Font-tag im HTML, benutzt du nicht das CGI Modul?

      
    use CGI;  
    my @opinions = ("sehr schlecht", "schlecht", "durchschnittlich", "gut", "sehr gut", "extrem gut");  
    print CGI::popup_menu(  
    -values => \@opinions,  
    -default => 'gut'  
    );  
    
    

    Struppi.

    --
    Javascript ist toll (Perl auch!)