WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

Du bist nicht angemeldet.

#1 16.06.2021 11:50:45

bbs2
Mitglied

[gelöst] Fehlermeldung durch private.php

Hallo,

ich habe eine benutzerdefinierte Datumsvalidierung in die evalform.php
integriert. Diese funktioniert super.
Nachteil: Bei einem Update wird die evalform.php überschrieben.

Problem 1:
Daher habe ich eine privat.php und mit den erforderlichen Anpassungen den Validierungscode eingesetzt eingesetzt.
Dieser wird auch angesprochen.

Dies verursacht leider folgende Fehlermeldungen:

2021-06-16T10:32:20+00:00 [Warning] /modules/mpform/private.php:[58]  from /modules/mpform/view.php:[72] eval_form "Undefined variable $field"
2021-06-16T10:32:20+00:00 [Warning] /modules/mpform/private.php:[58]  from /modules/mpform/view.php:[72] eval_form "Trying to access array offset on value of type null"

Hier die Zeilen 58 ff aus der privat.php. Zeile 58:    if($field['type'] == 'date') {

	   if($field['type'] == 'date') {
                   $v = $post_field;
                    $pos=strpos($v,".");
					$pos2=strpos(substr($v,($pos+1)),".");
                                        $date=substr($v,0,($pos));
					$result=preg_match("/^[0-9]+$/",$date,$trashed);
					$month=substr($v,($pos+1),($pos2));
					$result2=preg_match("/^[0-9]+$/",$month,$trashed);
					$year=substr($v,($pos+$pos2+2));                                    
                    $jahr=(int)$year; 
                    global $jahr;					
					$result3=preg_match("/^[0-9]+$/",$year,$trashed);
					
					if((substr_count($v,"."))<>2){
                    return "Falsches Datumsformat. Richtig TT.MM.JJJJ";
					 
                    }
					elseif (!($result)){
                    return "Falsche Datumsangabe";
					 
					}
					elseif (($date<=0)OR($date>31)){
                    return "Falsche Tagesangabe";
					 
					}elseif (($month<=0)OR($month>12)){
                    return "Falsche Monatsangabe";
					 
					}
					elseif (!($result2)){
                    return "Falsche Monatsangabe";
					 
					}
					elseif (!($result3)){
                    return "Falsche Jahresangabe";
					 
	
					}
					elseif (($year<1935)OR($year>2022)){
                    return $jahr." nicht logisch. Die Jahresangabe muss zwischen 1935 und 2022 liegen.";  
					 
					}
					}

Wo liegt der Fehler?

Problem 2:

Wenn ich den Feldtyp Datum wähle, erscheint immer der Kalenderbutton.
Es ist langwierig im Kalender zu einem Geburtsdatum zu navigieren, das z.B. 60 Jahre zurückliegt.
Hier ist die Direkteingabe eigentlich immer schneller.
Kann der Kalenderbutton, falls gewünscht,  beseitigt werden.

Zudem erscheint bei mir der Kalender mit nicht gewollten Zeilenumbrüchen.
Siehe hierzu meine Testseite
https://vlw-rlp.de/pages/datencheck.php

Anmerkung:
Aktuell laufen noch vorläufig die Validierungen in der evalform.php ordnungsgemäß.
Bei fehlerfreien Eingaben wird anschließend noch die privat.php mit o.g. Fehler abgearbeitet.

Viele Grüße
Heinz

Beitrag geändert von florian (17.06.2021 06:17:01)

Offline

#2 16.06.2021 12:05:05

florian
Administrator

Re: [gelöst] Fehlermeldung durch private.php

zu 1)
Der Code aus der evalform.php kann nicht 1:1 in die private.php übernommen werden. Bitte schau Dir die Codebeispiele an.
Du musst innerhalb der private_function_for_field eine angepasste Gültigkeitsprüfung einfügen.
Wenn das Datumsfeld die ID 123 hat, sähe das prinzipiell so aus:

if ($field_id == 123) {
    $v = $post_field;
    ...

zu 2:
Ich hatte auch so einen Anwendungsfall. Ich habe das so umgesetzt, dass das Feld für das Geburtsdatum ein normales "Textfeld (einzeilig)" ist. Mittels einem Code2-Abschnitt auf derselben Seite wie dem Formular lade ich dann den Zebra Date Picker:

-- gelöscht, richtiger Code siehe unten! --

Bei #field123 muss 123 durch die Tatsächliche Feld-ID ersetzt werden.

zebra datepicker

Beim Klick ins Feld im Frontend wird dann ein Kalender geöffnet, bei dem die Datumsauswahl Jahr > Monat > Tag erfolgt und die Auswahl von zukünftigen Daten nicht möglich ist. Der Zebra-Datepicker lässt sich sehr fein granuliert konfigurieren, siehe https://github.com/stefangabos/Zebra_Datepicker

Beitrag geändert von florian (16.06.2021 15:50:15)


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#3 16.06.2021 13:34:35

bbs2
Mitglied

Re: [gelöst] Fehlermeldung durch private.php

Danke für den Hinweis,

in der privat.php funktioniert die Abfrage mit if($field['type'] == 'date') nicht.
Mit  if (($field_id == 11) or ($field_id == 20))  ist es ok.

Die Einbindung des Zebra-Datepicker führt leider zu einem Fehler

2021-06-16T14:23:33+02:00 [Exception] There was an unknown exception: syntax error, unexpected token "<", expecting end of file in line (4) of /temp/modules/code2/section_116.php.inc

<?php 
if (!defined('WB_PATH')) die(header('HTTP/1.0 404 Not Found').'404 Not Found');

<script src="https://cdn.jsdelivr.net/npm/zebra_datepicker@latest/dist/zebra_datepicker.min.js"></script>
<link rel="stylesheet"  href="https://cdn.jsdelivr.net/npm/zebra_datepicker@latest/dist/css/default/zebra_datepicker.min.css">
<script>
$(document).ready(function() {
    $('#field20').Zebra_DatePicker({
    	direction: false,
      format:'d.m.Y',
      sisable_time_picker:true,
      strict:true,
      days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
      months: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
      show_select_today:false,
      zero_pad:true,
      view:'years'
	});
  </script>

Viele Grüße
Heinz

Beitrag geändert von florian (16.06.2021 15:45:37)

Offline

#4 16.06.2021 13:52:24

florian
Administrator

Re: [gelöst] Fehlermeldung durch private.php

code2 im html modus, nicht php


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#5 16.06.2021 15:28:06

bbs2
Mitglied

Re: [gelöst] Fehlermeldung durch private.php

Hallo Florian,

sorry, ich habe in Code 2 nicht aufgepasst und schon war es php.

Leider erscheint das Kalendersymbol nicht.
Das Feld ist ein Textfeld, damit der bordeigene Kalender nicht erscheint. Dieser ist, wie bereits erwähnt, durch
Zeilenumbrüche nicht bedienbar.
Die field_id des Geburtsdatums = 11 bei folgendem code

<script src="https://cdn.jsdelivr.net/npm/zebra_datepicker@latest/dist/zebra_datepicker.min.js"></script>
<link rel="stylesheet"  href="https://cdn.jsdelivr.net/npm/zebra_datepicker@latest/dist/css/default/zebra_datepicker.min.css">
<script>
$(document).ready(function() {
    $('#field11').Zebra_DatePicker({
    	direction: false,
      format:'d.m.Y',
      sisable_time_picker:true,
      strict:true,
      days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
      months: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
      show_select_today:false,
      zero_pad:true,
      view:'years'
	});
  </script>

Ich finde  keine Fehler. Die errorlog ist leer.

Viele Grüße
Heinz

Offline

#6 16.06.2021 15:30:27

webbird
Administrator

Re: [gelöst] Fehlermeldung durch private.php

sisable_time_picker:true,

Müßte das nicht disable heißen?


Ich habe eine Amazon-Wishlist. wink Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal

Offline

#7 16.06.2021 15:33:12

webbird
Administrator

Re: [gelöst] Fehlermeldung durch private.php

bbs2 schrieb:

2021-06-16T14:23:33+02:00 [Exception] There was an unknown exception: syntax error, unexpected token "<", expecting end of file in line (4) of /temp/modules/code2/section_116.php.inc

<?php 
if (!defined('WB_PATH')) die(header('HTTP/1.0 404 Not Found').'404 Not Found');

<script src="https://cdn.jsdelivr.net/npm/zebra_datepicker@latest/dist/zebra_datepicker.min.js"></script>
<link rel="stylesheet"  href="https://cdn.jsdelivr.net/npm/zebra_datepicker@latest/dist/css/default/zebra_datepicker.min.css">

...usw...

Vor das <script> gehört ein ?>


<?php 
if (!defined('WB_PATH')) die(header('HTTP/1.0 404 Not Found').'404 Not Found');
?>

<script src="https://cdn.jsdelivr.net/npm/zebra_datepicker@latest/dist/zebra_datepicker.min.js"></script>
<link rel="stylesheet"  href="https://cdn.jsdelivr.net/npm/zebra_datepicker@latest/dist/css/default/zebra_datepicker.min.css">

...usw...

Beitrag geändert von webbird (16.06.2021 15:33:40)


Ich habe eine Amazon-Wishlist. wink Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal

Offline

#8 16.06.2021 15:49:36

florian
Administrator

Re: [gelöst] Fehlermeldung durch private.php

Mein Fehler, sorry. Bianka, Du hast recht, es muss disable_usw heißen, das war aber nicht der Grund, sondern dass ich oben in meinem Codeschnipsel das letzte )}; vergessen hatte (auf meiner SEite sind zwei Datumsfelder).

Also nochmal von vorne:
1) Code2-Abschnitt anlegen
2) Typ HTML wählen (Eingabefeld wird grün unterlegt)
3) Einfügen

<script src="https://cdn.jsdelivr.net/npm/zebra_datepicker@latest/dist/zebra_datepicker.min.js"></script>
<link rel="stylesheet"  href="https://cdn.jsdelivr.net/npm/zebra_datepicker@latest/dist/css/default/zebra_datepicker.min.css">


<script>
$(document).ready(function() {
    $('#field123').Zebra_DatePicker({
    	direction: false,
      format:'d.m.Y',
      disable_time_picker:true,
      strict:true,
      days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
      months: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
      show_select_today:false,
      zero_pad:true,
      view:'years'
	});
});
  </script>

4) Feld-ID anpassen
5) Speichern

Beitrag geändert von florian (16.06.2021 16:02:12)


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#9 16.06.2021 15:59:44

bbs2
Mitglied

Re: [gelöst] Fehlermeldung durch private.php

Hallo,

dies ist natürlich ein Tippfehler, jedoch ohne Auswirkungen

<script"></script>
<link rel="stylesheet"  href="https://cdn.jsdelivr.net/npm/zebra_datepicker@latest/dist/css/default/zebra_datepicker.min.css">
<script>
$(document).ready(function() {
    $('#field11').Zebra_DatePicker({
    	direction: 0,
      format:'d.m.Y',
      disable_time_picker:true,
      strict:true,
      show_icon: true,
      days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
      months: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
      show_select_today:false,
      zero_pad:true,
      view:'years'
	});
}
  </script>

Ist der code noch html8-tauglich?
Liegt es an der Referenz zur field_id?

Gruß
Heinz

Offline

#10 16.06.2021 16:12:01

florian
Administrator

Re: [gelöst] Fehlermeldung durch private.php

Hier geht gerade einiges durcheinander.

In #3 hast Du in die  /temp/modules/code2/section_116.php.inc geschaut. Diese Datei wird vom Code2-Modul automatisch erzeugt und es macht keinen Sinn, diese zu bearbeiten.
Ein Fehler ist deshalb aufgetreten, weil zunächst versucht wurde, HTML/Javascript-Code im Code2-PHP-Modus auszuführen.
Auf diesen Fehler bezieht sich auch Bianka in #7. Das ist aber hier ausnahmsweise der falsche Ansatz.

Nachdem der Fehler mit dem falschen Code2-Modus behoben war, hat der Code immer noch nicht funktioniert, weil ich fehlerhaften Code gepostet habe, wofür ich mich nochmals entschuldigen möchte.
Ich habe dann in #8 den vermeintlich korrekten Code gepostet, der müsste eigentlich so funktionieren.
(Dennoch eine Überarbeitung: Da waren auch noch zwei Zeilen für select2 drin, die braucht es hier aber nicht.)

Der Code in #9 ist unvollständig, da wird das Datepicker-jquery-Plugin nicht geladen. D.h. entweder es wird noch die Zeile

<script"></script>

zu

<script src="https://cdn.jsdelivr.net/npm/zebra_datepicker@latest/dist/zebra_datepicker.min.js"></script>

geändert, oder, falls grundsätzliche Erwägungen gegen das Laden von Scripten via CDN sprechen, es muss sichergestellt werden, dass das jquery-Plugin korrekt eingebunden wird.
Des weiteren fehlt nach dem } und vor dem </script> noch

);

Mit PHP8 hat das alles NICHTS zu tun!


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#11 16.06.2021 17:27:28

bbs2
Mitglied

Re: [gelöst] Fehlermeldung durch private.php

Hallo,

Danke,
jetzt funktioniert es super. Es war die fehlende Klammer );
Fatal.

Ich habe die Datumsfelder so konfiguriert, dass sowohl manuelle Eingabe als auch Datepicker-Eingabe
möglich ist. Der Datepicker öffnet sich dann nur mit einem Klick auf das Kalendersymbol

Bei manueller Eingabe greift die Privat.php und fängt alle Fehleingaben auf.
Allerdings muss ich dies noch ausgiebig testen.

Hier der neue code2

<script src="https://cdn.jsdelivr.net/npm/zebra_datepicker@latest/dist/zebra_datepicker.min.js"></script>

<script>
$(document).ready(function() {
    $('#field11').Zebra_DatePicker({
      direction: 0,
      format:'d.m.Y',
      disable_time_picker:true,
      show_icon:true,
      inside: true,
      strict:true,
      days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
      months: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
      show_select_today:false,
      zero_pad:true,
      open_icon_only:true,
    readonly_element:false,
      view:'years'
	});
   $('#field20').Zebra_DatePicker({
      direction: 0,
      format:'d.m.Y',
      disable_time_picker:true,
      show_icon:true,
      inside: true,
      strict:true,
      days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
      months: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
      show_select_today:false,
      zero_pad:true,
      open_icon_only:true,
    readonly_element:false,
      view:'years'
	});
   $('#field21').Zebra_DatePicker({
      direction: 0,
      format:'d.m.Y',
      disable_time_picker:true,
      show_icon:true,
      inside: true,
      strict:true,
      days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
      months: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
      show_select_today:false,
      zero_pad:true,
      open_icon_only:true,
    readonly_element:false,
      view:'years'
	});
});
  </script>

Die privat.php hänge ich an.

Es ist wie Florian sinngemäß schrieb: Der Zebra-Datepicker kann sehr fein konfiguriert werden.

Viele Grüße
Heinz

Beitrag geändert von bbs2 (09.09.2021 18:26:14)

Offline

Fußzeile des Forums

up