Seite 1 von 2

Uhrzeit auf gültigkeit prüfen

Verfasst: 22.04.2008, 20:38
von elvls50
Hi

Ich würde gerne eine Zeit prüfen ob sie auch existiert.

Der Nutzer soll die Zeit im Format hh mm ss eingeben (hh in einem Feld, mm in einem Feld....)

Bei Eingabe von 1 30 soll 01:30:00 rauskommen, also die Leerfelder sollen mit einer Null aufgeführt werden.

Und 24:00:00 soll natürlich wie 22:76:34 nicht existieren...

Also das ich das mit einer If Schleife machen soll weis ich, aber dann hörts schon auf...

mfg elvls50

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 22.04.2008, 21:39
von grossy

Code: Alles auswählen

if ((hh>23) || (mm>59) || (ss >56)) 
    {
     echo "error";
     }
else
    {
     echo "richtig";
     }

Verfasst: 22.04.2008, 21:49
von elvls50
thx, sowiet habe ich mir auch schon gedacht, aber das problem wenn derjenige nur eine 1 eingibt besteht immer noch.. aus der 1 soll eine 01 werden

Verfasst: 22.04.2008, 21:58
von Wirths Media
strlen()

Verfasst: 22.04.2008, 22:32
von net(t)worker

Verfasst: 23.04.2008, 08:58
von Hasenhuf
Eventuell müßte man noch negative Zahlen abfangen.

Verfasst: 23.04.2008, 14:31
von elvls50
also haben tue ich ertsmal das hier:

html:

<html>
<head>
<title>zeitprüfen</title>
</head>

<body>
<form method="POST" action="/zeit.php">
<p><input type="text" name="hh" size="5">
</p>
<p><input type="text" name="mm" size="5">
</p>
<p><input type="text" name="ss" size="5">
</p>
<p>
<input type="submit" value="weiter" name="B1"><input type="reset" value="abbr." name="B2">
</p>

<? } ?>

</form>
</body>
</html>



php


<?PHP

$hh = $_POST['hh'];
$mm = $_POST['mm'];
$ss = $_POST['ss'];



if ( ($hh<=23 && $hh<=0) || ($mm<=59 && $mm<=0) || ($ss<=59 && $ss>=0))
{
header('Location: https://www.weiter.de/weiter.htm');
} else {
echo ' zeit existiert nicht';
}

?>

bei 23.00.00 kommt das richtige raus, aber wenn 25.00.00 eingebe kommt auch als richtig rausd?! wo liegt der fehler?

Verfasst: 23.04.2008, 14:37
von net(t)worker
elvls50 hat geschrieben: if ( ($hh<=23 && $hh<=0) || ($mm<=59 && $mm<=0) || ($ss<=59 && $ss>=0))
{
die zeile schau dir nochmal genau an... da wimmelt es nur so von logischen Fehlern...

Verfasst: 23.04.2008, 14:43
von MrJim
Ich würde es als Funktion machen:

Code: Alles auswählen

function checktime &#40;$hh,$mm,$ss&#41;&#123;
	$out=FALSE;
	if &#40; &#40;$hh>=0 && $hh<=23&#41; && 
	     &#40;$mm>=0 && $mm<=59&#41; && 
	     &#40;$ss>=0 && $ss<=59&#41;  &#41;&#123;
		if &#40;strlen&#40;$hh&#41;<2&#41;&#123; $hh = "0".$hh;	&#125;
		if &#40;strlen&#40;$mm&#41;<2&#41;&#123; $mm = "0".$mm;	&#125;
		if &#40;strlen&#40;$ss&#41;<2&#41;&#123; $ss = "0".$ss;	&#125;
		$out = $hh . "&#58;" .$mm . "&#58;" .$ss;
	&#125;
return $out;
&#125;

Verfasst: 23.04.2008, 17:50
von elvls50
@ MrJim...

sieht super aus, nur ich würde gerne eine abbruchanweisung drin haben, also ein else... da meckert aber immer das php... was mach ich falsch?

Verfasst: 23.04.2008, 18:08
von net(t)worker
elvls50 hat geschrieben:... was mach ich falsch?
also dein Fehler ist, das du PHP Scripte erstellen willst, ohne auch nur die Grundlagen von PHP und Scripterstellung verstanden zu haben....

ggf. wäre ein Forum das sich hauptsächlich mit Anfängerfragen zu PHP beschäftigt besser für dich geeignet... hier bei uns bildet PHP/Webcoding nur ein Randthema, während es hauptsächlich um Suchmaschinenoptimierung/Onlinemarketing geht... nur mal so als gutgemeinter Rat...

Verfasst: 23.04.2008, 23:30
von 800XE
net(t)worker hat geschrieben:
elvls50 hat geschrieben: if ( ($hh<=23 && $hh<=0) || ($mm<=59 && $mm<=0) || ($ss<=59 && $ss>=0))
{
die zeile schau dir nochmal genau an... da wimmelt es nur so von logischen Fehlern...
Das ist so unlogisch, das tut weh
man sollte sich überlegen ..... Rechtsberatung ist nicht erlaubt in Foren ..... wann kommt ein Gesetz das man für schmerzhafte ForenPostings SchnerzensGeld verlangen kann?
net(t)worker hat geschrieben:
elvls50 hat geschrieben:... was mach ich falsch?
also dein Fehler ist, das du PHP Scripte erstellen willst, ohne auch nur die Grundlagen von PHP und Scripterstellung verstanden zu haben....
Grundlagen von Programmierung?
Meinten Sie: Grundlagen von logig?
Meinten Sie: Grundlagen von Mathematik?

Code: Alles auswählen

if &#40; &#40;$hh<=23 && $hh<=0&#41; || &#40;$mm<=59 && $mm<=0&#41; || &#40;$ss<=59 && $ss>=0&#41;&#41;
in Worten

Wenn $hh kleinergleich 23 und $hh kleinergleich 0
oder
Wenn $mm kleinergleich 59 und $hh kleinergleich 0
oder
Wenn $mm kleinergleich 59 und $hh größergleich 0


1. Meinten Sie: größer gleich 0?
Denn die Frage nach kleinergleich 0 ist unlogisch wenn es schon kleinergleich 23 oder 59 ist

2. Meinten Sie: und?
Denn, wenn $hh kleinergleich 23 oder $mm kleinergleich 59 sein soll für TRUE
dann ist $hh=800 oder $mm=23 TRUE
dann ist $hh=23 oder $mm=800 TRUE

und nu noch ein wenig mehr als Grundlage

Code: Alles auswählen

$hh = abs&#40; &#40;int&#41;$hh &#41;;
$mm = abs&#40; &#40;int&#41;$mm &#41;;
$ss = abs&#40; &#40;int&#41;$ss &#41;;
if &#40;  $hh<24 && $mm<60 && $ss<60 &#41;
(int) = macht eine Zahl daraus .... für Witzbolde mit "3viertel4" = 3
abs = AbsolutWert .... ist Vorzeichen horhanden, ist es dann nicht mehr vorhanden = macht aus MinusZahl eine Zahl ohne Minus
elvls50 hat geschrieben:Und 24:00:00 soll natürlich wie 22:76:34 nicht existieren...
Wenn ich jetzt irgendwo irgendwie .... immer z.B. 8 Stunden addiere .... dann prüfe ich nicht ob das jetzt 26Uhr ergibt

https://de2.php.net/mktime
mktime( 26, 79, 23, .....DatumvonHeute..
und ich erhalte den Timestamp von 1:19:23 von Morgen
// korektur .... 3:19 ?

Verfasst: 24.04.2008, 06:41
von CIX88
Anstelle von mehreren IF und ABS könnte man einfach auch mit regulären Ausdrücken (preg_match) und in einer Zeile prüfen.

Verfasst: 24.04.2008, 18:39
von Hasenhuf
Wie prüfst Du mit preg_match (und mit vernünftigem Aufwand), ob eine Zahl in einem bestimmten Intervall liegt?

Verfasst: 26.04.2008, 08:40
von CIX88
Hasenhuf hat geschrieben:Wie prüfst Du mit preg_match (und mit vernünftigem Aufwand), ob eine Zahl in einem bestimmten Intervall liegt?
Mein Ansatz würde da so aussehen:

Code: Alles auswählen

$string = <<<EOF
1&#58;30 
01&#58;30 
23&#58;30 
18&#58;30 
3&#58;66 
EOF;

$pattern = '/# 
\b 
&#40;&#91;0-9&#93;|0&#91;0-9&#93;|1&#91;0-9&#93;|2&#91;0-3&#93;&#41; 
&#58; 
&#40;&#91;1-9&#93;|0&#91;0-9&#93;|&#91;1-5&#93;&#91;0-9&#93;&#41; 
\b 
# 
/x';

preg_match&#40;$pattern, $string, $array&#41;; 

echo '<pre>', print_r&#40;$array, true&#41;, '</pre>';

Nehmen wir zum Beispiel den Wert einer Sunde.
Wird nur eine Zahl eingetippt, kann die nur vom 0 bis 9 sein.
Werden 2 Zahlen eingetippt, wo die erste eine 1 ist, muss die zweite 0 bis 9 sein.
Werden 2 Zahlen eingetippt, wo die erste eine 2 ist dann muss die zweite eine 0 bis 3 sein - logisch, was sonst.
Und Minuszeichen etc.. werden gar nicht erst angenommen.

Und ebenso kann ich das auf Minuten, Sekunden oder weis der Geier übertragen.