Foreach-Schleife (Fehler ausgabe)

22hase

Grünschnabel
Heyho.

ich habe so ein script auch.

http://nopaste.php-quake.net/119812

Nur würde ich es gern so haben das dieses Script auch auf mehre Formularzeilen funktionier.

diese zeile habe ich 5 mal so das man immer von 1-5 datensaätze gleichzeitig speichern kann...(als mindestens 1 - maximal 5)

echo '<td align="center">01

PHP:
 <input type="text" name="airport1[]" size="2" value="'; if(isset($_POST['airport1'][0])) echo $_POST['airport1'][0]; echo '" maxlength="3"></td>';
  echo '<td align="center"><input type="text" name="airport2[]" size="2" value="'; if(isset($_POST['airport2'][0])) echo $_POST['airport2'][0]; echo '" maxlength="3"></td>';
  echo '<td align="center"><input type="text" name="airport3[]" size="2" value="'; if(isset($_POST['airport3'][0])) echo $_POST['airport3'][0]; echo '" maxlength="3"></td>';
  echo '<td align="center"><input type="text" name="airport4[]" size="2" value="'; if(isset($_POST['airport4'][0])) echo $_POST['airport4'][0]; echo '" maxlength="3"></td>';
  echo '<td align="center"><input type="text" name="airportz[]" size="2" value="'; if(isset($_POST['airportz'][0])) echo $_POST['airportz'][0]; echo '" maxlength="3"></td>';
  echo '<td align="center"><input type="text" name="via[]" size="2" value="'; if(isset($_POST['via'][0])) echo $_POST['via'][0]; echo '" maxlength="3"></td>';
  echo '<td align="center"><input type="text" name="airline1[]" value="'; if(isset($_POST['airline1'][0])) echo $_POST['airline1'][0]; echo '" size="1" maxlength="2"></td>';
  echo '<td align="center"><input type="text" name="airline2[]" value="'; if(isset($_POST['airline2'][0])) echo $_POST['airline2'][0]; echo '" size="1" maxlength="2"></td>';
  echo '<td align="center"><input type="text" name="preis[]" value="'; if(isset($_POST['preis'][0])) echo $_POST['preis'][0]; echo '" size="3"> €</td>';
  echo '<td align="center"><input type="text" name="tax[]" value="'; if(isset($_POST['tax'][0])) echo $_POST['tax'][0]; echo '" size="3">  €</td>';
  echo '<td align="center"><input type="text" name="saisonvon[]" value="'; if(isset($_POST['saisonvon'][0])) echo $_POST['saisonvon'][0]; echo '" size="6"></td>';
  echo '<td align="center"><input type="text" name="saisonbis[]" value="'; if(isset($_POST['saisonbis'][0])) echo $_POST['saisonbis'][0]; echo '" size="6"></td>';
  echo '<td align="center"><input type="text" name="buchbar[]" value="'; if(isset($_POST['buchbar'][0])) echo $_POST['buchbar'][0]; echo '" size="6"></td>';
  echo '<td align="center"><input type="text" name="aufmin[]" value="'; if(isset($_POST['aufmin'][0])) echo $_POST['aufmin'][0]; echo '"size="6"></td>';
  echo '<td align="center"><input type="text" name="aufmax[]" value="'; if(isset($_POST['aufmax'][0])) echo $_POST['aufmax'][0]; echo '"size="6"></td>';
  echo '</tr><tr>';


leider tu ich mich schwer damit die schleife so anzupassen das wenn sobal airport1[] ausgefüllt ist in dieser zeile die fehler kommen...oder wenn zwei mal airport1[] ausgefüllt ist in den 2 zeilen die fehler kommen...

ich hoffe auch hier könnt ihr mir helfen :)

Grüßle
 
Moin,

könntest du das bitte ein wenig genauer erläutern?

Kommen Fehler und du möchtest diese abstellen oder möchtest du Fehler ausgeben lassen, wenn etwas bestimmtes eingegeben wurde(oder auch nicht).
 
hey...ich möchte fehler ausgeben lassen, wenn zumbeispiel der zielairport lerr ist...

dies soll aber nicht bei jeder zeile kommen...alsi wenn ich zum beispiel nur einen datensatz eintragen will, dort aber ein feld vergesse soll eine meldung kommen,

wenn ich 2 eintragen will und in beiden zeilen was vergesse habe nsollen 2 meldungen kommen.

usw...
 
Hier mal das etwas abgeänderte Skript:
PHP:
<?php
error_reporting(E_ALL);

  //Anzahl Zeilen
$lines=5;

$errorFelder = array();
$felder = array("foo", "bar", "foobar");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
                                charset=ISO-8859-1"   />
<meta name="author"             content="doktormolle" />
<meta name="date"               content="2009-01-21"  />
<title>Formularpr&uuml;fung</title>
<style type="text/css">
<!--
input.error {
    border:2px solid red;
}
-->
</style>
</head>
<body>
<?php


// Prüfung Userinput
if(isset($_POST['ueberpruefung']))
{
  for($line=0;$line<$lines;++$line)
    {
      foreach($felder as $feld)
      {
        if(empty($_POST[$feld][$line]))
          {
            if(!isset($errorFelder[$line]))$errorFelder[$line]=array();
            $errorFelder[$line][$feld] = true;
          }
      }
    }
}



  if(isset($_POST['ueberpruefung']) && empty($errorFelder))
    {
      echo '<h3>Es ist alles OK</h3>';
      //weitere Verarbeitung der Daten....
    }
  else
    {
      if(!empty($errorFelder))
        {
          echo '<h3>Es ist ein Fehler aufgetreten</h3>';
        }
?>


<form method="post">
  <table border="1">
  <?php
    for($line=0;$line<$lines;++$line)
      {
        echo '<tr>
                <td><input type="text" name="foo['.$line.']"'   .((isset($errorFelder[$line]['foo']))   ?' class="error"':'').' value="'.@htmlentities($_POST['foo'][$line]).'">    </td>
                <td><input type="text" name="bar['.$line.']"'   .((isset($errorFelder[$line]['bar']))   ?' class="error"':'').' value="'.@htmlentities($_POST['bar'][$line]).'">    </td>
                <td><input type="text" name="foobar['.$line.']"'.((isset($errorFelder[$line]['foobar']))?' class="error"':'').' value="'.@htmlentities($_POST['foobar'][$line]).'"> </td>
                <td>'.((isset($errorFelder[$line]))?'&lt;--Fehler':'&nbsp;').'</td>
              </tr>';
      }
  ?>

  </table>
  <input type="submit" name="ueberpruefung">
  </form>

<?php
    }
echo '<hr><pre><strong>[$_POST] =&gt; </strong>'.print_r($_POST,true).'</pre>';
?>
</body>
</html>

Die Anzahl der Zeilen gibst du oben in $lines an, der Rest geht von allein.
 
hey,

erstmal super dank dafür..bin sprachlos..

aber da ist es ja so dasman alle ausfüllen muss..also brich alle 3 felder in den 5 zeilen.

was ist aber wenn ich nur einen zum eintragen habe? weißt wie ich meine?

also die 3 felder in der ersten zeile..da sollte er dann bei den 4 zeilen daraunter nicht meckern...did bekommsch net hin
 
Code:
for($line=0;$line<$lines;++$line)
Du musst diese Schleife bei der Prüfung nach dem 1. Durchlauf beenden, dann wird nur die 1.Zeile geprüft....um das zu Erreichen musst du in der Schleifenbedingung $lines durch 1 ersetzen, oder am Ende dieser Schleife ein break; notieren
 
Zuletzt bearbeitet:
Ich glaub ich habsc net ordentlich erklärt.

Es sollen schon 5 Zeilen zum eintragen bleiben. So das man max. 5 datensätze gleichzeigig reinschreiben kann und min. 1

sprich er darf nur in den zeilen fehler bringen wo auch was drin steht, weißte..
 
in welche schleife ich das machen muss ist mir klar ;)

wenn ich da aus 0 -> 1 mache

passiert folgendes.

wird nur die erste geprüft(rot umrahmt) der rest wird nicht geprüft
 
Zuletzt bearbeitet:
Zurück