Formular bei Fehler NICHT zurücksetzen

Status
Nicht offen für weitere Antworten.

Apfelkuchen

Mitglied
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:
<?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

PHP:
// 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...
 
Zuletzt bearbeitet:

Sprint

Erfahrenes Mitglied
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.

PHP:
<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

Mitglied
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.

PHP:
<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.

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

HTML:
    <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

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

Apfelkuchen

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

HTML:
    <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

Mitglied Bunt
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:
PHP:
<option <?php if( $value == 1 ) { echo 'selected="selected"'; } ?>></option>
<option <?php if( $value == 2 ) { echo 'selected="selected"'; } ?>></option>
 

Apfelkuchen

Mitglied
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:
PHP:
<option <?php if( $value == 1 ) { echo 'selected="selected"'; } ?>></option>
<option <?php if( $value == 2 ) { echo 'selected="selected"'; } ?>></option>

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)

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

Funktion selectplayer()
PHP:
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

Mitglied Bunt
Hier:
PHP:
echo "<option>".$lastname;
fehlt auch noch ein Wert, auf den du per $_POST zugreifen kannst:
PHP:
echo '<option value="'.$id.'">'.$lastname;


Teste mal folgendes, ich kann nicht versprechen, dass das funktioniert:
PHP:
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:
PHP:
echo selectplayer($_POST['name']); // Den Namen vom Select-Feld eintragen


//edit: @ Mod: Dieses Thema wäre wohl im PHP Forum besser aufgehoben?
 
Status
Nicht offen für weitere Antworten.