(PHP) Formulareingabe auf Datum (Format) Prüfen

hazzilein

Lieutenant
Registriert
Mai 2008
Beiträge
692
Servus, hab hier folgendes Programm geschrieben, bin allerdings noch Anfänger wenns um PHP geht und hab mir das alles aus dem bishergelernten in Informatik zusammengebastelt.

Es ist eine Liste bei der man Geburtstage eingeben kann und diese kann man sich dann in einer Tabelle anzeigen lassen, löschen kann man sie auch.

Nun würde ich gerne die Datumseingabe mit checkdate() prüfen aber weiß nicht wie ich das einbauen kann, kann mir da jemand helfen?

Hier der Code:

Das Datum wird wie ihr sehen könnt im Forumlar eingegeben, unter "Geburtstag". Nur wie komme ich jetz an den Inhalt des Formulars, über den Namen oder die ID? Oder kann ich da benutzen was ich will?

Und wie übergeb ich das dann der checkdate Funktion.

Muss ich eine IF schleife machen mit der Bedingung dass checkdate von dem Inhalt des Formulars true ist?


mfg
 
Kommt der Code noch? :D

Das Datum greifst du natürlich so ab, wie jedes andere Formularelement, über den Namen des Feldes:

HTML:
<input type="text" name="tag">
<input type="text" name="monat">
<input type="text" name="jahr">

PHP:
$tag   = $_GET['tag'] # bzw. mit $_POST
$monat = $_GET['monat']
$jahr  = $_GET['jahr']

if(checkdate($monat, $tag, $jahr))
{
  echo "Datum korrekt";
}
else
{
  echo "Datum ungültig";
}
 
Ups Code vergessen, hier kommt er.


<?php

session_start();



// Heredoc
$str = <<<HEREDOC
<b>Meine Geburtstagsliste</b><br><br>
<a href="form.php?typ=1">Geburtstagsliste anzeigen</a><br>
<a href="form.php?typ=2">Geburtstage hinzuf&uuml;gen</a><br>
<a href="form.php?typ=3">Liste l&ouml;schen</a><br><br>
HEREDOC;
echo $str;

// Heredoc und Variable zum geb hinzufuegen
$add = <<<ADD
<html>
<body>
<form action="form.php" method="post">
Vorname:<br/>
<input type="text" name="vorname"><br>
Geburtstag:<br/>
<input type="text" name="geburtstag"><br/><br/>
<input type="submit" value="Absenden">
</form>
</body>
</html>
ADD;
// Geburtstage anzeigen
if($_GET['typ']==1){

$tabelle = "<table border='1'><tr><th>Name</th><th>Geburtstag</th></tr>";
foreach ($_SESSION['geburtstagsliste'] as $vorname => $geburtstag){
$tabelle .= "<tr><td>$vorname</td><td>$geburtstag</td></tr>";}
$tabelle .= "</table>";

echo $tabelle;
}

// Geburtstage hinzuf&uuml;gen
if($_GET['typ']==2){
echo $add;
}

// Wenn Request Methode = Post dann wird Session Variable erweitert
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
$_SESSION['geburtstagsliste'][$_POST['vorname']]=$_POST['geburtstag'];
}else{
$_SESSION['geburtstagsliste'] = array('Struppi' => '28.03.1933');
}

// Geburtstage loeschen
if($_GET['typ']==3){
$_SESSION['geburtstagsliste'] = array('Struppi' => '28.03.1933');
echo ('gel&ouml;scht!');
}


// Bottom.html auf jeder Seite einbinden
require("bottom.html");
?>
 
D.h. in <input type="text" name="geburtstag"> kann jeder ein Datum eingeben. Korrekterweise im Format tt.mm.jjjj?

Dann musst du die Eingabe eben auseinandernehmen um an Tag, Monat und das Jahr zu kommen:

PHP:
$tag   = substr($_POST['geburtstag'], 0, 2);
$monat = substr($_POST['geburtstag'], 3, 2);
$jahr  = substr($_POST['geburtstag'], 6, 4);

if(checkdate($monat, $tag, $jahr)) 
...
 
Musst du den Besucher nur dazu bringen, das Datum im englischen Format einzugeben ;)
Diese Funktion erwartet einen String mit einem Datum in US-englischem Datumsformat

Wobei man bei einem einfachen Inputfeld sowieso irgendwo angeben sollte, in welchem Format die Eingabe erfolgen muss.
 
Hm das werd ich beides mal ausprobieren, danke an euch.

Wusste nicht dass ich das zerlegen muss.
 
Naja, checkdate braucht drei Angaben: Tag, Monat, Jahr.

Wenn das Datum als ein einziger String existiert, dann musst du den String eben irgendwie teilen. Alternative wäre, für Tag, Monat und Jahr je ein eigenes Eingabefeld zu benutzen. Dann bekommst du halt gleich drei einzelne Werte die du direkt in checkdate einfügen kannst.
 
Mr. Snoot schrieb:
Musst du den Besucher nur dazu bringen, das Datum im englischen Format einzugeben ;)

Wobei man bei einem einfachen Inputfeld sowieso irgendwo angeben sollte, in welchem Format die Eingabe erfolgen muss.

nein.
ich weiß nicht ob es an dem eingestellten locale liegt oder woran sonst. aber diese funktion parst mir das deutsche format perfekt, also sowohl 01.12.2010 als auch 1.12.10 usw.
 

Ähnliche Themen

Zurück
Oben