WooCommerce Check: Wie Felder in PHP auf Leer oder wert abfragen?

OP #7791132
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?

#7791174
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') { ....

OP #7791240
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
}
(Firma: Funkenflug Industries) #7791675
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.

#7793915
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

(Firma: Funkenflug Industries) #7794010
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.

#7796786
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

#7796805
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren