[PHP] 1 Formular, 2 action´s, 2 Button´s

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Faultier, 19. April 2011 .

Schlagworte:
  1. 19. April 2011
    1 Formular, 2 action´s, 2 Button´s

    Hey leute,

    hoffe ich bekomme hier Hilfe von euch. Ich habe ein Formular mit 2 Buttons. Button A soll action a.php aufrufen und Button b, action b.php. Wie kann man das am besten lösen? Habe gestern den ganzen Tag schon google benutzt, werd da aber irgendwie nicht schlau raus.. Wahrscheinlich ist die lösung ziemlich einfach nur komme ich da irgendwie nicht drauf.

    Danke schonmal für die Hilfe..

    lg
     
  2. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Entweder machst Du das nachträglich per header():

    (Nur gucken, wenn Du es nicht selber herausfinden willst )
    Spoiler
    Code:
    if(Formular.abgeschickt() == true) {
     if(Buttion1.gedrückt() == true) {
     header("Location: a.php");
     } else {
     // s.o.
     }
    } else {
    // Formular mit 2 Buttons ausgeben udn auf selber Seite verlinken oder halt ext., dir überlassen
    }

    oooooooder Du löst das ganze per Javascript.
    Aber zerbrich dir nicht den Kopf noch JS mit einzubinden und erledige das lieber auf die einfachere Art.
     
  3. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Huch, das ging ja fix. Mit header habe ich es auch schon probiert, allerdings bekomme ich dort immer diese Fehlermeldung.

    Gebe ja über den header noch was aus, deswegen denk ich mal klappt das nicht. Habe es aber nicht so gemacht wie du. Wie sieht denn die abgeschickt() und/oder gedrueckt() function aus?
     
  4. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Du musst natürlich bei header() darauf achten, das Du voher nichts ausgibst.

    Schau immer auf php.net/funktionsname() wie Du die Funktion anzuwenden hast!
     
  5. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Jo danke, die Seite kenne ich und schaue da auch öffters mal nach. Das problem ist jetzt dabei, dass ich das jetzt so aufgebau habe, dass ich header einfach nicht benutzen kann und auch nicht wüsste wie ich es umstricken kann, damit ich es nutzen kann ^^

    Spoiler
    PHP:
    <h2>Settings</h2>
    <br />
    <br />
    <form method="POST" action="../wp-content/plugins/feedwordpress/insert.php">
      <table>
      <tr>
          <td>Feed-Type:</td>
          <td>
            <input type="radio" name="feedArt" value="RSS">RSS
            <input type="radio" name="feedArt" value="Atom">Atom
          </td>
        </tr>
        <tr>
          <td>Feed-URL:</td>
          <td><input type="text" name="feedURL"></td>
        </tr>
        <tr>
          <td>Feed-Interval:</td>
          <td><input type="text" name="intervall"> (in Stunden)</td>
        </tr> 
      </table><br />
      <input type="submit" name="add" value="add">
    </form>
    <br />
    <hr>
    <br />

    <?php


      $sql 
    "SELECT * FROM alleFeeds;" ;       
      
    $result  mysql_query ( $sql ) OR die( "QUERY_ERROR: " . mysql_error ()); 
      
      
    $str  = "<form method='POST'>" ;
      
    $str  .= "<table>" ;
      
    $str  .= "<tr><td></td>"
           
    . "<td><b>Name</b></td>"
           
    . "<td><b>URL</b></td>"
           
    . "<td><b>Type</b></td>"
           
    . "<td><b>Interval</b></td>"
           
    . "<td><b>Update</b></td></tr>" ;

      while(
    $zeile  mysql_fetch_array ( $result MYSQL_ASSOC ) ){
      
          
    //Die Zeit berechnen, wann das nächste Update erfolgt.
          
    $aktZeit  time () +  7200 ;
          
    $nextUpdate  $zeile [ nextUpdate ] +  7200 ;
          
          
    //Wenn die Zeit abgelaufen ist, soll er 0 min anzeigen. Sonst würde er 
          //einfach weiter runterzählen.
          
    if( $nextUpdate  $aktZeit ){
            
    $nextUpdate  date ( "H:i" $nextUpdate - $aktZeit );
          }else{
            
    $nextUpdate  "00:00:00" ;
          }   
          
          
    $interv  $zeile [ intervall ] / 60  / 60 ;            
          
    $str  .= "<tr><td><input type=\"checkbox\" name=\"checkbox[]\" value=\" $zeile [ id ] \"></td>"
                 
    . "<td> $zeile [ feedName ]  |</td>"
                 
    . "<td> $zeile [ URL ]  |</td>"
                 
    . "<td> $zeile [ feedTyp ]  |</td>"
               
    . "<td> $interv  Stunden |</td>"
               
    . "<td>in  $nextUpdate  minuten</td></tr>" ;  
     }
    $str  .= "</table><br />" ;
    $str  .=  '<input type="submit" name="del" value="delete">' ;
    $str  .= "</form>" ;
    echo 
    $str ;

    if(isset(
    $_POST [ "add" ])){}
    if(isset(
    $_POST [ "del" ])){
        
    header ( 'Location: delete.php' );
    }
    ?>

    So sieht es bei mir aus, wie kann man das denn "header"-tauglich machen? Geht das überhaupt noch?

    lg
     
  6. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Nimm dir etwas Zeit zum Nachdenken, ich bin sicher, da kommst Du selber drauf

    Aber: Du kannst header() doch auch einfach an den Anfang setzen, bevor Du die Ausgabe tätigst und dort schon alles überprüfen.. Die Formulardaten bekommst Du erst nachdem Du durch das Formular weitergeleitet wurdest.
     
  7. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Ach mist, irgendwie bekomme ich es nicht hin.. Bekomme immer den selben Fehler..

    Habe jetzt unter anderem

    PHP:
    if(isset( $_POST [ "del" ])){
      
    header ( "Location: includes/delete.php" );
    }
    an den Anfang gepackt, jedoch funktioniert es auch nicht. :thumbsdown:. Habt ihr vll. noch ideen? ._."
     
  8. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Code:
    <script type="text/javascript">
     function Form_Submit() 
     {
     var form =document.getElementById('myform');
     
     if(document.pressed == "update") 
     {
     form.action ="a.php";
     }else 
     {
     form.action ="b.php";
     
     }
     }
    
    </script>
    
    <form method="post" id="myform" onsubmit="return Form_Submit()">
     <input type="text" />
     <input type="submit" value="Senden" />
     <input type="submit" onclick="document.pressed=this.value" value="update" id="update" />
    
    
    </form>
    
    
    so müsste es eig. gehen..
     
  9. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Wenn du per Header() auf deine delete.php weiterleitest dann ruft der Browser direkt die delete.php auf ohne die POST-Daten mitzunehmen.

    Je nachdem was in der delete.php drin ist solltest du vielleicht eher include nutzen!

    Warum gibst du dem Zweiten Formular nicht direkt action="irgendwas/delete.php" ?
     
  10. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Hm stimmt, da hast du recht! Wenn ich include nutze, dann aktualisiert er die Seite ja nicht. Dann steht da von mir aus: "Daten eingetragen", aber es soll direkt aktualisiert werden. Deswegen der umweg mit dem action und der automatischen weiterleitung zurück auf die Seite.

    Das mit dem action habe ich eigendlich vor, jedoch habe ich für das untere Formular 2 Buttons und ich brauche demensprechend auch 2 actions. Ich würde es lieber mit php lösen, aber wenn es nur schwer machbar ist, versuch ich mal das, was Atkaz vorgeschlagen hat.
     
  11. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Es ist doch kein Problem festzustellen welcher Button gedrückt wurde!

    PHP:
    <!doctype html>
    <html>

        <head>
            <meta charset="utf-8" />
            
            <title>RRB:780013</title>
        </head>

        
        <body>
        
    <?PHP
        
    // Kann je nachdem was passieren soll am besten VOR <!doctype ...
        
        
    if( isset( $_POST [ 'submit1' ]) )
            {
                echo 
    '<div>Submit 1 gedr&uuml;ckt</div>' ;
            }
            
        if( isset(
    $_POST [ 'submit2' ]) )
            {
                echo 
    '<div>Submit 2 gedr&uuml;ckt</div>' ;
            }
    ?>
        
            <form action="" method="POST">
                
                <button type="submit" name="submit1">Submit 1</button>
                <button type="submit" name="submit2">Submit 2</button>
                
            </form>
        
        </body>
        
    </html>
     
  12. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Zwecks deinem headers-Fehlermeldung: Du schmeißt irgendwo davor entweder schon den header oder tätigst ne' Ausgabe (echo oder sowas).
    Du kannst zu Beginn deines Scripts alle Ausgaben puffern lassen (ob_start()) und sie später dann ausgeben, wenn der Header gesendet wurde.

    --------

    Wenn du zwei Buttons für unterschiedliche Aufgaben benötigst, warum verwendet du dann keine Ajax-Calls?.
    Mittels jQuery total easy.
     
  13. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    @Nanobyte: Das ist mir auch klar, dass es so funktioniert, allerdings habe ich so eben den effekt des aktualisierens nicht.

    @Yuri: Mit ob_start() und ob_end_flush() hab ich es auch schon versucht. Vergeblich. Naja der grund dafür, wieso ich nicht Ajax verwende ist, weil ich noch nie was mit gemacht habe ^^

    mit verzweifelten Grüßen,
    Faultier
     
  14. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Dann wirfst du davor schon den header
    Dann probiers aus. Geh auf jquery.com, lads dir runter -> einbinden und probieren. In der jQuery-Dokumentation sind Code-Beispiele drin, die du fast 1:1 übernehmen kannst.
     
  15. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    in realen anwendungen löst man das so:

    script:
    PHP:
    if (isset( $_POST [ 'action-a' ])) {
        
    // verarbeite aktion a
        
    include  'a.php' ;
    } elseif (isset(
    $_POST [ 'action-b' ])) {
        
    // verarbeite aktion b
        
    include  'b.php' ;
    } else {
        
    // keine aktion
    }
    html:
    HTML:
    <form action="dispatch.php" method="post">
     <!-- eingabefelder etc. -->
     <input type="submit" name="action-a" value="Aktion A" />
     <input type="submit" name="action-b" value="Aktion B" />
    </form>
    // seh grad Nanobyte war schneller

    was für nen effekt? du meinst F5? doch den effekt hast du.

    mit verlaub, auch ohne jquery total easy.

    Code:
    var form = document.getElementById("dein-forumlar");
    
    form.onsubmit = function(event) {
     if (!event) event = window.event;
    
     var url = "a.php";
     if (event.target && event.target.name 
     && event.target.name == "action-b")
     url = "b.php";
    
     form.action = url;
     window.setTimeout(function() { form.submit(); }, 1000);
     
     return false;
    };
     
  16. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Hey Murdoc,

    so wie du mir das vorgeschlagen hast, hab ich das schon gemacht.
    Stell dir ne Seite vor, wo oben eine Tabelle angezeigt wird, mit irgendwelchen Einträge. Du wählst ein eintrag aus(checkbox) und klickst dann auf delete. Dann löscht er den besagten eintrag(aus der datenbank), aber man muss erst F5 drücken, damit man auch auf der Seite sieht, das der Eintrag auch gelöscht wurde.
     
  17. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Dann musst du das Löschen ausführen bevor du die Daten wieder aus der Datenbank abfragst oder du lässt Javascript die Seite nach dem Löschen neuladen
     
  18. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Dafür ist ja header da. Wenn du davor bereits etwas ausgeben möchtest, muss du halt mit Ausgabepuffern arbeiten. Also ob_start vor der ersten ausgabe und ob_end_flush nach der header-Manipulation.

    Kleineer Tipp: Das erste was bei dir ausgegeben wird, ist "<h2>Settings</h2>". Also muss noch davor der Ausgabepuffer gestartet werden.

    Nach jeder Datenbankmanipulation, ob INSERT, UPDATE oder DELETE sollte man einen header-redirect machen, damit der Benutzer nicht versehentlich mittels Zurück-Button des Browsers den Befehl erneut ausführt.
     
  19. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    @Murdoc: Aber du willst doch nicht deine Form-Action in deinem Javascript manipulieren und dazu noch in einem Event, dass "irgendwo" rumliegen kann^^
    Die Methode würde ich nicht empfehlen. Dann lieber sauber über eine Datei, die den Button prüft und dann irgendwas tut.

    jQuery
    Code:
    $.ajax({
     type: 'POST',
     url: 'file.php',
     data: $('form').serialize(),
     success: function() { // ... },
     error: console.log
    });
    
     
  20. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Code:
    $.ajax({
     type: 'POST',
     url: 'file.php',
     data: $('form').serialize(),
     success: function() 
     { 
     $('.class:checked').hide('slow');
     },
     
    });
    
    <input type="checkbox" class="ckbx" />
    das ganze kann man natürlich noch mit "parent ect." erweitern. Wenn du willst, das die sachen ohne aktualisieren ausgebledet werden, solltest es so angehen..ist denke ich mal der einfachste weg.

    vg
    atkaz
     
  21. 19. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    Wieso überhaupt irgendeine clientseitige JavaScript fummelei. Die Lösung seines Problems ist trivial und mit rund 3 einfachen Zeilen sauber & serverseitig lösbar.
     
  22. 20. April 2011
    AW: 1 Formular, 2 action´s, 2 Button´s

    ich seh das genauso.
    wenn was aus der DB gelöscht werden soll,
    dann wohl bevor die DB ausgelesen werden soll.
    sonst eben mit ajax, alle zu löschen reihen enfernen (z.b. display: none, oder aus dom entfernen)
    und diese dann per php aus der DB löschen.
     
  23. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.