Mehrere Datensätze gleichzeitig ändern

Zero2000

Erfahrenes Mitglied
Hallo

"Ich bin auf der Suche nach einer Möglichkeit, die Werte mehrere Datensätze in einer Liste mit editierbaren Formularfeldern auszugeben und durch einen einzigen Klick zu speichern."

Das beschreibt mein Problem. Leider habe ich das hier im Forum nur für ASP gefunden.
Ich würde das selbe aber gern mit PHP und MySQL tun.
Die Seite in der editiert wird habe ich schon erstellt.

Das Inputfeld sieht so aus:
PHP:
<input style='border:1px solid #000000;background:#ffffff;width:40;' type='text' name='stock_eu[]' value='$bestand_eur'>
Außerdem gebe ich die Originalid in einem versteckten Inputfeld mit.
PHP:
<input type='hidden' name='oriid_eu' value='$stock_eu'>
Nur ist mir unklar, wie die Abfrage an die DB aussehen soll.
Folgendes klappt nicht:
PHP:
mysql_query("UPDATE ls_daten SET bestand_eur='$stock_eu' WHERE Id = $oriid_eu")or die("FEHLER:<br><br>".mysql_error());

Ich danke euch schonmal im vorraus für eure Lösungsvorschläge.

MfG Maik
 

Anhänge

  • bsp.gif
    bsp.gif
    1,9 KB · Aufrufe: 114
Was genau klappt den bei der MySql Abfrage nicht?
Eigentlich müsstet du die Daten mit den Absenden des Formulars auch speichern können.
Kannst du mal die Fehlermeldung posten?

MfG

Ecthelion
 
PHP:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Mehr kommt nicht.
In stock_eu[] habe ich ja die neuen, bzw. auch die alten wenn ich nichts ändere, Daten in einem Array.
Mh... Bin total überfordert mit meinem bischen PHP.

MfG Maik
 
Zeig uns mal bitte die Abfrage (also wie ist die Ausgabe -> Variablen ersetzt) Also lass dir einfach mal mittels echo die Abfrage ausgeben!

Gruß BSA
 
Hallo

@BSA
Ich weiß im Moment nicht was Du willst. Wie oben schon erwähnt habe ich ein Inputfeld mit namen stock_eu[] und als value übergebe ich das feld mit dem Bestand aus der DB (bestand_eu)
Desweiteren übergebe ich ein verstecktes Inputfeld mit name='oriid_eu' und value='$stock_eu'

Die Abfrage sieht so aus:
PHP:
mysql_query("UPDATE ls_daten SET bestand_akt_neu = $stock_eu, bestand_eur = $stock_eu WHERE Id = $oriid_eu")or die("FEHLER:<br><br>".mysql_error());

Ich denke, er weiß gar nicht welche Datensätze er ändern soll, weil er nirgends die richtige ID bekommt.... Nur wo soll ich die denn noch mit übergeben?

MfG Maik
 
kann nicht gehen! Wie schon in der Errormeldung benannt, fehlen ''

Ergo lautet der korrekte query:

PHP:
<?php
mysql_query("UPDATE 
				ls_daten 
			 SET 
			 	bestand_eur='$stock_eu' 
			 WHERE 
			 	Id='$oriid_eu'
			 ") 
			 or die("FEHLER:<br><br>".mysql_error()); 
?>

wenn du mehrere Formularfelder updaten möchtest, setzt du hinter SET im query-string einfach die DB-Spalte mit dem entsprechenden Wert dazu und das getrennt mit einem Komma.

Beispiel
PHP:
<?php
mysql_query("UPDATE 
				ls_daten 
			 SET 
			 	bestand_eur='$stock_eu',
			 	spalte_x='$wert',
			 	spalte_y='$wert1'
			 WHERE 
			 	Id='$oriid_eu'
			 ") 
			 or die("FEHLER:<br><br>".mysql_error()); 
?>

Und immer merken - auflisten und einrücken gilt auch bei query's!
 
Hallo

Es geht auch nicht wenn ich die Variablen in diese ' ' mache.
Ich denke eher es hat was mit dem Array zu tun.
Und müsste nicht die Abfrage in eine Schleife um für jeden Datensatz den Update-Befehl auszuführen

Wenn ich mir die Daten aus dem übergebenen Array stock_eu[] anzeigen lasse, dann stehen genau die Daten drin die ich benötige.

Meine Datei in der das Update ausgeführt wird sieht so aus:
PHP:
if(isset($submit))
{
   mysql_query("UPDATE ls_daten SET bestand_akt_neu = '$stock_eu', bestand_eur = '$stock_eu' WHERE Id = '$oriid_eu'")or die("FEHLER:<br><br>".mysql_error());
   $num_eu = mysql_affected_rows();
   if ($num_eu>0)
   {
      echo "<h3>Datensatz wurde geändert.</h3>";
   }
   else
   {
      echo "<b><font face='Arial' size='3'><u>Es wurden keine Änderungen an diesem Datensatz vorgenommen.</u></font></b><p>";
   }
}
Die Datei mit den Inputfeldern so:
PHP:
$res=mysql_query("SELECT * FROM ls_daten WHERE bestand_akt_neu >0");
$num=mysql_num_rows($res);

//Formularbeginn
echo "<form method='post' action='index.php?action=lager&option=inventur2'>";

//Tabellenbeginn
echo "<table border='0' cellspacing='1' cellpadding='3' bgcolor='#000000'>";

//Tabellen-Überschrift
echo "<tr bgcolor='#dce3f4' align='center'><td><b>ID</b></td><td><b>Sorte</b></td><td><b>Bestand</b></td><td><b>EUR-m²</b></td><td><b>EUR-Pal.</b></td><td><b>EW-m²</b></td><td><b>EW-Pal.</b></td></tr>";

for ($i=0; $i<$num; $i++)
{
$id=mysql_result($res, $i, "Id");
$sorte=mysql_result($res, $i, "sorte");
$zugang_eu=mysql_result($res, $i, "zugang_eu");
$zugang_ew=mysql_result($res, $i, "zugang_ew");
$abgang_eu=mysql_result($res, $i, "abgang_eu");
$abgang_ew=mysql_result($res, $i, "abgang_ew");
$bestand_akt_neu=mysql_result($res, $i, "bestand_akt_neu");
$ein_datum=mysql_result($res, $i, "ein_datum");
$ein_zeit=mysql_result($res, $i, "ein_zeit");
$bestand_eur=mysql_result($res, $i, "bestand_eur");
$eur_menge=mysql_result($res, $i, "eur_menge");
$bestand_ew=mysql_result($res, $i, "bestand_ew");
$ew_menge=mysql_result($res, $i, "ew_menge");

	$count_eu = $bestand_eur / $eur_menge;
	$count_ew = $bestand_ew / $ew_menge;
	$count_ew = number_format($count_ew,2,".",".");
	$count_eu = number_format($count_eu,2,".",".");

//Tabellenzeile mit tabellen
echo "<tr bgcolor='#EDF3F4'><td bgcolor='#EDF3F4'>$id</td><td bgcolor='#EDF3F4'>$sorte</td></td><td align=left>$bestand_akt_neu m²</td><td><input style='border:1px solid #000000;background:#ffffff;width:40;' type='text' name='stock_eu[]' value='$bestand_eur'> m²</td><td>$count_eu</td><td><input style='border:1px solid #000000;background:#ffffff;width:40;' type='text' name='stock_ew[]' value='$bestand_ew'> m²</td><td>$count_ew</td></tr>";
}
// Original ID mitschicken (versteckt)
echo "<input type='hidden' name='oriid_eu' value='$stock_eu'>";
echo "<input type='hidden' name='oriid_ew' value='$stock_ew'>";

//Tabellenende
echo "</table><br>";
echo "<input style='background-color:#ffffff;border:1px solid #000000;font-size:10px;font-family:verdana' type='submit' name='submit' value='Inventur speichern'></form>";
Vielleicht bringt das ja Licht ins Dunkel ;-)

MfG Maik
 
also du hast ein formular, in welchem daten aus der db in die input values gesetzt werden.

nun änderst du einen oder mehrere einträge in dem formular und sendest dieses ab.

mit dem absenden setzt du alle formularfelder in den einen einzigen query wie im beispiel genannt.

fertig.

wenn du das nicht vollständig verstehst, wäre es gut, wenn du dich noch mal mit einem tutorial befasst, welches formularverarbeitung in verbindung mit einer db aufzeigt inkl. änderung von db einträgen.
 
saila hat gesagt.:
also du hast ein formular, in welchem daten aus der db in die input values gesetzt werden.
Richtig....
saila hat gesagt.:
nun änderst du einen oder mehrere einträge in dem formular und sendest dieses ab.
Richtig...
saila hat gesagt.:
mit dem absenden setzt du alle formularfelder in den einen einzigen query wie im beispiel genannt.
Falsch...
Wie soll das denn gehen? Wenn ich aus einer DB 131 Datensätze auslese kann ich doch nicht allen Inputfeldern einen anderen Namen geben. Es existiert in meiner Schleife nur einmal, dieses Inputfeld.
Deswegen mache ich es doch mit einem Array.
saila hat gesagt.:
wenn du das nicht vollständig verstehst, wäre es gut, wenn du dich noch mal mit einem tutorial befasst, welches formularverarbeitung in verbindung mit einer db aufzeigt inkl. änderung von db einträgen.
Damit habe ich keine Probleme. Ich kann auch einzelne Datensätze ändern, löschen, kann meine Formulare per E-Mail wegschicken.
Denn da habe ich ja unterschiedliche Inputfelder mit unterschiedlichen Namen.

In meinem Bsp. habe ich aber EIN Inputfeld und nur EINEN Namen. Ich sammle die Werte in einem ARRAY namens stock_eu[]
Wenn ich mir das ARRAY anzeigen lasse stehen die Werte auch drin wie sie sein sollen.
Aber wenn ich die Abfrage abschicke steht in den Feldern entweder ARRAY oder für alle Felder ein Wert den er sich willkürlich rauspickt.

Warum probierst Du es nicht mal selbst ob DU es hinbekommst?

MfG Maik
 
Du hast doch das Problem nun schon beim Namen genannt, du brauchst eine Schleife. Wo ist das Problem?

Du musst also für jeden Datensatz eine Abfrage machen!

Und ich wollte den String sehen wie er aussieht nachdem er über den Server gelaufen ist.

Sprich:

PHP:
echo 'SELECT $irgendwas FROM $tbl';

Klar?

Gruß BSA
 
Zurück