# Formular bei Fehler NICHT zurücksetzen



## Apfelkuchen (14. November 2008)

Hi. Ich habe ein Formular mit dem ich sehr viele Eingaben übernehme. Wenn es jedoch einen Fehler gibt, dann führt er die PHP komandos nicht aus, sondern resetet sich gleich und gibt die Fehlermeldung aus. Wie kann ich nun verhindern, dass sich das Form restettet und ich nicht bei null stehe:


```
<?php
    include("dbconnect.php");
    
    $DEBUG = FALSE;

// Hier folgt der PHP Code der Seite

?>
<p class=adminlabel>Turnier hinzufügen</p>
<p>
  <?php

// Turnier - Allgemeine Informationen

$tour_name = $_POST['turniername'];
$event = $_POST['turniername'];
$datum = $_POST['datum'];
$anzahl_der_spieler = $_POST['quantity'];


// Senden?
$send=$_POST['s'];

// Ueberprueufung vor dem abschicken

//Turniername
if($tour_name ==""){
    $err_text.="Turniername wurde nicht angegeben<br>";
    }

//Spieleranzahl
if($anzahl_der_spieler ==""){
    $err_text.="Spieleranzahl wurde nicht angegeben<br>";
    }

?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" name="Formular" method="POST">
  <!-- ANFANG  Allgemeine Eingaben - Turniername, Datum, Spieleranzahl, Austragunsort -->
  <p>
  <table border="0" width="500" align="left">
    <tr>
      <td class="text12n">Turnier: </td>
      <td><input class="inputfield"  type="text" id="turniername" name="turniername" value="" />
      </td>
    </tr>
    <tr>
      <td class="text12n">Datum: </td>
      <td><input class="inputfield"  type="text" id="datum" name="datum" value="<?php echo date(Y."-".m."-".d); ?>"/>
      </td>
    </tr>
    <tr>
      <td class="text12n">Spieleranzahl: </td>
      <td><input class="inputfield"  type="text" id="quantity" name="quantity" value="" />
      </td>
    </tr>
  </table>
  <table>
    <tr>
      <td align="center" colspan="2"><input type="hidden" value="1" name="s">
        <input type="submit" value="Eintragen" name="enter" />
        <input name="reset" type="reset" value="Reset" />
      </td>
    </tr>
  </table>
  </p>
  <!-- ENDE  Allgemeine Eingaben - Turniername, Datum, Spieleranzahl, Austragunsort -->
<?php


if(($send=="1") && (isset($err_text))) {
  echo "<br><br><br><br><br><br><p><b>Error:</b><br>";
  echo "$err_text</p>";
}

if(($send!="1") || (isset($err_text)))
{
?>
</form>

<?php

    
} else {
    
    // ERST WENN ALLES PASST KOMMT MAN HIER HER ZUM INPUT QUERY
```

Also hier erfolgt die überprüfung vor dem abschicken


```
// Ueberprueufung vor dem abschicken

//Turniername
if($tour_name ==""){
    $err_text.="Turniername wurde nicht angegeben<br>";
    }

//Spieleranzahl
if($anzahl_der_spieler ==""){
    $err_text.="Spieleranzahl wurde nicht angegeben<br>";
    }
```

Wenn da etwas falsch ist, dann schickt er nicht ab, bzw macht nicht weiter in der letzten Zeile des Codes, sondern gibt die Fehler aus und setzt die Form zurück. Das möchte ich aber nicht. Er soll die Form nicht zurücksetzen, weil ich da ca. 50-60 Eingaben haben werde und nicht möchte, dass das jedes mal neu eingetippt und ausgewählt werden muss, wenn etwas nicht stimmt...


----------



## Sprint (14. November 2008)

Dafür gibt es zwei Lösungsmöglichkeiten. Wenn du rein bei PHP bleiben willst, mußt du die übergebenen werte mit echo wieder in die value Werte der Eingabefelder einsetzen bzw. bei Selects oder Buttons ein "checked" einfügen.
z.B.


```
<input class="inputfield"  type="text" id="quantity" name="quantity" value="<?php echo $quantity; ?>" />
```

Die andere Möglichkeit ist, das Formular vorm Absenden mit Javascript auf Vollständigkeit prüfen zu lassen.


----------



## Apfelkuchen (14. November 2008)

Sprint hat gesagt.:


> Dafür gibt es zwei Lösungsmöglichkeiten. Wenn du rein bei PHP bleiben willst, mußt du die übergebenen werte mit echo wieder in die value Werte der Eingabefelder einsetzen bzw. bei Selects oder Buttons ein "checked" einfügen.
> z.B.
> 
> 
> ...



Danke, das ist eigentlich eine super Lösung für meine Eingabefelder. Allerdings kann er die Werte aus den Drop-Down Selections nicht übernehmen. Wie könnte ich das einrichten? (die sind mir die wichtigsten, da ich von den Drop-Down Selections sicher 40-50 Einträge haben werden)

Wie z.b. für


```
<td class="text12n">Turnierart: </td>
      <td><select class="inputfield" name="turnierart" value="<?=$tournament?>" >
          <option>R32</option>
          <option>Achtelfinale</option>
        </select>
      </td>
```

Da hab ich das =?tournament eingefügt, aber trotzdem resetet er es immer auf das 1. Value: R32


----------



## Loomis (14. November 2008)

Du musst dort in den Option-Tags dann ein *checked="checked"* einfügen:

```
<option checked="checked"></option>
```


----------



## Apfelkuchen (14. November 2008)

Loomes hat gesagt.:


> Du musst dort in den Option-Tags dann ein *checked="checked"* einfügen:
> 
> ```
> <option checked="checked"></option>
> ```




```
<tr>
      <td class="text12n">Turnierart: </td>
      <td><select class="inputfield" name="turnierart" value="<?=$tournament?>">
          <option checked="checked">R32</option>
          <option checked="checked">Achtelfinale</option>
        </select>
      </td>
    </tr>
```

So, klappt leider nicht...


----------



## Loomis (14. November 2008)

Stimmt, erstens ist *checked* für Checkboxen, hier muss es *selected* sein.
Und zweitens, sollte auch nur ein Eintrag selektiert werden, nämlich der vorher ausgewählte, beispielsweise:

```
<option <?php if( $value == 1 ) { echo 'selected="selected"'; } ?>></option>
<option <?php if( $value == 2 ) { echo 'selected="selected"'; } ?>></option>
```


----------



## Apfelkuchen (14. November 2008)

Loomes hat gesagt.:


> Stimmt, erstens ist *checked* für Checkboxen, hier muss es *selected* sein.
> Und zweitens, sollte auch nur ein Eintrag selektiert werden, nämlich der vorher ausgewählte, beispielsweise:
> 
> ```
> ...



Hi, da ich sehr viele Spieler habe die aus der Datenbank geladen werden, schaut mein Aufbau so aus:

Funktion für die Selects (da es ca. 60 sind)


```
echo "<select class=\"".$pos."_sp1\" name=\"".$pos.$place."spieler1\">";
echo "<option>-</option>";
selectplayer();
echo "</select>";
```

Funktion selectplayer()

```
function selectplayer() 
    {
       $table = "player";
       
       $query = "SELECT *  FROM $table ORDER BY lastname";
       $result = mysql_query($query);

       if (mysql_num_rows($result)) {
          while($row=mysql_fetch_array($result)) {

          $lastname = $row['lastname'];
          $firstname = $row['firstname'];
          $id = $row['id'];
          echo "<option>".$lastname;
          echo " ".$firstname."</option>";
               }
          }
    }
```

wie mach ich das jetzt, da es sich ja um 150 spieler handelt und somit auch um 150 <options>....


----------



## Loomis (14. November 2008)

Was genau hast du denn vor? Das sieht mir alles etwas umständlich aus.


----------



## Apfelkuchen (14. November 2008)

Loomes hat gesagt.:


> Was genau hast du denn vor? Das sieht mir alles etwas umständlich aus.



http://farukp.com/tennis2/addtournament.php
Das hab ich vor. Ein TurnierSystem für meinen Tennisklub

Sehr viele Drop-Downs mit Namen.


----------



## Loomis (14. November 2008)

Hier:

```
echo "<option>".$lastname;
```
fehlt auch noch ein Wert, auf den du per $_POST zugreifen kannst:

```
echo '<option value="'.$id.'">'.$lastname;
```


Teste mal folgendes, ich kann nicht versprechen, dass das funktioniert:

```
function selectplayer( $selected="" ) 
{
    $table = "player";
    $query = "SELECT *  FROM $table ORDER BY lastname";
    $result = mysql_query($query);

    $options = '';
    if (mysql_num_rows($result))
    {
        while( $row = mysql_fetch_array( $result ) )
        {
            $options .= '<option value="' .$row['id']. '"';
            if( !empty( $selected ) && $selected == $row['id'] )
            {
                $options .=' selected="selected"';
            }
            $options .= '>' .$row['lastname']. ' ' .$row['firstname']. '</option>';
        }
    }
    return $options;
}
```

Die Funktion rufst du dann beispielsweise so auf:

```
echo selectplayer($_POST['name']); // Den Namen vom Select-Feld eintragen
```


//edit: @ Mod: Dieses Thema wäre wohl im PHP Forum besser aufgehoben?


----------



## Apfelkuchen (14. November 2008)

Danke, werde ich ausprobieren...


----------

