| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Diskussion: Geburstdatum ausrechnen PHP im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hallo Habo, ich lerne seit einiger Zeit PHP. Habe heute morgen ein kleines Script gebastelt, dass anhand der Eingaben ...
![]() |
| | #1 (permalink) |
| Registriert seit: 21.10.06 ![]() Likes: 0 | Anzeige Hallo Habo, ich lerne seit einiger Zeit PHP. Habe heute morgen ein kleines Script gebastelt, dass anhand der Eingaben Tag,Monat,Jahr das Alter errechnen kann. Ich möchte gerne das ihr meinen Code auf Sinnhaftigkeit und Lesbarkeit mal auseinander nehmt. Nur so kann ich mich verbessern ;-) Hier mal der Code : Code: <?php
/* Dieses PHP-Script findet dein Alter heraus */
//Input User
echo ' Bitte geben Sie ihr Geburtsdatum im Format TT//MM//JJJJ an.
<form action="gebcheck.php" method="POST">
Geb. Tag eingeben : <input type="text" name="tag">
Geb. Monat eingeben : <input type="text" name="monat">
Geb. Jahr eingeben : <input type="text" name="jahr">
<input type="submit">
</form> ' ;
//User Eingaben
$tag = $_POST['tag'];
$monat = $_POST['monat'];
$jahr = $_POST['jahr'];
/*Debug
echo $tag; echo '</br>';
echo $monat; echo '</br>';
echo $jahr; echo '</br></p>';
*/
//Wenn Input ausgefüllt - Rechnung
if($tag && $monat && $jahr != 0){
//Aktuelles Datum
$aktuellesdatum = getdate();
$tag_heute = $aktuellesdatum[mday];
$monat_heute = $aktuellesdatum[mon];
$jahr_heute = $aktuellesdatum[year];
$alter_tage = $tag_heute - $tag;
$alter_monat = $monat_heute - $monat;
if($alter_monat==0){
$ergebnis = $jahr_heute - $jahr;
echo $ergebnis;}
if($alter_tage && $alter_monat != 0){
$ergebnis = $jahr_heute - $jahr -1 ;
echo $ergebnis;}
}
else{
echo "Bitte geben Sie Ihr Gebdatum ein.";}
?> |
| | |
| | #2 (permalink) | |
| Registriert seit: 25.07.06 ![]() Likes: 0 | Zitat:
Code: <?php
/* Dieses PHP-Script findet dein Alter heraus */
//Input User
echo ' Bitte geben Sie ihr Geburtsdatum im Format TT//MM//JJJJ an.
<form action="gebcheck.php" method="POST">
Geb. Tag eingeben : <input type="text" name="tag">
Geb. Monat eingeben : <input type="text" name="monat">
Geb. Jahr eingeben : <input type="text" name="jahr">
<input type="submit">
</form> ' ;
//User Eingaben
$tag = $_POST['tag'];
$monat = $_POST['monat'];
$jahr = $_POST['jahr'];
/*Debug
echo $tag; echo '</br>';
echo $monat; echo '</br>';
echo $jahr; echo '</br></p>';
*/
//Wenn Input ausgefüllt - Rechnung
if($tag && $monat && $jahr != 0){ 1. if($tag && $monat && $jahr != 0){ PHP Interpreter: Ist $tag vorhanden und nicht "0"? Wenn der Besucher also das Feld ausgelassen hat, ist es dennoch vorhanden, aber leer und es steht _nicht_ 0 drin. D.h. obwohl er nichts eingegeben hat, wird in den ersten Anweisungsblock gesprungen. Besser geht es so: Code: if(!isempty($tag) && !isempty($monat) && !isempty($jahr){ Code: //Aktuelles Datum $aktuellesdatum = getdate(); $tag_heute = $aktuellesdatum[mday]; $monat_heute = $aktuellesdatum[mon]; $jahr_heute = $aktuellesdatum[year]; Sonst sprichst du nämlich (eventuell vorhandene) Konstanten an. Als besser die richtige Form angewöhnen. Code: $alter_tage = $tag_heute - $tag;
$alter_monat = $monat_heute - $monat;
if($alter_monat==0){
$ergebnis = $jahr_heute - $jahr;
echo $ergebnis;} Code: if (Bedingung) //oder auch if ( Bedingung )
{
anweisung1;
anweisung2;
} Code: if($alter_tage && $alter_monat != 0){
$ergebnis = $jahr_heute - $jahr -1 ;
echo $ergebnis;}
} Code: else{
echo "Bitte geben Sie Ihr Gebdatum ein.";}
?> Zu allerletzt: Du hast vergessen, Schaltahre mit in deine Rechnung einzubeziehen. | |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Registriert seit: 09.01.05 ![]() Likes: 0 | 1. empty($var) liefert TRUE für eine leere $var zurück. 2. www.php.net/mktime Lies dich in den Link ein, ist das sinnvollste für diese Anwendung, da du dann gleich mal mit dem Unix Timestamp in Berührung kommst ohne den bei Zeitangaben im Serverseitigen Scripten ohnehin nichts geht. Übrigens: mkdate($stunde,$minute,$sekunde,$monat,$tag,$jahr) lässt sich mit fast beliebigen zahlen aufrufen. So ergibt mktime(23,59,59,13,0,1999) (13 für den Monat und 0 für den Tag). Den letzten Tag des Dezember 1999 ;) Wäre die 0 eine 1 würde es dir den 1. Januar 2000 anzeigen. Es sind also beliebige Rechenoperationen möglich. Beispiel: heute ist der 9.01.2008, das sähe in mktime so aus: mktime(0,0,0,9,1,2008) Eingabealter: 25 Tage, 4 Monate, 18 Jahre. Eingabe in mktime(0,0,0,9-25,1-4,2008-18) das gibt dir einen unix timestamp zurück den du mit: date("d-m-Y",mktime(0,0,0,9-25,1-4,2008-18)) als Tag-Monat-Jahr sichtbar machen kannst. Beachte dazu www.php.net/date Hf, Imrahil |
| | |
| | #4 (permalink) | |
| Administrator ![]() Registriert seit: 02.10.01 ![]() ![]() Likes: 30 | Zitat:
Code: if (preg_match("/\d{2}/",$tag) && preg_match("/\d{2}/",$monat) && preg_match("/\d{4}/",$jahr) ){
}
__________________ RL sux big time... auch 2012! Deleting pr0n is like killing your best friend [HaBo] bei Facebook - Werde Fan | |
| | |
| | #5 (permalink) | ||
| Registriert seit: 25.07.06 ![]() Likes: 0 | Zitat:
Code: $tag = ereg_replace ( ".*?(\d{2}).*", "\1", $tag ); | ||
| | |
| | #6 (permalink) | |
| Administrator ![]() Registriert seit: 02.10.01 ![]() ![]() Likes: 30 | Zitat:
![]() Tolleranz ist was für Noobs Was soll ich dem User unter die Arme greifen wenn er zu doof zum tippen ist? (und das auch noch mit einem unperformanten ereg_replace)Btw: Dein ist den Code fehlerhaft. Btw2: Wären hier Dropdown Boxen eh sinnvoller als Inputfelder, womit deine replace-Funktion eh ziemlich sinnlos wird.
__________________ RL sux big time... auch 2012! Deleting pr0n is like killing your best friend [HaBo] bei Facebook - Werde Fan | |
| | |
| | #7 (permalink) | ||
| Registriert seit: 25.07.06 ![]() Likes: 0 | [quote]Original von Mackz [quote]Original von valenterry Damit wäre es ganz schlecht. Also wenn man schon alles überprüft, kann man auch gleich tollerant werden: Code: $tag = ereg_replace ( ".*?(\d{2}).*", "\1", $tag ); Zitat:
Zitat:
Code: $tag = ereg_replace ( "/.*?(\d{2}).*/", "\1", $tag ); | ||
| | |
| | #8 (permalink) |
| Moderator ![]() | Mackz: preg_match()? Naja, das sind auch Kanonen auf Spatzen, da du damit ja nur vergleichst, ob eine zweistellige Zahl eingegeben wurde. Prüfen, ob das Datum gültig ist, muss man immer noch mittels checkdate(), also reicht statt preg_match auch ein simples is_int(). |
| | |
| | #9 (permalink) |
| Administrator ![]() Registriert seit: 02.10.01 ![]() ![]() Likes: 30 | @LX: Auch wieder wahr.... hast recht
__________________ RL sux big time... auch 2012! Deleting pr0n is like killing your best friend [HaBo] bei Facebook - Werde Fan |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| math. Formeln ausrechnen in Java... | Happydead | Code Kitchen | 7 | 12.06.08 22:40 |
| formel ausrechnen [c++] | <b00n> | Code Kitchen | 4 | 07.10.07 16:13 |