Url und Beschreibung aus DB holen und editieren

BocaSpanky

Mitglied
Hallo,

folgendes Problem: (reine Unwissenheit ;-) )

Hier erstmal meine Datenbankstruktur:

Code:
-- Tabellenstruktur für Tabelle `bilder`
--

CREATE TABLE IF NOT EXISTS `bilder` (
  `id` int(9) NOT NULL auto_increment,
  `beschreibung` varchar(30) NOT NULL default '',
  `bild_url` varchar(40) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

--
-- Daten für Tabelle `bilder`

Ich möchte in der bilder.php folgendes in Textfeldern ausgeben:

PHP:
$sql = 'SELECT * FROM bilder';
$result = mysql_query($sql);
while($bilder = mysql_fetch_array($result))

HTML:
<table style="width: 100%">
	<tr>
		<td colspan="5"><input style="width: 200px" name="info_name" type="text" value="'.$bilder['beschreibung'].'"><input name="eintragen_bilder" type="submit" value="in Datenbank speichern" ></td>
		<td  align="right" colspan="5" rowspan="2"><img src="http://www.xxx.de/'.$bilder['bild_url'].'" alt="" width="100px" height="100px"></td>
	</tr>
	<tr>
		<td colspan="5"><input style="width: 200px" name="info_bild" type="text" value="'.$bilder['bild_url'].'"></td>
	</tr>
</table>

Also nun krieg ich das Ergebnis in der while schleife. Zwei Textfelder mit der Beschreibung und der Bildurl. Zusätzlich wird das Bild nebendran angezeigt.

Soweit funktioniert alles. Heißt die Ausgabe ist ok sofern natürlich etwas in der DB steht.

HTML und PHP steht bei mir alles in der bilder.php.

Jetzt würd ich gern mit dem Submit Button entweder jeden einzelnen Datensatz, sprich Beschreibung und Url ändern. Wenn nichts geändert wird bleibt ja der Wert der aus der Datenbank kam stehen und wird halt wieder überschrieben.

Oder halt mit einem Submit Button alles ändern was in der while Schleife geändert wurde.
ich denke mir das ich irgendwie die ID ans Update übertragen muss, aber wie is mir ein Rätsel.

PHP:
if (isset($_POST['eintragen_bilder'])) {

$sql = 'UPDATE bilder SET beschreibung=\''.$_POST['beschreibung'].'\',bild_url=\''.$_POST['bild_url'].'\'';  
$eintragen=mysql_query($sql) or die(mysql_error());

Vielleicht kann mir jemand helfen bzw. den Tip oder Link geben.

Ich hoffe ich habs einigermaßen verständlich rübergebracht was ich erreichen will!

Grüße

(P.S. ich hab das Problem schon in anderen Foren gepostet, dort konnte mir aber leider bis jetzt keiner helfen)
 
Zuletzt bearbeitet:
Du fügst in deiner Schleife wo die Textfelder generiert werden noch ein "Hidden-Field" welches nicht angezeigt wird, aber trotzdem übergeben mit der ID. Mit Dieser kannst Du dann per WHERE in deinem Update den Datensatz bearbeiten:

HTML:
<table style="width: 100%">
	<tr>
		<td colspan="5"><input style="width: 200px" name="info_name" type="text" value="'.$bilder['beschreibung'].'"><input name="eintragen_bilder" type="submit" value="in Datenbank speichern" ></td>
		<td  align="right" colspan="5" rowspan="2"><img src="http://www.xxx.de/'.$bilder['bild_url'].'" alt="" width="100px" height="100px"></td>
	</tr>
	<tr>
		<td colspan="5">
<input type="hidden" name="bild_id" value="'.$bilder['id'].'" /><input style="width: 200px" name="info_bild" type="text" value="'.$bilder['bild_url'].'"></td>
	</tr>
</table>

und in dein Update:

PHP:
if (isset($_POST['eintragen_bilder'])) {

$sql = "UPDATE bilder SET beschreibung='".$_POST['beschreibung']."', bild_url='".$_POST['bild_url']."' WHERE id=".$_POST['bild_id'];  
$eintragen=mysql_query($sql) or die(mysql_error());  
}
 
Um jedes einzelne Bild zu ändern, machst du für jedes einzelne Bild quasi erstmal einen eigenen <form>-Tag (z.B. um die <table> herum). Dann musst du dem Script hinterher noch irgendwie übergeben, welches Bild du bearbeitest, dazu eignet sich deine ID wunderbar.

Entweder übergibst du das im action-String von der Form oder über ein <input>-Tag vom type hidden. Im SQL-Query für das Update fügst du dann eine WHERE-Klausel an, die nur diesen Datensatz dann ändert.

Erstellen der Forms:
PHP:
$sql = 'SELECT * FROM bilder';
$result = mysql_query($sql);
while ($bilder = mysql_fetch_array($sql)) {
    echo "<form action='bilder.php?bildID=".$bilder["id"]."' method='post'><table ...>...</table></form>";
}

Überprüfen, ob die Form abgesendet wurde. Wenn ja, Update-Query:
PHP:
if (isset($_POST["eintragen_bilder"])) {
    // Hier vielleicht noch Überprüfen, ob gültige Eingaben gemacht wurden:
    $beschreibung = $_POST["info_name"];
    $url = $_POST["info_bild"];

    $sql = "UPDATE bilder SET beschreibung='".$beschreibung."', bild_url='".$url."' WHERE id='".$_GET["id"]."'";
    $eintragen = mysql_query($sql) or die(mysql_error());
}
 
Danke schonmal für die Antworten. Werd es heut Abend gleich mal ausprobieren.

Wenn es so funktionieren sollte is es ja am Ende doch recht schlüßig alles. ;-)
Darf ja gar nich erzählen was ich alles ausprobiert habe bzw. wielang. :-(
 
Zurück