Formular senden mit 2 Buttons

counteract

Erfahrenes Mitglied
Hallo!

Ich habe ein Problem und zwar möchte ich 2 Buttons in einem Formular haben, welche die Daten des Formulars an 2 Unterschiedliche Seiten sendet.
Jedoch habe ich noch eine Fehlerüberprüfung eingebaut und nun weis ich nicht wie ich das Senden mit den 2 Buttons machen soll!

Hier der Code der Fehlerüberprüfung:

PHP:
<?php
session_start();

if(isset($_POST['ueberpruefung'])) 
  { 
      $error = array(); 
      $success = true;
      $keys = array('pname', 'pbeschreibung', 'pstandort', 'pbeginn', 'pende', 'pstunden', 'pberufsform_a', 'panzahl_a', 'pweitere_informationen_a', 'pstundensatz_a');
      foreach($keys as $key)
      {
          $error[$key] = '';
      }   
               
      if(empty($_POST['pname']))
        { 
          $error['pname'] = "Bitte einen Projektnamen eingeben!";
          $success = false;
        } 
      
      if(empty($_POST['pbeschreibung']))
        {
          $error['pbeschreibung'] = "Bitte eine Projektbeschreibung eingeben!";
          $success = false;
        } 
      
      if(empty($_POST['pstandort']))
        {
          $error['pstandort'] = "Bitte einen Standort eingeben!";
          $success = false;
        } 
      
      if(empty($_POST['pbeginn']))
        {
          $error['pbeginn'] = "Bitte ein Projektbeginn eingeben!";
          $success = false;
        } 
      
      if(empty($_POST['pende']))
        {
          $error['pende'] = "Bitte ein Projektende eingeben!";
          $success = false;
        } 
      
      if(empty($_POST['pstunden']))
        {
          $error['pstunden'] = "Bitte die geplanten Projektstunden eingeben!";
          $success = false;
        } 
      
      if(empty($_POST['pberufsform_a']))
        {
          $error['pberufsform_a'] = "Bitte eine Qualifikation eingeben!";
          $success = false;
        } 
      
      if(empty($_POST['panzahl_a']))
        {
          $error['panzahl_a'] = "Bitte die Anzahl eingeben!";
          $success = false;
        } 
      
      if(empty($_POST['pweitere_informationen_a']))
        {
          $error['pweitere_informationen_a'] = "Bitte ein Anforderungsprofil eingeben!";
          $success = false;
        } 
      
      if(empty($_POST['pstundensatz_a']))
        {
          $error['pstundensatz_a'] = "Bitte einen Stundensatz eingeben!";
          $success = false;
        } 
  
  }
  
  if(isset($success) && $success === true)
    {
  
    $_SESSION['pname'] = $_POST['pname'];
    $_SESSION['pbeschreibung'] = $_POST['pbeschreibung'];
    $_SESSION['pbeginn'] = $_POST['pbeginn'];
    $_SESSION['pende'] = $_POST['pende'];
    $_SESSION['pstunden'] = $_POST['pstunden'];
    $_SESSION['pstundensatz_a'] = $_POST['pstundensatz_a'];
    $_SESSION['pberufsform_a'] = $_POST['pberufsform_a'];
    $_SESSION['pstandort'] = $_POST['pstandort'];
    $_SESSION['pweitere_informationen_a'] = $_POST['pweitere_informationen_a'];
    $_SESSION['panzahl_a'] = $_POST['panzahl_a'];
  
      header('Location: seite2.php?' . SID);
	  
	 
  }
  else
  { 
?>

Hat jemand eine Idee wie ich den 2. Button realisieren kann?
 
Die beiden Absende Buttons sind so in dem Formular.

HTML:
 <p align="right"><input type="submit" name="form1" value="weitere Position"><input type="submit" name="weiter" value="Senden"></p
 
Bei mehreren Absende-Schaltflächen wird immer nur der Wert der erfolgreichen Schaltfläche übermittelt, also der Wert der Schaltfläche, die durch Drücken/Aktivieren das Formular abschickt. Du müsstest also prüfen, welcher der beiden Formularelemente übergeben wurde.
 
HTML:
    <div style="text-align:right;">
        <input type="submit" name="form1" value="weitere Position" /><input type="submit" name="weiter" value="Senden" />
    </div>
Böse <input /> in ein p-Tag zu packen http://www.selfhtml.org ;)

Überprüfen welcher Button gewählt wurde ist relativ einfach, Gumbos Vorschlag trifft da zu ;)
PHP:
    if( isset( $_POST[ 'form1' ] ) )
    {
        // Tu dies, wenn der linke Button geklickt wurde
    }
    elseif( isset( $_POST[ 'weiter' ] ) )
    {
        // Tu jenes, wenn der rechte Button geklickt wurde
    }
Theoretisch sind so also unendlich viele Buttons möglich. Im Prinzip könnte die Abfrage aber auch anders aussehen, wenn die name-Attribute der Buttons den gleichen Wert haben. Voraussetzung ist allerdings, dass die Werte des value-Attributs verschieden sind.
HTML:
    <div style="text-align:right;">
        <input type="submit" name="button" value="weitere Position" /><input type="submit" name="button" value="Senden" />
    </div>
PHP:
    if( $_POST[ 'button' ] == 'weitere Position' )
    {
        // Tu dies, wenn der linke Button geklickt wurde
    }
    elseif( $_POST[ 'button' ] == 'Senden' )
    {
        // Tu jenes, wenn der rechte Button geklickt wurde
    }

Mir fällt gerade auf, dass du dein Error-Handling noch etwas vereinfachen
PHP:
    if( isset( $_POST ) && is_array( $_POST ) )
    {
        $error_strings = array(
                'pname' => 'Bitte einen Projektnamen eingeben!',
                'pbeschreibung' => 'Bitte eine Projektbeschreibung eingeben!',
                'pstandort' => 'Bitte einen Projektstandort eingeben!',
                'pbeginn' => 'Bitte einen Projektbeginn eingeben!',
                'pende' => 'Bitte ein Projektende eingeben!',
                'pstunden' => 'Bitte die geplanten Projektstunden eingeben!',
                'pberufsform_a' => 'Bitte eine Qualifikation eingeben!',
                'panzahl_a' => 'Bitte die Anzahl eingeben!',
                'pweitere_informationen_a' => 'Bitte ein Anforderungsprofil eingeben!',
                'pstundensatz_a' => 'Bitte einen Stundensatz eingeben!'

            );
        $error = array();
        $success = true;
        foreach( $_POST as $key => $value )
        {
            if( empty( $_POST[ $key ] ) )
            {
                $error[ $key ] = $error_strings[ $key ];
                $success = false;
            }
        }
    }
Miteinander übereinstimmen müssen die name-Attribute der Formularfelder (ergo die Indizes des $_POST-Arrays) und die Indizes des $error_strings-Arrays.
 
Zuletzt bearbeitet:
Ja und das ist mein Problem ich weis nicht wie ich dies anstellen soll...

Und ich wei sauch nicht wie ich das in das vorhandene Script einbauen soll damit dann bei der Überprüfung alles funktioniert! :confused:
 
Könnte man das dann so machen?

PHP:
<?php
session_start();
  
  if(isset($success) && $success === true)
    {
  
    $_SESSION['pname'] = $_POST['pname'];
    $_SESSION['pbeschreibung'] = $_POST['pbeschreibung'];
    $_SESSION['pbeginn'] = $_POST['pbeginn'];
    $_SESSION['pende'] = $_POST['pende'];
    $_SESSION['pstunden'] = $_POST['pstunden'];
    $_SESSION['pstundensatz_a'] = $_POST['pstundensatz_a'];
    $_SESSION['pberufsform_a'] = $_POST['pberufsform_a'];
    $_SESSION['pstandort'] = $_POST['pstandort'];
    $_SESSION['pweitere_informationen_a'] = $_POST['pweitere_informationen_a'];
    $_SESSION['panzahl_a'] = $_POST['panzahl_a'];
  
      
	if( isset( $_POST[ 'form1' ] ) )
  	  {
        header('Location: seite2.php?' . SID);
    	}
   	 elseif( isset( $_POST[ 'weiter' ] ) )
    	{
	header('Location: seite2.php?' . SID);
    	}  
     
  }
  else
  { 
?>
 
Zurück