Selectfeld Auswahl wird nach versenden nicht zurück gesetzt

inspiron8

Mitglied
Hallo,
Im ersten Selectfeld soll nach dem Absenden die getroffene Auswahl wieder markiert sein. Das funktioniert.
Im zweiten Selectfeld soll aber erst nach erfolgter Fehlerüberprüfung und dem Absenden die getroffene Auswahl zurück gesetzt werden.
Leider bleibt auch in diesem die Auswahl erhalten.
Wie muss der Code aussehen damit die Auswahl nach versenden zurück gesetzt wird?

Gruß


PHP:
<form method="post" accept-charset="utf-8" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>">
           <!-- Element 1 -->
            <select name="schicht" id="schicht" >
               <optgroup label="Schicht">
               <?php

                   $sql = "SELECT schicht FROM dropdown_schicht ";
                    $result = mysql_query($sql);
                // für jeden Eintrag ein Option-Tag erstellen
                while ($arrort = mysql_fetch_array($result, MYSQL_ASSOC)) {
                
            foreach ($arrort as $zeile) {
              $sel = isselected($zeile, $_POST['schicht']);

              if($arrort['schicht'] == "*") {
                echo '<optgroup label="*">';
              } else {

              echo '<option value="'.$zeile.'"'.$sel .'>'.$zeile.'</option>';
              }
              }
            }
            ?>
            </optgroup>
           </select>
                 
        <!-- Element 4 -->
            <select name="fehlerkategorie" id="fehlerkategorie" >
                <optgroup label="Kategorie">
                <?php

                    $sql = "SELECT fehlerkategorie FROM dropdown_kategorie ";
                    $result = mysql_query($sql);
                // für jeden Eintrag ein Option-Tag erstellen
                while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
            $selected='';

            if($row['fehlerkategorie'] == "*") {
                echo '<optgroup label="*">';
            } else {

                if( $row['fehlerkategorie'] == $_POST['fehlerkategorie'] )
                        $selected = ' selected="selected"';
                echo '<option value="' . $row['fehlerkategorie'] . '"' . $selected . '>' . $row['fehlerkategorie'] . '</option>';
                }
                }
            ?>
            </optgroup>
            </select>
</form>
 
Kannst du das noch einmal anders erklären? Ich persönlich finde deine Aussagen nämlich sehr widersprüchlich. Du sagst, dass nur das erste ausgewählt bleiben soll, dass zweite jedoch erst zurückgesetzt werden soll, wenn es überprüft wurde. Aber das heißt ja, dass es bis dahin ausgewählt bleiben muss.
 
Du sagst, dass nur das erste ausgewählt bleiben soll,
...genau überprüfen, versenden, Auswahl erhalten.
(Die Schicht bleibt ja solange wie diese dauert, gleich. Daher muß sie nicht immer neu ausgewählt werden)

dass zweite jedoch erst zurückgesetzt werden soll, wenn es überprüft wurde. Aber das heißt ja, dass es bis dahin ausgewählt bleiben muss.
...erst wenn es nach der Überprüfung versendet wurde, Auswahl zurücksetzen!
(Hier werden auftretende Fehlerkategorien ausgewählt die sich ständig ändern. Nach dem Versenden soll halt eine neue Auswahl erfolgen)

Ich hoffe es ist verständlich,
Gruß
 
Also wenn ich das jetzt richtig verstanden habe, dann hast du diese zwei Auswahlmenüs, wobei das erste nach dem ersten Versenden seine Auswahl behält, das zweite jedoch nicht. Und erst wenn das Versenden der Daten erfolgreich/gültig war, dann werden beide zurück gesetzt?
 
Also wenn ich das jetzt richtig verstanden habe,
...Nö
dann hast du diese zwei Auswahlmenüs, wobei das erste nach dem ersten Versenden seine Auswahl behält,
...richtig, bei jedem Versenden! Das Funktioniert ja im ersten Selectfeld.

das zweite jedoch nicht. Und erst wenn das Versenden der Daten erfolgreich/gültig war, dann werden beide zurück gesetzt?
...nein, es soll nur das zweite nach dem Versenden zurückgesetzt werden.

Grund: Das Formular bleibt eine Schicht lang geöffnet. Während dieser werden auftretende Fehler gespeichert.
Demzufolge bleibt Schicht und Ort immer ausgewählt das diese sich am Arbeitstag nicht ändern und der User diese nicht immer wieder neu auswählen möchte. Es ändern sich nur Sendung und evtl. auftretende Fehler. Diese müssen nach Versenden zurückgesetzt werden.

Der Code vom ersten Selectfeld ist ja soweit i.O. Da soll nichts verändert werden. Dieser wird für Schicht und Ort verwendet.
Der zweite Code soll für Sendung und Auswahl angepasst werden.

Schicht................................Ort........................................Sendung.....................Kategorie
+--------------------------+ +------------------------------+ +-----------------------+ +---------------------+
+ Auswahl....................+ + Auswahl................... + + zurückgesetzte......+ + zurückgesetzte ..+
+ bleibt erhalten...........+ + bleibt erhalten..............+ + Auswahl...............+ + Auswahl...............+
+--------------------------+ +------------------------------+ +----------------------+ +----------------------+

....ohhh man, ich habe es mal selbst gelesen, alles viel zu kompliziert.
In diesem Code bleibt auch nach dem versenden die Auswahl erhalten.
Es soll erst, wenn das Versenden der Daten erfolgreich/gültig war, zurückgesetzt werden ohne die Seite neu zu laden.

Danke für deine Hilfe,
Gruß

PHP:
<!-- Element 4 --> 
            <select name="fehlerkategorie" id="fehlerkategorie" > 
                <optgroup label="Kategorie"> 
                <?php 

                    $sql = "SELECT fehlerkategorie FROM dropdown_kategorie "; 
                    $result = mysql_query($sql); 
                // für jeden Eintrag ein Option-Tag erstellen 
                while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
            $selected=''; 

            if($row['fehlerkategorie'] == "*") { 
                echo '<optgroup label="*">'; 
            } else { 

                if( $row['fehlerkategorie'] == $_POST['fehlerkategorie'] ) 
                        $selected = ' selected="selected"'; 
                echo '<option value="' . $row['fehlerkategorie'] . '"' . $selected . '>' . $row['fehlerkategorie'] . '</option>';
                } 
                } 
            ?> 
            </optgroup> 
            </select>

....hat keiner 'ne Idee?
 
Ich dachte, dass du selber darauf kommen würdest, dass dies nur mit AJAX oder Websockets möglich ist, wobei du letzteres bisher nicht in Betracht ziehen solltest.
 
...schade.
Na gut dann eben anders, jetzt heb ich die Schichttabelle um eine Spalte "ort" erweitert.
Würde nun gerne bei Auswahl einer Schicht den passenden "ort" im $_POST['ort'] und die "schicht" im $_POST['schicht'] haben wollen.
Im Selectfeld soll aber nur die Schicht angezeigt werden.
Wie schreibe ich das am besten richtig

id---schicht---------------ort
1---Bitte auswählen!
2---früh-------------------hier
3---mittag----------------dort
4---spät-------------------woanders


PHP:
<select name="schicht" id="schicht" >
			<?php
			 
    		$sql = "SELECT schicht, ort FROM dropdown_schicht "; 
    		$result = mysql_query($sql);                  
        	        	
        	while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {   
            
                        $selected='';			
			if( $row['schicht'] == $_POST['schicht'] ) && ( $row['ort'] == $_POST['ort'] ) $selected = ' selected="selected"';
			echo '<option value="' . $row['schicht'] . '"' . $selected . '>' . $row['schicht'] . '</option>';
            }

   		// Sessionvariablen erstellen 
               $_SESSION['schicht'] = $_POST['schicht'];
               $_SESSION['ort'] = $_POST['ort'];

			?>
     		</select>
     		</div>
 
Ich habe mir deinen Text jetzt bestimmt schon fünfmal durchgelesen und ich weiß immer noch nicht, was du möchtest. Möchtest du ein Dropdown-Feld haben, in dem nur der Name der Schicht (also "früh", "spät" et cetera) angezeigt wird, aber welche als Wert auch den Ort und die ID enthält, oder möchtest du etwas anderes?
 
PHP:
<select name="schicht-ort" id="schicht">
<?php
  $sql = 'SELECT schicht, ort FROM dropdown_schicht';
  $result = mysql_query($sql);
  
  $data = explode($_POST['schicht-ort'], '-', 2);
  
  while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
  {    
    $selected = '';

    if (($row['schicht'] == $data[0]) && ($row['ort'] == $data[1]))
    {
      $selected = ' selected="selected"';
    }

    echo '<option value="' . $row['schicht'] . '-' . $row['ort'] . '"' . $selected . '>' . $row['schicht'] . '</option>';
  }

  # Sessionvariablen erstellen
  $_SESSION['schicht'] = $data[0];
  $_SESSION['ort'] = $data[1];
?>
</select>
 
Zuletzt bearbeitet:
Zurück