Formular-Eingabe auf 8-stellige Zahl prüfen

D

DanLDSkal

Aktives Mitglied
Thread Starter
Dabei seit
12.05.2008
Beiträge
130
Reaktionspunkte
1
Liebe Helfer,

ich stehe mit meinen Anfänger-Kentnissen in PHP wieder einmal an. Ich möchte in meinem PHP-Script prüfen, ob die Eingabe im vorigen Formular eine ganzzahlige Zahl mit 8 Stellen ist. Versucht habe ich es mit den verschiedensten regulären Ausdrücken, aber keiner brachte das gewünschte Ergebnis!
Zur Zeit versuche ich es mit:
PHP:
[PHP]if (!preg_match("/^\d{8}$/", $POST[Datum]))
    echo 'kein gültiges Datum!';
else
    echo 'Datum!';
[/PHP]
Diese Version habe ich von http://php-faq.de/q-regexp-pruefen.html und habe nur die Anzahl der Zeichen fixiert. Woran kann es liegen, dass es nicht funktioniert?
 
Hallo !
Sollte es nicht $_POST['Datum'] heissen ?
(Datum grossgeschrieben ?)

gruss
wiesi
 
Das Formular sieht folgendermassen aus:
PHP:
<form method="post" action="Formular.php">
Datum: <input type="date" name="Datum"> (YYYYMMDD)<br>
<input type="submit" name="Button" value="Abschicken">
</form>
Demnach habe ich Datum einfach auch bei mir grossgeschrieben. Das hinzufügen der ' hat leider nichts gebracht. Das Datum bekomme ich,
PHP:
echo "Datum: $_POST[Datum]<br>";
es wird nur nicht als richtig erkannt!
 
Ich bin kein PHP-Experte, aber in C müßtest Du \\d statt \d schreiben, weil \d interpretiert wird. Oder Du machst einfache Anführungszeichen um den regulären Ausdruck statt doppelte.

Ohne Gewähr.
 
Bei mir funktioniert das.

Aus dem $POST habe ich ein $_POST gemacht und aus dem $_POST[Datum] ein $_POST['Datum'].

Ein input type="date" gibt es nicht (afaik).
Da meinst Du wahrscheinlich input type="text" .

Wie gesagt, bei mir funktioniert das.

Wenn ich 20090824 eingebe und abschicke, erkennt er das richtig als "Datum".

PHP:
<?php
if(!empty($_POST)){
  if (!preg_match("/^\d{8}$/", $_POST['Datum']))
      echo 'kein g&uuml;ltiges Datum!';
  else
      echo 'Datum!';
}
?>
<html>
  <head></head>
  <body>
    <form method="post">
      <input type="text" name="Datum" value="" />
      <input type="submit" name="los" value="los" />
    </form>
  </body>
</html>
 
Abgesehen davon ist preg_match hier vermutlich etwas zu mächtig.
Mach lieber ein paar Zeilen mehr ( preg_match verwendet tatsächlich sehr viel mehr). Ist performanter

Beispiel:
PHP:
<?php
function checkIfisNumber($str='',$num=''){
   if(!is_numeric($num)){$num=8;}
   $gen=false;
   if(is_numeric($str)){
          $a=str_split($str);
         if(count($a)==$num){
             $gen=true;
          }
   }
   return $gen;
}

if(isset($_POST['check']) && !empty($_POST['Datum'])){
  if(checkIfisNumber($_POST['Datum'],8)){
     echo "Entspricht den Vorgaben";
  }else{
    echo "Entspricht nicht den Vorgaben";
   }
 
}
?>
<form method="post">
<input type="text" name="Datum" size="15">
<input type="submit" name="check" value="Datum pr&uuml;fen">
</form>

Ungetestet müsste aber gehen.
 
Danke,

ihr habt mir sehr geholfen!

Ich habe den Fehler entdeckt und konnte ihn beheben. Es ist blöd, wenn man übersieht, dass man statt $_POST $POST schreibt, um nur einen Fehler zu erwähnen ...
 
Abgesehen davon ist preg_match hier vermutlich etwas zu mächtig.
Mach lieber ein paar Zeilen mehr ( preg_match verwendet tatsächlich sehr viel mehr). Ist performanter

Das stimmt, aber…


Beispiel:
PHP:
<?php
function checkIfisNumber($str='',$num=''){
   if(!is_numeric($num)){$num=8;}
   $gen=false;
   if(is_numeric($str)){
          $a=str_split($str);
         if(count($a)==$num){
             $gen=true;
          }
   }
   return $gen;
}

if(isset($_POST['check']) && !empty($_POST['Datum'])){
  if(checkIfisNumber($_POST['Datum'],8)){
     echo "Entspricht den Vorgaben";
  }else{
    echo "Entspricht nicht den Vorgaben";
   }
 
}
?>
<form method="post">
<input type="text" name="Datum" size="15">
<input type="submit" name="check" value="Datum pr&uuml;fen">
</form>

… die Funktion ergibt wohl nicht das erwartete Ergebnis: Gib mal 12345.67 in das Eingabefeld ein, oder 1e411111.
is_numeric() prüft nun mal nicht auf »der String enthält nur Ziffern«.

Und da die gewünschte Eingabe nun mal ein Datum sein soll, würde ich $_POST['Datum'] eher per substr() in seine Bestandteile (Tag, Monat, Jahr) zerlegen und diese mittels checkdate() überprüfen – somit schließt man auch ungültige Daten wie den 31. Februar aus.
 
ihr habt mir sehr geholfen!

Ich habe den Fehler entdeckt und konnte ihn beheben. Es ist blöd, wenn man übersieht, dass man statt $_POST $POST schreibt, um nur einen Fehler zu erwähnen ...

Als Tipp: Während der Entwicklung grundsätzlich als Error Reporting E_ALL anschalten (und Notices nicht abschalten). Dann hätte es direkt eine Meldung gegeben, dass $POST nicht initialisiert ist.
 
  • Gefällt mir
Reaktionen: DanLDSkal
Zurück
Oben Unten