Probs mit Checkboxen im Formular

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probs mit Checkboxen im Formular

    Howdie Folks,

    es geht um ein Script, das einen Ordner ausliest und den Inhalt als Checkboxen in ein Formular schreibt. Dort kann ausgewählt werden und die Dateien werden als Mail-Attachment versendet.
    Ein weiteres Feature des Scripts ist, daß man auch über eine HTML-Seite eine Datei anfordern kann. Das geht so:
    Code:
     
    <form action="formular.php" method="post">
    <input type="hidden" name="datei" value="Info_als_PDF.pdf">
    <input type="submit" value="Will ich haben!">
    </form>
    Ich möchte hier aber auch mehrere Dateien übergeben können und kriege das nicht gebacken. Es wird immer nur eine übergeben, auch wenn ich mehrere hidden - inputs einsetzte. Man müßte vielleicht hier den Dateien Nummern geben, und die dann im Formular in ein Array schreiben, für dessen Inhalt dann checked eingefügt wird.

    Auf der Formular Seite sieht das ganze so aus:
    PHP-Code:
    $folder opendir($ordner);
    while(
    $_file readdir($folder)) {

        if(!
    is_dir($_file) && $_file != "." && $_file != ".." ) {

            if(
    $_file == $HTTP_POST_VARS["datei"])  {
               
    $file substr$_file0strrpos$_file'.' ) );  // Name vor Punkt abschneiden
               
    $file ereg_replace("_" " " $file);              // Unterstrich ersetzen
               
    $file str_pad($file20 "*" );                    // Name mit Zeichen auffüllen
               
    $file str_replace("*""&nbsp;" $file );          // Zeichen durch &nbsp; ersetzen
               
    echo " <nobr><input type=checkbox name='datei[]' checked  value="$_file .">";
               echo 
    " &nbsp;"$file ."&nbsp;&nbsp;&nbsp;</nobr>";
               }
            else{
               
    $file substr$_file0strrpos$_file'.' ) );  // Name vor Punkt abschneiden
               
    $file ereg_replace("_" " " $file);              // Unterstrich ersetzen
               
    $file str_pad($file20 "*" );                    // Name mit Zeichen auffüllen
               
    $file str_replace("*""&nbsp;" $file );          // Zeichen durch &nbsp; ersetzen
               
    echo " <nobr><input type=checkbox name='datei[]' value="$_file .">";
               echo 
    " &nbsp;"$file ."&nbsp;&nbsp;&nbsp;</nobr>";
              }
           }
       }
    }

    closedir($folder); 
    Mein Problem ist, daß das Script die gesetzten Haken nach Durchlaufen einer Prüfschleife vergessen hat.
    Die Prüfschleife sieht so aus.
    PHP-Code:
    if ($ac == 'send'){
      if(empty(
    $HTTP_POST_VARS["datei"])) {
       echo 
    "Es wurde nichts ausgewählt!"
     }

    Ich hatte jetzt schonmal was getestet, indem ich jeder Datei einen Counter automatisch verpasst habe, dadurch gingen die gesetzten Haken nicht verloren, ich konnte aber auch von der HTML-Seite aus keine Dateien als Parameter mehr übergeben.
    Das ist alles ungeheuer kompliziert (für mich jedenfalls), und ich würde mich freuen, wenn mir jemand ein bischen auf die Sprünge hilft.

    So long,
    Cowboy

  • #2
    Re: Probs mit Checkboxen im Formular

    mach mal an dieser stelle
    <input type="hidden" name="datei" value="Info_als_PDF.pdf">
    den feldnamen als name="datei[]", dann erhältst du im php-script ein array in dem du alle angegebenen werte übergeben bekommst.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hi,
      und wie gebe ich dann mehrere Dateien an?
      Kann ich die Dateinamen mit Komma trennen, oder muß ich da was spezielles definieren.
      Mir kam jetzt auch nochmal so´ne Idee, das nicht mit der Variablen "datei" zu machen, sondern eine neue einzuführen.
      Zum Beispiel "file1", "file2" usw.
      Dann auf der Formularseite würden die erst zu einem Array zusammen gefasst und in $HTTP_POST_VARS["datei"] reingeschrieben.
      Das könnte dann bei der Abfrage nach gesetzten Haken genauso gehandhabt werden, wie die Haken, die direkt beim aufrufen des Formulars gesetzt werden.
      Jetzt probier ich aber erstmal Deinen Tip aus.

      So long

      Kommentar


      • #4
        Original geschrieben von cowboy
        und wie gebe ich dann mehrere Dateien an?
        Kann ich die Dateinamen mit Komma trennen, oder muß ich da was spezielles definieren.
        ich meinte eigentlich, dass du mehrere felder in dieser art machst:

        <input type="hidden" name="datei[]" value="Info_als_PDF.pdf">
        <input type="hidden" name="datei[]" value="Info_als_DOC.doc">
        <input type="hidden" name="datei[]" value="Info_als_RTF.rtf">

        und in php hast du dann aufgrund der benennung mit name="datei[]" ein array mit diesen werten zur verfügung.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Hi ,

          das habe ich probiert, jedoch ohne Erfolg. Kann es sein, daß es nicht geht, weil es von einer HTML-Seite aus aufgerufen wird, oder liegt der Fehler hier:
          PHP-Code:
           if($_file == $HTTP_POST_VARS["datei"])  {
                     
          $file substr$_file0strrpos$_file'.' ) );  // Name vor Punkt abschneiden
                     
          $file ereg_replace("_" " " $file);              // Unterstrich ersetzen
                     
          $file str_pad($file20 "*" );                    // Name mit Zeichen auffüllen
                     
          $file str_replace("*""&nbsp;" $file );          // Zeichen durch &nbsp; ersetzen
                     
          echo " <nobr><input type=checkbox name='datei[]' checked  value="$_file .">";
                     echo 
          " &nbsp;"$file ."1&nbsp;&nbsp;</nobr>";
                     } 
          $HTTP_POST_VARS["datei"]) ist das schon ein Array, bzw. wie muß es jetzt hier heißen, daß für alles was im übergebenen Array ein checked gemacht wird?
          Ich weiß leider nicht mehr weiter

          So long

          Kommentar


          • #6
            $HTTP_POST_VARS["datei"] is ein array
            mach ne foreach schleife oder so und wenn Du net weisst was da drin ist dann lass es Dir mit print_r ausgeben...
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar


            • #7
              Hi,
              das is ne gute Idee, praktisch anstelle der
              if $_file == $HTTP_POST_VARS ...

              das Ganze mit foreach durchlaufen lassen und dann checked einsetzten.

              Mal schaun ob ich das hinkriege...

              So long

              Kommentar


              • #8
                Hi,

                Erfolg! (aber nicht auf ganzer Linie )

                Zum Testen habe ich mal das in mein Script eingesetzt:
                PHP-Code:
                echo " Das wurde übergeben: ";
                if (
                $HTTP_POST_VARS["datei"]){
                $f =$HTTP_POST_VARS["datei"];
                foreach(
                $f as $w) echo "$w ; ";}
                else{
                echo 
                " NIX ";}
                echo 
                "<br>"
                Das funzt einwandfrei und zeigt an, was im Array $HTTP_POST_VARS["datei"] drinne steht.

                Nur die Sache mit den checkboxen kriege ich noch nicht gebacken:
                Da habe ich jetzt folgendes stehen:
                PHP-Code:
                 $folder opendir($ordner);
                while(
                $_file readdir($folder)) {

                    if(!
                is_dir($_file) && $_file != "." && $_file != ".." && $_file != ".htaccess" && $_file != ".htpasswd") {

                        if(
                $_file == $HTTP_POST_VARS["datei"])  {
                           
                $f $HTTP_POST_VARS["datei"];
                           foreach(
                $f as $w)
                           
                $file substr$_file0strrpos$_file'.' ) );  // Name vor Punkt abschneiden
                           
                $file ereg_replace("_" " " $file);              // Unterstrich ersetzen
                           
                $file str_pad($file20 "*" );                    // Name mit Zeichen auffüllen
                           
                $file str_replace("*""&nbsp;" $file );          // Zeichen durch &nbsp; ersetzen
                           
                echo " <nobr><input type=checkbox name='datei[]' checked  value="$w .">";
                           echo 
                " &nbsp;"$file ."1&nbsp;&nbsp;</nobr>";
                           }
                        else{
                           
                $file substr$_file0strrpos$_file'.' ) );  // Name vor Punkt abschneiden
                           
                $file ereg_replace("_" " " $file);              // Unterstrich ersetzen
                           
                $file str_pad($file20 "*" );                    // Name mit Zeichen auffüllen
                           
                $file str_replace("*""&nbsp;" $file );          // Zeichen durch &nbsp; ersetzen
                           
                echo " <nobr><input type=checkbox name='datei[]' value="$_file .">";
                           echo 
                " &nbsp;"$file ."2&nbsp;&nbsp;</nobr>";

                       }
                   }
                }

                closedir($folder); 
                Dabei stelle ich fest, daß beim Abschicken immer nur wieder der else-Teil der Abfrage ausgeführt wird. Wenn ich darüber nachdenke is mir auch klar wieso (glaube ich zumindest).
                Die erste Abfrage lautet:
                PHP-Code:
                if($_file == $HTTP_POST_VARS["datei"]) 
                Da wird doch überprüft, ob das Array $_file gleich ist dem Array $HTTP_POST_VARS[datei]. Trifft also nie zu, es sei denn man wählt alle Boxen aus. Es müsste also eine Abfrage stattfinden, die feststellt, ob $_file in $HTTP_POST_VARS["datei"] vorhanden ist und dafür dann die Anweisungen durchführen.
                Liege ich damit richtig, und wenn ja, wie frage ich sowas ab? Bin mit Arrays leider immer noch´n bisschen auf Kriegsfuß und wäre Euch dankbar, wenn Ihr mir da nochmal helfen könntet.

                So long

                Kommentar


                • #9
                  Hi,
                  schon wieder ich
                  ich hab´das ganze jetzt so gemacht und es geht im Prinzip, bis auf ein komisches Phänomen (siehe unten):

                  PHP-Code:
                  $folder opendir($ordner);
                  while(
                  $_file readdir($folder)) {
                      if(!
                  is_dir($_file) && $_file != "." && $_file != ".." && $_file != ".htaccess" && $_file != ".htpasswd") {
                          if(
                  $HTTP_POST_VARS["datei"]){
                            if(
                  in_array($_file $HTTP_POST_VARS["datei"])){
                               foreach(
                  $HTTP_POST_VARS["datei"] as $_file)
                               echo 
                  " <nobr><input type=checkbox name='datei[]' checked  value="$_file .">";
                               echo 
                  " &nbsp;"$_file ."&nbsp;&nbsp;&nbsp;</nobr>";
                            }else{
                               echo 
                  " <nobr><input type=checkbox name='datei[]' value="$_file .">";
                               echo 
                  " &nbsp;"$_file ."&nbsp;&nbsp;&nbsp;</nobr>";
                            }
                          }
                          else{
                            if(
                  $zeig_alles 1){
                              echo 
                  " <nobr><input type=checkbox name='datei[]' value="$_file .">";
                              echo 
                  " &nbsp;"$_file ."&nbsp;&nbsp;&nbsp;</nobr>";
                            }
                         }
                     }
                  }

                  closedir($folder); 
                  Da Problem, das ich noch habe, ist, daß beim zweiten mal Abschicken des Formulars scheinbar $HTTP_POST_VARS["datei"]
                  nur noch einen Dateinamen beinhaltet, auch wenn nach dem ersten mal die drei ausgewählten Dateien abgehakt waren.
                  Beispiel konkret:
                  Formular wird aufgerufen, ich wähle drei Dateien aus, abschicken, drei Dateien sind abgehakt, aber Fehlermeldung,
                  weil email-Adresse fehlt, wieder abschicken, es ist nur noch eine Datei abgehakt.
                  Das ist sehr seltsam, für mich jedenfalls.
                  Weiß jemand woran das liegt?
                  Dabei hab´ich mich so gefreut, daß es jetzt ging...

                  Kommentar


                  • #10
                    Ja Du checkest ja auch nur die erste an.
                    Beantworte nie Threads mit mehr als 15 followups...
                    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                    Kommentar


                    • #11
                      Wie meinst du das ich checke nur die erste an? Das check ich nicht.
                      Beim ersten Absenden merkt es sich ja auch alle gesetzten Haken.
                      Demzufolge sollten Sie beim zweiten Absenden immer noch da sein, oder nicht?

                      Kommentar

                      Lädt...
                      X