PHP, MySQL mit FOR die Eintragsnummer der Datensätze erhöhen?

capodesign

Grünschnabel
Liebe Mitglieder
Ich stehe vor folgendem Problem:

Ich kann per Javascript-Button dynamisch eine neue Reihe Inputfelder in einem Formular erzeugen.
Es entsteht pro Klick folgendes:
Einheit, Menge, Artikel, RezeptID, Text

Diese Inputfelder werden pro Klick auf den Button (so von mir angepasst) automatisch hochnummeriert, das sieht dann so aus:
Einheit1, Menge1, Artikel1, RezeptID1, Text1
Einheit2, Menge2, Artikel2, RezeptID2, Text2
etc..

Nun möchte ich, damit nicht für jeden Datensatz neu eine VALUE - Reihe geschrieben wird und dann leere Felder in die DB gespeichert werden eine FOR-Schleife einbauen wo jeder Datensatz automatisch hochnummeriert wird mit START ab 1 - max.30.

Im hier vorliegenden PHP-Beispiel werden die ersten 5 generierten Reihen eingefügt man könnte dies ja nun auf bis 30 Reihen erweitern jedoch entstehen so leere Felder in der DB die nicht nötig wären wenn nicht ausgefüllt und es wäre schöner wenn nur die Felder eingetragen werden die auch benötigt werden.

Das müsste doch mit einer FOR-Schleife gehen? Z.B.:
PHP:
  for ($i = 1; $i < 30; $i++)
  {
    ****? $i ****?
  }

Hier das PHP-Beispiel:
PHP:
<?php
if($_POST['submit'] == "submit") {
$mysql_host = "localhost";
$mysql_database = "database";
$mysql_user = "user";
$mysql_password = "password";
$link = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("keine Verbindung möglich");
$db = mysql_select_db($mysql_database) or die ("keine Verbindung möglich");

$sql_befehl = 'INSERT INTO Zutaten (ID,Einheit,Menge,Artikel,RezeptID,Text) VALUES
        ("NULL","'.$_POST['Einheit1'].'","'.$_POST['Menge1'].'","'.$_POST['Artikel1'].'","'.$_POST['RezeptID1'].'","'.$_POST['Text1'].'"),
	("NULL","'.$_POST['Einheit2'].'","'.$_POST['Menge2'].'","'.$_POST['Artikel2'].'","'.$_POST['RezeptID2'].'","'.$_POST['Text2'].'"),
	("NULL","'.$_POST['Einheit3'].'","'.$_POST['Menge3'].'","'.$_POST['Artikel3'].'","'.$_POST['RezeptID3'].'","'.$_POST['Text3'].'"),
	("NULL","'.$_POST['Einheit4'].'","'.$_POST['Menge4'].'","'.$_POST['Artikel4'].'","'.$_POST['RezeptID4'].'","'.$_POST['Text4'].'"),
	("NULL","'.$_POST['Einheit5'].'","'.$_POST['Menge5'].'","'.$_POST['Artikel5'].'","'.$_POST['RezeptID5'].'","'.$_POST['Text5'].'"),
;';


mysql_query($sql_befehl, $link);
echo "Gespeichert";
}
?>

Ich wäre sehr froh um eure Inputs.
Bitte beachtet, dass die PHP-Sicherheit hier nicht im Vordergrund steht sondern die Abklärung des Problems, auch habe ich nach Lösung im Forum und Google gesucht und nicht das richtige gefunden das mir weiterhilft..stehe ja vileicht auch nur auf der eigenen Leitung..

Vielen Dank euch im Voraus!
Gruss capodesign
 
Zuletzt bearbeitet:
Hallo und willkommen bei tutorials.de.

Anhand des Beispiels kann man folgendermaßen auf die Daten zu greifen:

PHP:
for($i = 0; $i < 30; $i++)
{
  if( isset( $_POST['RezeptID' . $i] ) && isset( $_POST['Einheit' . $i] ) .... )
  {
    mysql_query(....)
  }
}

Das heißt, man führt pro Durchlauf immer einen Query mit genau den Werten des $_POST['identifier' . $i] aus.

Im Übrigen: mysql_xxx ist veraltet (deprecated) und sollte nicht mehr verwendet werden. Statt dessen bitte auf MySQLi oder noch besser PDO zurück greifen.

Zum Schluss wäre noch zu erwähnen, dass der Code hochgradig hacking-anfällig ist. Werte aus $_GET, $_POST, $_SESSION, $_COOKIE und $_FILES sollten auf gar keinen Fall ungefiltert und unvalidiert verwendet werden. PDO bietet hier ebenfalls Abhilfe mit Prepared Statements.
 
Hallo saftmeister und vielen Dank für dein Engagement.
Danke auch für die Sicherheitshinweise und Erneuerungstipps.

Ich komme einfach nicht drauf wie ich dies nun umsetzte von deinem Vorschlag ausgehend :(.
Könnte dies so aussehen oder liege ich total falsch...?
Danke für einen weiteren Anstoss..

PHP:
 <?php
if($_POST['submit'] == "submit") {

for($i = 1; $i < 30; $i++)
{
  if( isset( $_POST['Einheit' . $i] ) && isset( $_POST['Menge' . $i] ) && isset( $_POST['Artikel' . $i] ) && isset( $_POST['RezeptID' . $i] ) && isset( $_POST['Text' . $i] ) )
  {
    $sql_befehl = 'INSERT INTO Zutaten (ID,Einheit,Menge,Artikel,RezeptID,Text) 
    VALUES
    ("NULL","'. $_POST['Einheit' . $i].'","...","...","...","...");';
    mysql_query($sql_befehl, $link);
  }
}
echo "Gespeichert";
}
?>
 
Versuch es mal so:

PHP:
<?php
if($_POST['submit'] == "submit") {

for($i = 1; $i < 30; $i++)
{
  if( isset( $_POST['Einheit' . $i] ) && isset( $_POST['Menge' . $i] ) && isset( $_POST['Artikel' . $i] ) && isset( $_POST['RezeptID' . $i] ) && isset( $_POST['Text' . $i] ) )
  {
    $sql_befehl = sprintf("INSERT INTO Zutaten (`Einheit`, `Menge`, `Artikel`, `RezeptID`, `Text`) VALUES ('%s', '%s', '%s', '%s', '%s')",
        $_POST['Einheit' . $i], $_POST['Menge' . $i], $_POST['Artikel' . $i],
        $_POST['RezeptID' . $i], $_POST['Text' . $i]);

    mysql_query($sql_befehl, $link) or die(mysql_error());
  }
}
echo "Gespeichert";
}
?>

Mir ist grade noch aufgefallen, dass du eine Spalte "Text" genannt hast. Das ist ein reservierte Wort und muss daher im SQL-Befehl mittels der sog. Backticks (`) maskiert werden. Desweiteren habe ich mich erdreistet, ein "or die(mysql_error())" an den Query anzuhängen, da man dadurch schneller Fehler finden kann. Meine Vermutung ist, dass bei dir keine Daten gespeichert wurden, weil der Spaltenname "Text" mit dem Datentypen "TEXT" kollidiert ist.
 
Lieber saftmeister

Die Oben stehende Antwort ist die Lösung!

TAUSEND DANK! Wär ich eine Frau würd ich dich glatt küssen :)******!
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück