morgen is schon gleich vorbei, ich fang gleich an dir nen script zu schreibenwitzigerkiller hat geschrieben:*lol* ne heute ist zu spät, aber morgen...
format einer angabe erzwingen
-
siebenschlaefer
- Mitglied
- Beiträge: 221
- Registriert: 22.01.2003 19:36
- Wohnort: md
-
siebenschlaefer
- Mitglied
- Beiträge: 221
- Registriert: 22.01.2003 19:36
- Wohnort: md
- MagMo
- Ehemaliges Teammitglied
- Beiträge: 584
- Registriert: 30.10.2005 16:06
- Wohnort: Köln
- Kontaktdaten:
Hi,
eine andere (und einzig vernünftige) Möglichkeit wäre auch, dass php die übermittelten Daten überprüft. Dies hat den Vorteil, dass es auch bei Leuten funktioniert, die JavaScript deaktiviert haben. So erhälst du auf jeden Fall IMMER eine gültige Eingabe.
Als Ansatz:Der Code prüft als erstes, ob das Datum im richtigen Format eingegeben wurde. Dann ob die Jahreszahl >= 6 und <= 20 ist. Die letzte Prüfung ist, ob die Eingabe überhaupt ein gültiges Datum ergibt.
Wie der auskommentierte Bereich ("Fehlermeldung") aussehen muss, ist abhängig davon, wo du die Prüfung einbaust. Und das 'wo' ist wieder abhängig davon, in welchem Teil des Forums du dies brauchst.
In der Variablen $Datum hast hinterher die gültige Eingabe, mit der du dann weiterarbeiten kannst, z.B. in der DB speichern.
Grüße
MagMo
eine andere (und einzig vernünftige) Möglichkeit wäre auch, dass php die übermittelten Daten überprüft. Dies hat den Vorteil, dass es auch bei Leuten funktioniert, die JavaScript deaktiviert haben. So erhälst du auf jeden Fall IMMER eine gültige Eingabe.
Als Ansatz:
Code: Alles auswählen
if ((isset($HTTP_POST_VARS['datum']) && (preg_match('/[0-9]{2}\.[0-9]{2}\.[0-9]{2}/',$HTTP_POST_VARS['datum'])))
{
$Tag = substr($HTTP_POST_VARS['datum'],0,2);
$Monat = substr($HTTP_POST_VARS['datum'],3,2);
$Jahr = substr($HTTP_POST_VARS['datum'],6,2);
if (($Jahr < 6) || ($Jahr > 20))
{
// ungültiges Jahresangabe > "Fehlermeldung"
}
elseif (checkdate($Monat, $Tag, ('20'.$Jahr)))
{
$Datum = $Tag . '.' . $Monat . '.' . $Jahr;
}
else
{
// ungültiges Datum > "Fehlermeldung"
}
}
else
{
// ungültiges Format der Eingabe > "Fehlermeldung"
}Wie der auskommentierte Bereich ("Fehlermeldung") aussehen muss, ist abhängig davon, wo du die Prüfung einbaust. Und das 'wo' ist wieder abhängig davon, in welchem Teil des Forums du dies brauchst.
In der Variablen $Datum hast hinterher die gültige Eingabe, mit der du dann weiterarbeiten kannst, z.B. in der DB speichern.
Grüße
MagMo
-
siebenschlaefer
- Mitglied
- Beiträge: 221
- Registriert: 22.01.2003 19:36
- Wohnort: md
vielen dank, ich würde auch mal schätzen dass das die beste lösung is. um das ganze jetzt auch an der richtigen stelle einzuarbeiten stelle ich mal folgende these auf:
wenn dieses eingabe feld bereits eine prüfung enthält die so aussieht:
dann würde ich diesen code direkt darunter einfügen und 'datum' immer mit 'extra' ersetzen ???
wenn dieses eingabe feld bereits eine prüfung enthält die so aussieht:
Code: Alles auswählen
#########################################################################################
##
## MOD Titel: Neues Feld im Postingbereich
## MOD Version: 1.4.2 (phpBB 2.0.5 - 2.0.10)
## optionaler Teil: Infoeingabe ist Pflicht 1.0.2
## Autor: Acid
##
## Beschreibung: Wenn die Eingabe einer Extrainformation erzwungen werden soll..
##
## Dateien zu ändern: 3
## language/lang_german/lang_main.php
## posting.php
## templates/xxx/posting_body.tpl
##
#########################################################################################
##
## Notizen:
## Vor jeglichen Änderungen an Datenbank/Dateien sollten dieser gesichert werden.
##
## Wenn man mehr als ein neues Feld dem Postingbereich hinzugefügt hat, muss man folgende
## Schritte duplizieren und dabei jeweils die Bezeichnungen anpassen (auf Schreibweise
## achten, wie z.B. '$extra', '$topic_extra' oder 'TOPIC_EXTRA' etc.).
##
#########################################################################################
##
## Versionen:
##
## 1.0.2 - erneut modifiziert
## 1.0.1 - modifiziert
## 1.0 - optionalen Teil hinzugefügt
##
#########################################################################################
#
#-----[ ÖFFNEN ]--------------------------------------------------
#
# language/lang_german/lang_main.php
#
#-----[ FINDE ]--------------------------------------------------
#
//
// Posting/Replying (Not private messaging!)
//
#
#-----[ DARUNTER EINFÜGEN ]--------------------------------------------------
#
$lang['Empty_extra'] = 'Das Datum der Veranstaltung muss angegeben werden!';
#
#-----[ ÖFFNEN ]--------------------------------------------------
#
# posting.php
#
#-----[ FINDE ]--------------------------------------------------
#
$subject = ( !empty($HTTP_POST_VARS['subject']) ) ? trim($HTTP_POST_VARS['subject']) : '';
$extra = ( !empty($HTTP_POST_VARS['extra']) ) ? trim($HTTP_POST_VARS['extra']) : '';
#
#-----[ DARUNTER EINFÜGEN ]--------------------------------------------------
if ( !empty($extra) )
{
$extra = htmlspecialchars(trim($extra));
}
else if( empty($extra) && $post_info['forum_extra'] && $mode == 'newtopic' || $post_info['forum_extra'] && ($mode == 'editpost' && $post_data['first_post']) )
{
$error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Empty_extra'] : $lang['Empty_extra'];
}dann würde ich diesen code direkt darunter einfügen und 'datum' immer mit 'extra' ersetzen ???
- MagMo
- Ehemaliges Teammitglied
- Beiträge: 584
- Registriert: 30.10.2005 16:06
- Wohnort: Köln
- Kontaktdaten:
Hi,
ja das kannst du dann darunter anfügen.
Vorschlag:
nacheinfügen
und nach einfügen
Grüße
MagMo
ja das kannst du dann darunter anfügen.
Vorschlag:
nach
Code: Alles auswählen
$lang['Empty_extra'] = 'Das Datum der Veranstaltung muss angegeben werden!';Code: Alles auswählen
$lang['Extra_Ungueltiges_Format'] = 'Das Datum der Veranstaltung muss folgendes Format haben: tt.mm.yy';
$lang['Extra_Ungueltiges_Jahr'] = 'Die Veranstaltung muss zwischen dem 01.01.2006 und dem 31.12.2020 stattfinden.';
$lang['Extra_Ungueltiges_Datum'] = 'Das Datum der Veranstaltung ist kein gültiges Datum.';Code: Alles auswählen
...
{
$error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Empty_extra'] : $lang['Empty_extra'];
}Code: Alles auswählen
if ((!empty($extra)) && (preg_match('/[0-9]{2}\.[0-9]{2}\.[0-9]{2}/',$extra)))
{
$Tag = substr($extra,0,2);
$Monat = substr($extra,3,2);
$Jahr = substr($extra,6,2);
if (($Jahr < 6) || ($Jahr > 20))
{
$extra = '';
$error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Extra_Ungueltiges_Jahr'] : $lang['Extra_Ungueltiges_Jahr'];
}
elseif (checkdate($Monat, $Tag, ('20'.$Jahr)))
{
$extra = $Tag . '.' . $Monat . '.' . $Jahr;
}
else
{
$extra = '';
$error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Extra_Ungueltiges_Datum'] : $lang['Extra_Ungueltiges_Datum'];
}
}
else
{
$extra = '';
$error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Extra_Ungueltiges_Format'] : $lang['Extra_Ungueltiges_Format'];
}MagMo
-
siebenschlaefer
- Mitglied
- Beiträge: 221
- Registriert: 22.01.2003 19:36
- Wohnort: md
das is ja der hammer, das funktioniert sogar
danke danke danke
.....eine frage noch - ich würde noch gern zusätzlich ein "xx" im beim tag zulassen da teilweise auch topics für einen komplettes monatsprogramm angegeben werden und ab dem jahr 2002 erlauben, da topics existieren in denen partyreviews geschrieben wurden seit 2002
.....eine frage noch - ich würde noch gern zusätzlich ein "xx" im beim tag zulassen da teilweise auch topics für einen komplettes monatsprogramm angegeben werden und ab dem jahr 2002 erlauben, da topics existieren in denen partyreviews geschrieben wurden seit 2002
-
siebenschlaefer
- Mitglied
- Beiträge: 221
- Registriert: 22.01.2003 19:36
- Wohnort: md
- MagMo
- Ehemaliges Teammitglied
- Beiträge: 584
- Registriert: 30.10.2005 16:06
- Wohnort: Köln
- Kontaktdaten:
Hi,
benutze folgendes:Wobei die Variable $forum_id die ID des Forums sein müsste. Müsstest du aber vorsichtshalber nochmal nachsehen.
Wenn, dass nur bei den Foren 2 und 8 überprüft werden soll, dann nimmst du das Eingabefeld aber am besten auch bei den anderen Foren raus, damit der Wert gar nicht erst gepostet werden kann.
Grüße
MagMo
benutze folgendes:
Code: Alles auswählen
if (($forum_id == 2) || ($forum_id == 8))
{
if ((!empty($extra)) && ((preg_match('/[0-9]{2}\.[0-9]{2}\.[0-9]{2}/',$extra)) || (preg_match('/xx\.[0-9]{2}\.[0-9]{2}/',$extra))))
{
$Tag = substr($extra,0,2);
$Monat = substr($extra,3,2);
$Jahr = substr($extra,6,2);
if ((($Jahr < 6) || ($Jahr > 20)) && ($Tag != 'xx'))
{
$extra = '';
$error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Extra_Ungueltiges_Jahr'] : $lang['Extra_Ungueltiges_Jahr'];
}
elseif ((($Jahr < 2) || ($Jahr > 20)) && ($Tag == 'xx'))
{
$extra = '';
$error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Extra_Ungueltiges_Jahr'] : $lang['Extra_Ungueltiges_Jahr'];
}
elseif ((checkdate($Monat, $Tag, ('20'.$Jahr))) && ($Tag != 'xx'))
{
$extra = $Tag . '.' . $Monat . '.' . $Jahr;
}
elseif (($Monat >= 1) && ($Monat <= 12) && ($Tag == 'xx'))
{
$extra = $Tag . '.' . $Monat . '.' . $Jahr;
}
else
{
$extra = '';
$error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Extra_Ungueltiges_Datum'] : $lang['Extra_Ungueltiges_Datum'];
}
}
else
{
$extra = '';
$error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Extra_Ungueltiges_Format'] : $lang['Extra_Ungueltiges_Format'];
}
}Wenn, dass nur bei den Foren 2 und 8 überprüft werden soll, dann nimmst du das Eingabefeld aber am besten auch bei den anderen Foren raus, damit der Wert gar nicht erst gepostet werden kann.
Grüße
MagMo
-
siebenschlaefer
- Mitglied
- Beiträge: 221
- Registriert: 22.01.2003 19:36
- Wohnort: md