Seite 2 von 2

Verfasst: 13.02.2006 23:46
von siebenschlaefer
witzigerkiller hat geschrieben:*lol* ne heute ist zu spät, aber morgen...
morgen is schon gleich vorbei, ich fang gleich an dir nen script zu schreiben :lol: :D

Verfasst: 18.02.2006 00:33
von siebenschlaefer
also mein script für dich is fertig :D

Verfasst: 18.02.2006 09:05
von MagMo
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:

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"
}
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

Verfasst: 18.02.2006 12:01
von siebenschlaefer
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:

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 ???

Verfasst: 18.02.2006 15:00
von MagMo
Hi,

ja das kannst du dann darunter anfügen.

Vorschlag:
nach

Code: Alles auswählen

$lang['Empty_extra'] = 'Das Datum der Veranstaltung muss angegeben werden!';
einfügen

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&uuml;ltiges Datum.';
und nach

Code: Alles auswählen

...
{ 
 $error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Empty_extra'] : $lang['Empty_extra']; 
}
einfügen

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']; 
}
Grüße
MagMo

Verfasst: 19.02.2006 18:26
von siebenschlaefer
das is ja der hammer, das funktioniert sogar :D :D :D 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

Verfasst: 19.02.2006 19:54
von siebenschlaefer
funktioniert doch noch nich ganz, diese funktion muss wie auch die möglichkeit der extra info eingabe auf 2 bestimmte foren beschränkt werden :-? auf forum id 2 und 8

Verfasst: 19.02.2006 23:03
von MagMo
Hi,

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']; 
 }
}
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

Verfasst: 20.02.2006 17:05
von siebenschlaefer
jetzt klappts, nur leider immernoch nich so wie ich wollte - habe noch vergessen zu erwähnen dass das ganze zusätzlich nur greifen soll wenn ein neues topic eröffnet wird, antworten sollen von dieser überprüfung ausgeschlossen werden :-?

ich hoffe du erfüllst mir noch diesen einen wunsch :D