Ankündigung

Einklappen
Keine Ankündigung bisher.

Formular mit PHP und Javascript, Abfragebox Ja/Nein

Einklappen

Neue Werbung 2019

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

  • Formular mit PHP und Javascript, Abfragebox Ja/Nein

    Hallo,
    ich finde meinen Fehler nicht, und zwar habe ich beim "Abbrechen" Button eine Abfrage mit Bestätigung Ja/Nein.

    Das funktioniert auch, nur seitdem ich das hinzugefügt habe, wird beim drücken des "submit" Button nicht mehr der Name mit übergeben ( name=save oder name=abbruch ), der ist aber wichtig da anhand welcher Button gedrückt wird eine Aktion dahinter steckt.


    Seht ihr meinen Fehler?



    PHP-Code:
    <?php
    $barcode 
    $_POST['barcode'];

    echo
    "
    <html>
     <head>
      <title>Stadt Peine - Toner Ausgabe</title>
      <link href='style.css' rel='stylesheet' type='text/css'>
      <script language='Javascript'>
       function Cursorsetzen()
       {
        window.eingabe.barcode.focus();
       }
      </script>
     <head>
     
     <body onLoad='Cursorsetzen()'>
     
     <form method='POST' name='eingabe'>
     
     <table border=0>
      <tr>
       <td colspan='2'><nobr><img src='logo.gif' align='left'><h1>Toner Ausgabe</h1></nobr><br><hr></td>
      </tr>

      <tr>
       <td><b>Barcode einscannen:</b></td>
       <td><input type='text' name='barcode'> &nbsp; <nobr> <input type='submit' value='hinzuf&uuml;gen'></td>
      </tr></form>"
    ;
       
       if(
    $barcode!="")
       {   
         
    //Schreiben in TEMP CSV
         
    $temp = array($_POST['barcode']);
         
    $temp_fp fopen('temp_daten.csv''a');
         
    fputcsv($temp_fp$temp);
         
    fclose($temp_fp);   
        
         
    // Ausgabe   
         
    echo "<tr><td colspan='2'><hr><h4>Bereits eingescannte Toner / Patronen:</h4>";
         
    $datei fopen("temp_daten.csv""r");
         
    $data fgetcsv($datei1000);
         echo 
    "<form method='POST' id='frm' onsubmit='return onSubmit();'><br><ol>";
         while (
    $data
         {
          
    $ausgabe implode(","$data);
          echo 
    "<b><li> $ausgabe </li></b><br>";
          
    $data fgetcsv($datei1000);
          
          echo 
    "<input type='hidden' name='barcode_save[]' value='$ausgabe \n'>";
         }
         echo 
    "<br><br><input type='submit' name='save' value='Ausgabe abschlie&szlig;en' onclick='senden();'>&nbsp;<input type='submit' name='abbruch' value='Abbrechen' onclick='cancel();'></ol></form></td></tr>";
         echo 
    "
            <script type='text/javascript'>
            <!--
            var frm = document.getElementById('frm');

            function onSubmit()
            {
                return false;
            }

            function cancel()
            {
                if (confirm('Alle gescannten Artikel werden entfernt!') == true) 
                {
                    frm.submit();
                } 
                else 
                {
                }    
            }

            function senden()
            {
              frm.submit();  
            }

            //-->
            </script>     
         "
    ;
         
        }
        else
        {
         echo 
    "<tr><td colspan='2'><hr></td></tr>";
        }
        
       if(isset(
    $_POST['save']))
        {
         echo 
    "<div><h4><u>Datei abgespeichert!</u></h4></div><br>";
         echo
    "<meta http-equiv='refresh' content='5; url='>";    

         
    //Schreiben in Gesamt CSV
            
    if (file_exists('daten.csv')) 
            {
                
    file_put_contents('daten.csv'implode(""$_POST['barcode_save']), FILE_APPEND); 
            } 
            else 
            {
                
    file_put_contents("daten.csv""Seriennummer\n");
                
    file_put_contents('daten.csv'implode(""$_POST['barcode_save']), FILE_APPEND); 
            }     

         
    // TEMP CSV löschen
         
    unlink('C:\inetpub\wwwroot\import\toner\temp_daten.csv');     
        }
        
       if(isset(
    $_POST['abbruch']))
        {         
         
    // TEMP CSV löschen
         
    unlink('C:\inetpub\wwwroot\import\toner\temp_daten.csv');     
        }
        
        echo
    "   
      </tr>
     </table>   
       "
    ;

    ?>

    Viele Grüße


  • #2
    Im JS Forum spielt dein PHP-Code eigentlich keine Rolle.. Zeig uns doch bitte beim nächsten Mal den Seitenquelltext. Du würdest dich leichter tun, wenn dein Code strukturierter wäre (siehe EVA-Prinzip).

    Auf den submit-Button kannste dich eh nicht verlassen, dann eher noch ein hidden input und vorm Abschicken das value setzen. Besser: Verschick die Formulare an 2 verschiedene URLs - sind eh 2 verschiedene Aktionen eines Controllers aus MVC-Sicht.

    Das Speichern in C:\inetpub\wwwroot\import\toner\ schreit eher nach nach einem Service wie XMLRPC, SOAP o.a. einer REST-API. Falls MSSQL installiert ist, schau dir das hier mal in ner ruhigen Minute an: http://www.odata.org/ und http://sqlrest.sourceforge.net/

    Grüße

    Basti
    I like cooking my family and my pets.
    Use commas. Don't be a psycho.
    Blog - CoverflowJS

    Kommentar


    • #3
      Möchte die Dateistruktur so schmal wie möglich halten, daher ist alles in einer datei.
      ohne die JS Skript Button abfrage läuft auch die prozedur.

      Ist ein IIS Windows 2008 Server, ohne mysql. Gespeichert wird alles in eine CSV Datei, da täglich ein Import einer Inventarisierungssoftware läuft.

      Kommentar


      • #4
        Zitat von rudygotya Beitrag anzeigen
        Auf den submit-Button kannste dich eh nicht verlassen,
        Doch. Wenn man aber per <form onsubmit="return false;"> das Standardverhalten abwürgt und per [formular].submit() das Formular mit Javascript abschickt bekommt man natürlich nicht mehr das name-value-Paar des angeklickten Buttons übertragen ...

        dann eher noch ein hidden input und vorm Abschicken das value setzen. Besser: Verschick die Formulare an 2 verschiedene URLs - sind eh 2 verschiedene Aktionen eines Controllers aus MVC-Sicht.
        Scherzkeks. Wie willst du denn den Wert des versteckten Feldes bzw. des action-Attributs setzen? Mit Javascript? Und dass soll dann zuverlässig sein?

        Kommentar


        • #5
          Angenommen, der onsubmit-handler wäre nicht da, kannste das Formular auch durch das Drücken von Return im input abgeschicken.. Quizfrage an dich: Welche der 2 Submitbutton-Values wird dann übertragen?

          Scherzkeks. Wie willst du denn den Wert des versteckten Feldes bzw. des action-Attributs setzen? Mit Javascript? Und dass soll dann zuverlässig sein?
          Sauber programmiert, ja. Für ein Adminpanel kann man auch ruhig JS voraussetzen..

          P.S.: Den Scherzkeks kannste dir schenken...
          I like cooking my family and my pets.
          Use commas. Don't be a psycho.
          Blog - CoverflowJS

          Kommentar


          • #6
            und wie kann ich das jetzt am besten lösen

            Kommentar


            • #7
              Zitat von rudygotya Beitrag anzeigen
              Angenommen, der onsubmit-handler wäre nicht da, kannste das Formular auch durch das Drücken von Return im input abgeschicken.. Quizfrage an dich: Welche der 2 Submitbutton-Values wird dann übertragen?
              Das ist afaik von Browser zu Browser unterschiedlich und in dem Fall auch nicht definiert welcher Wert übertragen werden soll - aber der Fall ist ohnehin irrelevant, wichtig ist nur dass wenn ein Button angeklickt wird dessen name-value-Paar übertragen wird - und das funktioniert in allen Browsern.

              Zitat von matze-pe Beitrag anzeigen
              und wie kann ich das jetzt am besten lösen
              Ich würde zum Abbrechen keinen Button verwenden sondern einen Link zurück o.ä., alternativ darfst du eben das Abschicken des Formulars nicht grundsätzlich abwürgen sondern darfst nur wenn es nicht abgeschickt werden soll (also confirm() false ergibt) die Standardaktion (=Abschicken des Formulars) unterdrücken (Stichwort für Google: preventDefault()).

              Kommentar


              • #8
                alternativ darfst du eben das Abschicken des Formulars nicht grundsätzlich abwürgen sondern darfst nur wenn es nicht abgeschickt werden soll die Standardaktion unterdrücken
                Damit setzt du wieder voraus, dass ein Button gedrückt wird. Ich würde deswegen weiterhin das Abschicken pauschal mit return false verhindern => musst dich nicht um den IE8 kümmern und das Problem mit dem Return-Button ist auch aus der Welt. Den Button-Kontext kriegst du frei haus mit this, den Wert in ein hidden input setzen, fertig.

                ungetestet angescribbelt:

                PHP-Code:
                var foo document.querySelector('#foo'),
                frm document.querySelector('#form');
                function 
                submitForm(elneedsConfirm ) {

                    
                needsConfirm = !! needsConfirm;
                    if( 
                el == null || ! el.value ) {
                        return 
                false;
                    }
                    
                foo.value el.value;
                    
                    if( ! 
                needsConfirm || confirmel.getAttribute('data-confirm') ) ) {
                        
                frm.submit();
                    }


                Code:
                <input id="foo" name="action" type="hidden" value="" />
                <input type="submit" value="cancel" onclick="submitForm(this, true)" data-confirm="Alle gescannten Artikel werden entfernt!" />
                <input type="submit" value="save" onclick="submitForm(this)" />
                Grüße

                Basti
                I like cooking my family and my pets.
                Use commas. Don't be a psycho.
                Blog - CoverflowJS

                Kommentar


                • #9
                  Hallo,
                  danke aber das hat leider nicht geklappt, habe die Abfrage jetzt in PHP gelöst:

                  PHP-Code:
                  <?php
                  $barcode 
                  $_POST['barcode'];
                  $antwort $_GET['antwort'];

                  echo
                  "
                  <html>
                   <head>
                    <title>Stadt Peine - Toner Ausgabe</title>
                    <link href='style.css' rel='stylesheet' type='text/css'>
                    <script language='Javascript'>
                     function Cursorsetzen()
                     {
                      window.eingabe.barcode.focus();
                     }     
                    </script>
                   <head>
                   
                   <body onLoad='Cursorsetzen()'>
                    <p id='demo'></p> 
                   <form method='POST' name='eingabe'>
                   <table border=0>
                    <tr>
                     <td colspan='2'><nobr><img src='logo.gif' align='left'><h1>Toner Ausgabe</h1></nobr><br><hr></td>
                    </tr>

                    <tr>
                     <td><b>Barcode einscannen:</b></td>
                     <td><input type='text' name='barcode'> &nbsp; <nobr> <input type='submit' value='hinzuf&uuml;gen'></td>
                    </tr></form>"
                  ;
                     
                     if(
                  $barcode!="")
                     {   
                       
                  //Schreiben in TEMP CSV
                       
                  $temp = array($_POST['barcode']);
                       
                  $temp_fp fopen('temp_daten.csv''a');
                       
                  fputcsv($temp_fp$temp);
                       
                  fclose($temp_fp);   
                      
                       
                  // Ausgabe   
                       
                  echo "<tr><td colspan='2'><hr><h4>Bereits eingescannte Toner / Patronen:</h4>";
                       
                  $datei fopen("temp_daten.csv""r");
                       
                  $data fgetcsv($datei1000);
                       echo 
                  "<form method='POST'><br><ol>";
                       while (
                  $data
                       {
                        
                  $ausgabe implode(","$data);
                        echo 
                  "<b><li> $ausgabe </li></b><br>";
                        
                  $data fgetcsv($datei1000);
                        
                        echo 
                  "<input type='hidden' name='barcode_save[]' value='$ausgabe \n'>";
                       }
                       echo 
                  "<br><br><input type='submit' name='save' value='Ausgabe abschlie&szlig;en'>&nbsp;<input type='submit' name='abbruch' value='Abbrechen' onclick='cancel();'></ol></form></td></tr>"
                      }
                      else
                      {
                       echo 
                  "<tr><td colspan='2'><hr></td></tr>";
                      }
                      
                     if(isset(
                  $_POST['save']))
                      {
                       echo 
                  "<div><h4 style='color:red'><u>Datei abgespeichert!</u></h4></div><br>";
                       echo
                  "<meta http-equiv='refresh' content='5; url='>";    

                       
                  //Schreiben in Gesamt CSV
                          
                  if (file_exists('daten.csv')) 
                          {
                              
                  file_put_contents('daten.csv'implode(""$_POST['barcode_save']), FILE_APPEND); 
                          } 
                          else 
                          {
                              
                  file_put_contents("daten.csv""Seriennummer\n");
                              
                  file_put_contents('daten.csv'implode(""$_POST['barcode_save']), FILE_APPEND); 
                          }     

                       
                  // TEMP CSV löschen
                       
                  unlink('C:\inetpub\wwwroot\import\toner\temp_daten.csv');     
                      }
                      
                     if(isset(
                  $_POST['abbruch']))
                      {
                       
                  // Ausgabe   
                       
                  echo "<tr><td colspan='2'><br><h4>Bereits eingescannte Toner / Patronen:</h4>";
                       
                  $datei fopen("temp_daten.csv""r");
                       
                  $data fgetcsv($datei1000);
                       echo 
                  "<br><ol>";
                       while (
                  $data
                       {
                        
                  $ausgabe implode(","$data);
                        echo 
                  "<b><li> $ausgabe </li></b><br>";
                        
                  $data fgetcsv($datei1000);
                       }
                       
                       echo 
                  "<div><br><br><h4 style='color:red'><u>Sollen alle gescannten Artikel gel&oumlschen werden?</u></h4>
                       <a href='?antwort=Ja'>&nbsp;Ja&nbsp;</a>&nbsp;&nbsp;&nbsp;<a href='#' onclick='window.history.back()'>&nbsp;Nein&nbsp;</a></h3></div><br>"
                  ;
                      }
                      

                     if(
                  $antwort=="Ja")
                      {
                       echo
                  "<meta http-equiv='refresh' content='1; url=index.php'>";
                                  
                       
                  // TEMP CSV löschen
                       
                  unlink('C:\inetpub\wwwroot\import\toner\temp_daten.csv');     
                      }    
                      echo
                  "     
                    </tr>
                   </table>   
                     "
                  ;

                  ?>

                  Viele Grüße

                  Kommentar

                  Lädt...
                  X