jensgebken
Goto Top

If abfrage einfügen

Hallo Gemeinschaft,

wie bekomme ich es hin, dass nur datensätze in das array geladen werden, dessen Anzahl grösser 0 ist


if (isset($_POST['Bestellen'])){  
	$articles = $_POST['article'];  
	foreach($articles as $article){
	        //	echo "Artikel:" . $article['Name'] . "<br>"; 
		//echo "Anzahl:" . $article['Anzahl'] . "<br>" ; 
		//echo '<p>=========</p>'; 
		
		
		
		

    $orders_id = '222';  
	$art = $article['Name'];  
	$anz = $article['Anzahl'];  


    $sql = "INSERT INTO orders_products (orders_id, products_id, products_quantity) values ('$orders_id', '$art', '$anz')";  
    $mysqli->query($sql);

	}

Content-ID: 451696

Url: https://administrator.de/forum/if-abfrage-einfuegen-451696.html

Ausgedruckt am: 02.04.2025 um 00:04 Uhr

Thomas2
Thomas2 15.05.2019 um 09:05:54 Uhr
Goto Top
Hallo,

Pseudocode:
if (count($deinArray > 0) { mach dein Code }

Gruß,
Thomas
areanod
areanod 15.05.2019 um 09:18:56 Uhr
Goto Top
Hallo jensgebken,

Ich hab' mich unlängst begonnen mit PHP auseinander zu setzen und habe mir (auch bei $POST) genau die selbe Frage gestellt.
Die magische Antwort für mich war die Funktion EMPTY:

empty — Prüft, ob eine Variable einen Wert enthält

https://www.php.net/manual/de/function.empty.php

In deinem speziellen Fall würde ich dann schreiben (kein Anspruch auf Funktionalität face-smile):

if (isset($_POST['Bestellen'])){  
	$articles = $_POST['article'];  
	foreach($articles as $article){
	        //	echo "Artikel:" . $article['Name'] . "<br>"; 
		//echo "Anzahl:" . $article['Anzahl'] . "<br>" ; 
 	       //echo '<p>=========</p>'; 

         if(!(empty($article['Anzahl'])){  
           $orders_id = '222';  
     	   $art = $article['Name'];  
 	   $anz = $article['Anzahl'];  
           }
 
 
     $sql = "INSERT INTO orders_products (orders_id, products_id, products_quantity) values ('$orders_id', '$art', '$anz')";  
     $mysqli->query($sql);
 
 	}

Damit sollte $art und $anz nur geschrieben werden wenn "Anzahl" zwar existiert (isset) allerdings keinen Wert enthält.

lG
Areanod
SlainteMhath
SlainteMhath 15.05.2019 aktualisiert um 09:34:31 Uhr
Goto Top
Moin,

$articles = $_POST['article'];  
	foreach($articles as $article){
...
           $art = $article['Name'];  
 	   $anz = $article['Anzahl'];  
...
 $sql = "INSERT INTO orders_products (orders_id, products_id, products_quantity) values ('$orders_id', '$art', '$anz')";  
 $mysqli->query($sql);

Bitte beschäftigt euch unbedingt mit sicherer PHP/SQL Programmierung. Ihr züchtet euch 1a Spam/Virenschleudern wenn ihr solchen Code verwendet, der für SQL Injektions und/oder XSS anfällig ist.

lg,
Slainte

/EDIT: Typos.
maretz
maretz 15.05.2019 um 10:34:01 Uhr
Goto Top
Ok - dir ist sicher bewusst das du da ne wunderbare art für SQL-Injections grad geschaffen hast?

Unabhängig davon - was meinst du mit "dessen anzahl grösser 0 ist"? Meinst du bei Anzahl? dann wräe ja z.B.
if ($anz>=0) .... dein Freund. Wobei ich noch gleich einige andere Dinge mit prüfen lassen würde:
-> Artikel Name -> Länge > 0 (oder direkt mit ner ID / GUID arbeiten, je nachdem wo die Daten herkommen...
-> $order_id: ich vermute das soll dein Primary Key sein? Dann würde ich den auf auto-increment setzen (oder ne GUID verwenden)
-> Anzahl: Grösser 0 und mit nem Preg-Match prüfen das es nur Zahlen, komma und/oder nen punkt enthält, ggf. 1000er Trennzeichen entfernen.
jensgebken
jensgebken 15.05.2019 um 11:02:16 Uhr
Goto Top
wie würdest du es denn coden, damit es sicherer ist
maretz
maretz 15.05.2019 um 11:04:14 Uhr
Goto Top
schau mal nach z.B. real_escape_string in der php-doku
em-pie
em-pie 15.05.2019 um 11:44:56 Uhr
Goto Top
Zitat von @jensgebken:

wie würdest du es denn coden, damit es sicherer ist


Ganz einfach:
Variablen nicht einfach blind ins SQL-Statement einfügen sondern im Vorfeld validieren.

baue dir Funktionen oder ähnliches, um deine gefüllten Variablen erstmal auf falsche Zeichen zu prüfen.

https://www.google.com/searchq=SQL+Injection+PHP

Hier findest nu ne ganze Menge zu dem Thema...

Und hier noch etwas zum Schmunzeln:
exploits_of_a_mom
Quelle: https://xkcd.com/327/

Gruß
em-pie
139708
139708 15.05.2019 um 12:06:27 Uhr
Goto Top