Forum: PC-Programmierung WooCommerce Check: Wie Felder in PHP auf Leer oder wert abfragen?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ate E. (drigo)


Lesenswert?

Hallo Leute,

Ich habe beim Webshops eines Freundes eine Checkoutbox für die Leitweg 
ID zwecks digitaler Rechnung hinzugefügt (Danke Herr Staat).

Zu meinem Problem:
Es soll ein Fehler angezeigt werden, wenn:
Das Feld "leitwegid_checkout_field" leer
UND
Das Feld "billing_company_field" nicht leer
UND
Das Feld "billing_country_field" gleich 'Deutschland'
ist.

Aktuell nutze ich folgende Funktion:
1
function customised_checkout_field_process()
2
{
3
// Fehler anzeigen
4
if (!$_POST['leitwegid_checkout_field']) wc_add_notice(__('Bei deutschen Firmen muss die Leitweg ID angegeben werden!') , 'error');
5
}

Wie verknüpfe ich nun die Felder logisch mit einander?

von Achim M. (minifloat)


Lesenswert?

Ate E. schrieb:
> logisch mit einander?

Mit logischen Operatoren ...
https://www.php.net/manual/de/language.operators.logical.php
1
if( (!$_POST['leitwegid_checkout_field']) and
2
($_POST['billing_company_field) and
3
...)
4
{//Machen Sachen}

Deutschland wird dann mit Stringvergleich gemacht und der Rückgabewert 
von strncmp mit in die logische Kette vom if?

mfg mf

von Weingut P. (weinbauer)


Lesenswert?

Das würde ich eher auf der Formularseite per JS abfangen, bevor die form 
gesendet wird. Aber wenns in PHP sein muss:

Es soll ein Fehler angezeigt werden, wenn:
if ($_POST['leitwegid_checkout_field'] == '' && 
$_POST['billing_company_field'] != '' && $_POST['billing_country_field'] 
== 'Deutschland') { ....

von Franko S. (frank_s866)


Lesenswert?

Dafür gibts die Filterfunktionen.

von Ate E. (drigo)


Lesenswert?

Habe nun folgendes in der function.php eingefügt.
Leider funktioniert es noch nicht ganz bzw. gar nicht :-(
1
function customised_checkout_field_process()
2
{
3
if ($_POST['leitwegid_checkout_field'] == '' && 
4
$_POST['billing_company_field'] != '' && 
5
$_POST['billing_country_field'] == 'Deutschland') 
6
{wc_add_notice(__('Bei deutschen Firmen muss die Leitweg ID angegeben werden!') , 'error'); // Fehler anzeigen
7
}
8
}

von Oliver S. (oliverso)


Lesenswert?

Ganz unabhängig von der Ausführung der Abfrage ist die Leitweg ID nur 
zwingend erforderlich für Rechnungen an die "öffentliche Hand" - sprich: 
Behörden.

Falls in dem Shop also nicht nur Behörden einkaufen, sondern auch andere 
B2B-Kunden, ist deine Logik nicht passend.

Oliver

von Ate E. (drigo)


Lesenswert?

Ich denke mal das die Felder verkehrt sind, weil sie in einem Array 
liegen:
https://woocommerce.github.io/code-reference/classes/WC-Checkout.html#965-991

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

> Das würde ich eher auf der Formularseite per JS abfangen,
> bevor die form gesendet wird.
Das schützt Dich nicht davor, es in PHP nochmal zu machen - denn sonst 
kommen irgendwelche Sparfüchse und Scriptkiddies ganz schnell auf die 
Idee, Dir manipulierte Formulardaten zu schicken... in der Hoffnung, in 
anderen Ländern (vor allem in "undefined" oder "n/a"-Land) gibt's 
bessere Preise, vor allem wenn durch weitere Nachlässigkeiten im 
Programm bspw. Land in Deiner Datenbank nicht gefunden wird und dann 
möglicherweise ein Rückgabewert von Null übernommen wird. Oder sie 
finden es einfach lustig, wenn so eine Seite crasht oder infolge von 
manipulierten Eingaben "Daten leakt".

> $_POST['billing_country_field'] == 'Deutschland'
Funktioniert nur, wenn der User auch wirklich "Deutschland" eingibt. 
"deutschland" führt bereits zu einem Fail.

Bau das nach alle Kontrollen. Also nicht direkt die Eingaben verwenden, 
sondern erstmal auf Plausibilität prüfen und ggf. korrigierte Eingaben 
checken, mit denen Du auch weiterarbeiten würdest.

von Weingut P. (weinbauer)


Lesenswert?

Ben B. schrieb:
> Bau das nach alle Kontrollen. Also nicht direkt die Eingaben verwenden,
> sondern erstmal auf Plausibilität prüfen und ggf. korrigierte Eingaben
> checken, mit denen Du auch weiterarbeiten würdest.

Das hat der TO so in seiner Beschreibung ... sowohl Deutschland als auch 
$_POST
¯\_(ツ)_/¯

klar kann man stristr abfragen und n real_escape etc.pp. durchlaufen

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Hä?

In $_POST[] landen alle ungefilterten Eingaben, die irgend ein User bzw. 
potentieller Angreifer in seinem HTTP-POST Request mitschickt. Man kann 
da jeden Müll schicken, Webbrowser sind nicht die einzigen Programme, 
die solche Requests abschicken können. Man kann die Namen der 
mitgeschickten Variablen und ihren Inhalt komplett frei wählen, egal was 
das Script aus dem Formular erwartet oder nicht. Wenn man sowas nicht 
gewissenhaft dekontaminiert und dann z.B. sowas wie
1
SELECT kundennummer FROM kunden WHERE kunde=$_POST['kunde']
an seine Datenbank schickt, dann bekommt man ganz schnell ein riesen 
Problem.

von Weingut P. (weinbauer)


Lesenswert?

Ben B. schrieb:
> Hä?
>
> In $_POST[] landen alle ungefilterten Eingaben, die irgend ein User bzw.
> potentieller Angreifer in seinem HTTP-POST Request mitschickt. Man kann
> da jeden Müll schicken, Webbrowser sind nicht die einzigen Programme,
> die solche Requests abschicken können. Man kann die Namen der
> mitgeschickten Variablen und ihren Inhalt komplett frei wählen, egal was
> das Script aus dem Formular erwartet oder nicht. Wenn man sowas nicht
> gewissenhaft dekontaminiert und dann z.B. sowas wie
>
1
> SELECT kundennummer FROM kunden WHERE kunde=$_POST['kunde']
2
>
> an seine Datenbank schickt, dann bekommt man ganz schnell ein riesen
> Problem.

Noch besser wird’s mit $_REQUEST, dann frisst das Script alles was kommt 
… sag’s dem TO

von Sheeva P. (sheevaplug)


Lesenswert?

Ate E. schrieb:
> Zu meinem Problem:
> Es soll ein Fehler angezeigt werden, wenn:
> Das Feld "leitwegid_checkout_field" leer
> UND
> Das Feld "billing_company_field" nicht leer
> UND
> Das Feld "billing_country_field" gleich 'Deutschland'
> ist.

Bitte entschuldige, ich weiß, Du und vermutlich die meisten anderen 
Leser dieses Thread wollen das nicht lesen und nicht hören, aber... bist 
Du Dir sicher, daß Du mit Deinen Kenntnissen in PHP der Richtige bist, 
um an einem Webshop herum zu hantieren? 8-O

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.