jensgebken
Goto Top

Anlegen eines datensatzes

Hallo Gemeinschaft,

hab eine verständnisfrage - wie würde bei so einem Datenbankkonstrukt der insert befehl lauten für eine neue bestellung. Verstehe es nicht genau, wie ich an die order_id komme , die dann in der orders_product eingetragen wird - die products und customer sind mir klar - benötige nur die hilfe bei dem eintrag eines neuen datensatzes in die order und order_products


products
products_id
products_ean
products_quantity
products_shippingtime
products_model

customers
customers_id
customers_gender
customers_firstname
customers_lastname

order
orders_id
customers_id
customers_name
customers_firstname
customers_lastname
customers_gender
customers_company
customers_street_address


order_product
orders_products_id
orders_id
products_id
products_model
products_name

Content-Key: 448229

Url: https://administrator.de/contentid/448229

Printed on: April 26, 2024 at 08:04 o'clock

Member: em-pie
em-pie May 07, 2019 updated at 16:45:43 (UTC)
Goto Top
Moin,

aufgrund deiner sehr dünnen Informationsangabe, schaue dir mal den Befehl mysql_insert_id() an:
https://www.php.net/manual/de/function.mysql-insert-id.php
sowie hier: https://www.w3schools.com/php/php_mysql_insert_lastid.asp


alternativ: https://www.google.com/search?q=php+sql+insert+value+and+return+unique+i ...
Gruß
em-pie
Member: Pjordorf
Pjordorf May 07, 2019 at 16:57:52 (UTC)
Goto Top
Hallo,

Zitat von @jensgebken:
Verstehe es nicht genau, wie ich an die order_id komme ,
Nun, da du diese Tabellenstruktur dir hast einfallen lassen, soltest du schon wissen wie und womit das Tabellenfeld Orders_id gefüllt wird. Primary Key, Integer, Lond,Character oder whatsoever. Sollte die auch Unique sein oder kann es davon Doppelte geben usw usw. Schau in deiner Felddefinition rein, dein Datenbankentwurf, Felderdefinition und abhängigkeiten wo du was definiert hast. Und zum Insert hat die ja schon @em-pie was geschrieben.
https://docs.microsoft.com/de-de/sql/relational-databases/tables/view-th ...
users.informatik.uni-halle.de/~brass/db05/da_tabdf.pdf
https://modern-sql.com/de/anwendung/netzwerk-latenzen-fuer-insert-verrin ...
https://docs.microsoft.com/de-de/sql/t-sql/statements/insert-transact-sq ...
https://www.dofactory.com/sql/insert

Gruß,
Peter
Member: Crusher79
Crusher79 May 07, 2019 updated at 17:13:25 (UTC)
Goto Top
Hallo,

wie an die id kommen? Wer hat denn die DB aufgebaut?

Ist beliebig.... Manche haben einen Nummernkreis und dann ist die Nummer 190461. 19 für das Jahr der Rest wird hochgezählt. Enweder hat man einen Auto-Icrement drin oder die Sofware dahinter addiert immer eine oben drauf.

Da gibt es zig Möglichkeiten. Gerade in ERP Systemen kommen diese Daten aus den Grunddaten und können da noch vordefiniert werden. Quasi Jarhespräfix und Offset. Nummer Länge.

Lässt sich auch für alle anderen Nummern (Faktura, Lieferschein) so machen.


mfg Crusher
Member: jensgebken
jensgebken May 08, 2019 at 06:39:27 (UTC)
Goto Top
moin moin - die db struktur ist die von gambio

ich möchte nur von extern - also nicht aus der shopstruktur eine bestellung dort einfügen - wenn ich händisch einen datensatz einfüge, dann klappt das - nun geht es halt um das einfügen in die orders und orderproducts - also füge ich zuerst den ds in die orders ein - merke mir die orders_id und trage diese dann in die orders_products mit ein?

oder wie würdet ihr es machen
Mitglied: 139708
139708 May 08, 2019 updated at 07:19:58 (UTC)
Goto Top
Zitat von @jensgebken:

moin moin - die db struktur ist die von gambio

ich möchte nur von extern - also nicht aus der shopstruktur eine bestellung dort einfügen
Hm, dein Datenbankserver steht mit nackten A.... im Netz?? Du weist hoffentlich schon das da alles unverschlüsselt über die Anleitung geht und der in Nullkommanix übernommen ist?!
oder wie würdet ihr es machen
Den Shop seine Arbeit machen lassen, wenn du nicht die komplette Businesslogik des Shops aus dem FF kennst vergisst du sehr wahrscheinlich wichtige Kleinigkeiten und schon handelst du dir sehr wahrscheinlich ein großes Problem ein, bei Geld hört die Frickelei mit Halbwissen auf.

Gruß wireguard
Member: jensgebken
jensgebken May 08, 2019 at 07:19:03 (UTC)
Goto Top
lieben dank wireguard,

vielleicht kannst du mir ja trotzdem zeigen, wie du es machen würdest - mal deine bedenken aussen vor gelassen
Mitglied: 139708
139708 May 08, 2019 at 07:19:41 (UTC)
Goto Top
Steht oben.
Member: Pjordorf
Pjordorf May 08, 2019 at 10:04:19 (UTC)
Goto Top
Hallo,

Zitat von @jensgebken:
die db struktur ist die von gambio
Dann frage dort bei gambio ob die dir ihre DB Struktur offenlegen und dir auch sagen wo welches Feld noch verwendet wird, die abhängigkeiten und evtl. Stored Procedures bzw. die gesamte Business Logik dir offenlegen. Denn Gambio ist wohl der einzigste der es dir sagen kann. Und bedenke so einfache fälle von netzwerkausfall während zwei Schreibzyklen usw. Nicht das du dann eine Bestell ID hast, aber keine Positionen dazu. Sollte alles aus der Business Logik ersichtlich sein.

Gruß,
Peter
Member: em-pie
em-pie May 08, 2019 updated at 10:19:25 (UTC)
Goto Top
Moin,

dann wäre es "fatal", wenn du am System vorbei direkt in die DB schreibst...

Exkurs:
Für gewöhnlich haben komplexere Systeme immer einen folgenden Aufbau:
  • GUI: dient ausschließlich zur Interaktion mit dem Anwender: Die Daten für Schreib-/ Leseanfragen werden an die Business-Logic weitergereicht, welche etwaige Rückgabewerte an die GUI zurückliefert
  • Business-Logic: Hier werden die empfangenen Daten der GUI (oder DataLogic) verifiziert und ggf. nochmal aufbereitet. auch wird hier auf Plausibilität etc. geprüft.
  • DataLogic: Hier werden die Daten, die aus der Business-Logic stammen, verwendet und in die Datenbank geschrieben/ aus dieser gelesen. Etwaige Rückgabewerte werden dann wieder an die Business-Logic zurückgegeben.

Vorteil solch einer Architektur: ändert sich was an der GUI, bleibt die Buisness- und Datalogic zunächst mal unberührt. Werden Logiken angepasst, hat das erstmal keine Auswirkungen auf andere Schichten. Zudem ist man hier total skalierbar.

<edit>
Hier mal noch etwas Lektüre:
https://en.wikipedia.org/wiki/Multitier_architecture
https://www.itwissen.info/Three-Tier-Architektur-three-tier-architecture ...
https://www.kstbb.de/informatik/oo/20/20_2_Architekturmuster.html
</edit>

So, un nun B2T:
schaue hier mal nach, ob du irgendwelche APIs findest, mit der du deine Daten an die BusinessLogic übermitteln kannst. Denn wenn es die gibt, kannst du die Daten "einfach so" übermitteln. Um die Validierung etc. kümmert sich dann gambio wieder und meckert rum, wenn etwas nicht passt.

Ich selbst kenne das System Null, kann dir daher auch nicht im Detail helfen. Das wäre aber mein vorgehen, um das Produzieren von Datenmüll zu reduzieren/ verhindern.

Gruß
em-pie
Member: jensgebken
jensgebken May 08, 2019 at 11:51:35 (UTC)
Goto Top
nun möchte ich es so machen, dass ich 3 artikel zur auswahl habe und diese in ein array haben muss, damit sie dann in die tab orders_products eingetragen werden

Bildlich sieht es so aus

P1Bild_______P2Bild________P3Bild
AnzahlP1____AnzahlP2_____AnzahlP3

Das Bild ist das Produktbild
die Anzahl darunter mache ich mit einem dropdown

könnt ihr mir bitte zeigen, wie der insert code für die nur orders_product aussieht

so trage ich ersteinmal die bestellung in die orders ein
$link = mysql_connect($servername, $username, $password);
if (!$link) {
    die('Keine Verbindung möglich: ' . mysql_error());  
}
mysql_select_db($db);

mysql_query("INSERT INTO orders (customers_id,customers_name) values ('1','Nicole')");  ->nur ein bsp ds - den richtigen baue ich dann noch  
printf("Letzer eingefügter Datensatz hat id %d\n", mysql_insert_id());  

dann habe ich ja die id für die bestellung

und jetzt wollte ich die drei artikel in abhängigkeit der anzahl in die orders_product einfügen - nur wiess ich nicht wie das mit einem array funktioniert
Member: Pjordorf
Pjordorf May 08, 2019 updated at 11:58:52 (UTC)
Goto Top
Hallo,

Zitat von @jensgebken:
nur wiess ich nicht wie das mit einem array funktioniert
https://www.phpflow.com/php/insert-php-array-into-mysql-table/
https://stackoverflow.com/questions/15013211/how-to-insert-array-of-data ...

Und denk mal über ein neues Google nach. Kostet ja fast nichts, nur deine Daten...

Gruß,
Peter
Member: jensgebken
jensgebken May 08, 2019 at 11:58:52 (UTC)
Goto Top
hi peter,

lieben dank - wie würdest du das array aufbauen - bzw. wie füllen
Member: Pjordorf
Pjordorf May 08, 2019 at 12:04:06 (UTC)
Goto Top
Hallo,

Zitat von @jensgebken:
lieben dank - wie würdest du das array aufbauen - bzw. wie füllen
Gar nicht. Ich kenn noch nicht einmal gambio, da wäre es das gleiche ich würd als nicht Jurist mal eben alle Strafgesetzbücher für Europa neu Verfassen. Du bist doch der Weltbeste Entwickler der alles kann und jede Technick beherrscht. face-smile Evtj. hilft dir dieser Beitrag Gambio Shop

Gruß,
Peter
Member: jensgebken
jensgebken May 08, 2019 at 12:18:20 (UTC)
Goto Top
das hat im moment ja nichts mit gambio zu tun - möchte wissen, wie man aus diesen drei artikeln, bei denen man unter jedem ein anzahl dropdown hat und einen absendebutton für das formular, wie ich dort das array zusammenstellen kann
Member: Pjordorf
Pjordorf May 08, 2019 at 12:32:12 (UTC)
Goto Top
Hallo,

Zitat von @jensgebken:
das hat im moment ja nichts mit gambio zu tun
Sondern? Der Bildzeitung?

möchte wissen, wie man aus diesen drei artikeln, bei denen man unter jedem ein anzahl dropdown hat und einen absendebutton für das formular, wie ich dort das array zusammenstellen kann
https://www.phpflow.com/php/insert-php-array-into-mysql-table/
https://stackoverflow.com/questions/15013211/how-to-insert-array-of-data ...

Gruß,
Peter
Member: jensgebken
jensgebken May 08, 2019 at 12:54:18 (UTC)
Goto Top
hi peter,

möchte gerne wissen, wie du das array erstellen würdest aus dem formular v.o.
Mitglied: 139708
139708 May 08, 2019 updated at 13:32:36 (UTC)
Goto Top
Zitat von @jensgebken:

hi peter,

möchte gerne wissen, wie du das array erstellen würdest aus dem formular v.o.
Das erhältst du doch schon mit $_GET oder $_POST aus dem Formular, dann einfach ne foreach Schleife drüber gelegt und fertig.
https://www.askingbox.de/tipp/php-formular-eingaben-als-array-an-php-skr ...

Also wenn solche Grundlagen schon fehlen sehe ich ganz ganz schwarz und das gleich noch mit einem Shop, aua na das kann was werden ...

<?php
if (isset($_POST['Bestellen'])){  
	$articles = $_POST['article'];  
	foreach($articles as $article){
		echo "Artikel:" . $article['Name'] . "<br>";  
		echo "Anzahl:" . $article['Anzahl'] . "<br>" ;  
		echo '<p>=========</p>';  
		// hier steht dann dein insert statement mit den Variablen wie oben gezeigt
	}
}else{
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">  
<title>Warenkorb</title>
</head>
<style type="text/css">  
	.article{
		margin: 5px;
		border:1px solid gray;	
		width:120px;
		height:150p;
		text-align:center;
		float:left;
	}
</style>
<body>
<form method="post" action="">  
<div class="article">  
	<h3>Artikel A</h3>
	<img src="https://weareexplorers.co/wp-content/themes/15zine/library/images/placeholders/placeholder-378x300.png" width="100" height="100" /><br />  
    <input type="hidden" name="article[Name]" value="Artikel A" />  
    Anzahl: <select name="article[Anzahl]">  
    	<option value="1">1</option>  
      	<option value="2">2</option>  
       	<option value="3">3</option>  
    </select>
</div>
<div class="article">  
	<h3>Artikel B</h3>
	<img src="https://weareexplorers.co/wp-content/themes/15zine/library/images/placeholders/placeholder-378x300.png" width="100" height="100" /><br />  
    <input type="hidden" name="article[1][Name]" value="Artikel B" />  
    Anzahl: <select name="article[1][Anzahl]">  
    	<option value="1">1</option>  
      	<option value="2">2</option>  
       	<option value="3">3</option>  
    </select>
</div>
<div class="article">  
	<h3>Artikel C</h3>
	<img src="https://weareexplorers.co/wp-content/themes/15zine/library/images/placeholders/placeholder-378x300.png" width="100" height="100" /><br />  
    <input type="hidden" name="article[2][Name]" value="Artikel C" />  
    Anzahl: <select name="article[2][Anzahl]">  
    	<option value="1">1</option>  
      	<option value="2">2</option>  
       	<option value="3">3</option>  
    </select>
</div>
<div style="clear:both">  
	<input type="submit" name="Bestellen" value="Bestellen" />  
</div>
</form>
</body>
</html>
<?php
}
?>
Member: jensgebken
jensgebken May 08, 2019 at 13:48:54 (UTC)
Goto Top
Das ist nun mein form

  <form action="script.php" method="post">  
  Artikel A
  <select name="feld">  
  <option value="1">1</option>  
  <option value="2">2</option>  
  <option value="3">3</option>  
  <option value="4">4</option>  
</select>
</p>
<p>Artikel B 
  
    
  <select name="feld">  
  <option value="1">1</option>  
  <option value="2">2</option>  
  <option value="3">3</option>  
  <option value="4">4</option>  
</select>
</p>
<p>Artikel C
    <select name="feld">  
  <option value="1">1</option>  
  <option value="2">2</option>  
  <option value="3">3</option>  
  <option value="4">4</option>  
</select>
</p>
<p>
  <input type="submit" name="submitbutton">  

nun weiss ich nicht, wie ich das array in die mysql tab bekomme

auslesen kann ich es ja so

mal als test orders_id = 1233


das ist ja die struktur der tabelle

orders_products_id->autowert
orders_id
products_id
products_quantity
Mitglied: 139708
139708 May 08, 2019 updated at 13:57:49 (UTC)
Goto Top
Guck nach oben da steht ein Beispiel wie du die Artikel via Schleife vertickerst.
Member: jensgebken
jensgebken May 08, 2019 at 14:24:12 (UTC)
Goto Top
ich habs nun so probiert - klappt leider nicht - ohne fehlermeldung

$servername="rdbms.strato.de";  
$username = "u5454545";  
$password ="54545453";  
$db="5454545454";  
$link = mysql_connect($servername, $username, $password);
if (!$link) {
    die('Keine Verbindung möglich: ' . mysql_error());  
}
mysql_select_db($db);


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 = '220';  
	$art = $article['Name'];  
	$anz = $article['Anzahl'];  


    $sql = "INSERT INTO orders_products (orders_id, products_id, products_quantity) values ('$orders_id', '$art', '$anz')";  
    mysql_query($sql) or exit(mysql_error()); 
Mitglied: 139708
139708 May 08, 2019 updated at 14:36:49 (UTC)
Goto Top
Fehlt ja die Hälfte und das Ende.

  • Erste Devise php Error Anzeige akivieren!
error_reporting(E_ALL);
ini_set('display_errors', 'On');
  • Zweite Devise vernünftige Formatierung nutzen, so hast du selbst keinen Überblick über deinen Code.
  • Dritte Devise nutze prepared Statements und am besten gleich pdo! So löscht dir gleich jeder Anfänger mit SQL-Injection deine komplette Datenbank oder übernimmt im schlimmsten Fall deinen Shop und schleust Schadcode ein.
  • Viertens kauf dir mal ein Buch über PHP sonst wird das nichts.

So denn, ich bin raus.
Viel Erfolg.
Member: jensgebken
jensgebken May 08, 2019 at 20:26:49 (UTC)
Goto Top
Was meinst du mit fehlt die Hälfte - beim insert Befehl
Member: jensgebken
jensgebken May 09, 2019 at 06:00:49 (UTC)
Goto Top
ich habe es jetzt mit msqli versucht - bekomme keine meldung aber auch keinen eintrag in der tabelle

<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');  
$servername="rewewr";  
$username = "rwerewr";  
$password ="rewrewrew";  
$db="rwerewrwr";  

$mysqli = new mysqli($servername, $username, $password, $db);
if ($mysqli->connect_errno) {
    die("Verbindung fehlgeschlagen: " . $mysqli->connect_error);  
}



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 = '220';  
	$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);

	}
}else{
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">  
<title>Warenkorb</title>
</head>
<style type="text/css">  
	.article{
		margin: 5px;
		border:1px solid gray;	
		width:120px;
		height:150p;
		text-align:center;
		float:left;
	}
</style>
<body>
<form method="post" action="">  
<div class="article">  
	<h3>Artikel A</h3>
	<img src="https://weareexplorers.co/wp-content/themes/15zine/library/images/placeholders/placeholder-378x300.png" width="100" height="100" /><br />  
    <input type="hidden" name="article[Name]" value="Artikel A" />  
    Anzahl: <select name="article[Anzahl]">  
    	<option value="1">1</option>  
      	<option value="2">2</option>  
       	<option value="3">3</option>  
    </select>
</div>
<div class="article">  
	<h3>Artikel B</h3>
	<img src="https://weareexplorers.co/wp-content/themes/15zine/library/images/placeholders/placeholder-378x300.png" width="100" height="100" /><br />  
    <input type="hidden" name="article[1][Name]" value="Artikel B" />  
    Anzahl: <select name="article[1][Anzahl]">  
    	<option value="1">1</option>  
      	<option value="2">2</option>  
       	<option value="3">3</option>  
    </select>
</div>
<div class="article">  
	<h3>Artikel C</h3>
	<img src="https://weareexplorers.co/wp-content/themes/15zine/library/images/placeholders/placeholder-378x300.png" width="100" height="100" /><br />  
    <input type="hidden" name="article[2][Name]" value="Artikel C" />  
    Anzahl: <select name="article[2][Anzahl]">  
    	<option value="1">1</option>  
      	<option value="2">2</option>  
       	<option value="3">3</option>  
    </select>
</div>
<div style="clear:both">  
	<input type="submit" name="Bestellen" value="Bestellen" />  
</div>
</form>
</body>
</html>
<?php
}
?>