PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Löschfunktion geht nur teilweise


Auf der Mauer
13.08.2009, 22:49:30
Hallo,

ich habe mir für meinen privaten Mitgliedsbereich eine Funktion gebastelt, mit der ich Bilder sowohl löschen als auch editieren kann. Vorraussetzung dafür ist das die Checkboxen unter den Bilder aktiviert sind. Ich lasse 4 Bilder pro Seite anzeigen und max. 4 Bilder sollen gleichzeitig gelöscht bzw. bearbeitet werden können.

Die Nummern (der markierten Bilder) werden durch eine Variabel in das Valuefeld der Checkbox gesetzt. Das ganze wird in einem Array übergeben.


echo "<td><a href= '$row->Bild' target='pic_haupt'><img class='rand' src='$row->Thumb' title='$row->Beschreibung' width=126 height=126 border=0></a><br><br><input type='checkbox' name='delete[]' value='$row->Nummer'> löschen | bearbeiten<br></td>";


Unter den Bilder habe ich eine Dropdownliste gesetzt in der man entweder löschen auswählt oder bearbeiten. Jetzt ging es noch darum eine Funktion zu schreiben durch welche die jeweilige php Datei ausgeführt wird.

Ich habe es so gelöst: (verteiler.php)


<?php
ob_start();
if ($_POST["Bearbeiten"] == löschen)
{
include "delete.php";
}
else
{
include "edit.php";
}
ob_end_flush();
?>


Dadurch das nur zwei Funktionen (löschen und bearbeiten) zur Auswahl stehen reicht es ja abzufragen ob die erste ausgewählt ist. Wenn nicht dann muss es die zweite sein. Hier wird dann entweder die delete.php oder die edit.php ausgeführt.

In der delete.php wird neben dem Vorschaubild und dem großen Bild auch der dazugehörige Eintrag aus der MySqL Tabelle gelöscht.

Hier brauche ich unbedingt noch Hilfe. Laut meiner Bastelei ist es egal ob 1 Bild oder 4 Bilder markiert sind. Meine Links löschen und wenn keine Nummer enthalten ist dann kann nichts gelöscht werden. Das würde auch zu einer Fehlermeldung führen das es keine Bilder mit dieser Nummer gibt wäre da nicht die Weiterleitung. Der Fehler wird also nicht ausgegeben. Ich hätte das gerne irgendiwe sauberer. Ersteinmal das Array untersuchen wieviele Nummern zwischen (1 und 4) es enthällt.

Hier mal der Code zur delete.php.
re_ sind die großen Bilder und th_ die kleinen.
Der Dateiname ist eine Nummer und die ist bei beiden identisch nur der Präfix ist ein anderer.


<?php

//Pfad zum Bilderordner
$path = "/users/xxx/www/Bilder";

//Array mit den zu löschenden Dateinummern
$Bild = $_POST['delete'];

//Datei vom Server löschen

unlink ("$path/re_$Bild[0].jpg");
unlink ("$path/re_$Bild[1].jpg");
unlink ("$path/re_$Bild[2].jpg");
unlink ("$path/re_$Bild[3].jpg");
unlink ("$path/th_$Bild[0].jpg");
unlink ("$path/th_$Bild[1].jpg");
unlink ("$path/th_$Bild[2].jpg");
unlink ("$path/th_$Bild[3].jpg");

//SessionID Wichtig für Wiederaufnahme der Session bei Weiterleitung
$SESSID = $_POST['PHPSESSID'];

//Verbindung zur Datenbank herstellen
include 'connect.php';

//Löschen der passenden Datensätze aus MySql Tabelle
$loeschen = "DELETE FROM BildDB WHERE Nummer IN ('$Bild[0]','$Bild[1]','$Bild[2]','$Bild[3]')";
$loeschen = mysql_query($loeschen);

//Weiterleitung zum privaten Memberbereich
header("Location:http://xxx.net/memberbereich.php?PHPSESSID=$SESSID");

?>


Eigentlich funktioniert alles aber eben nur eigentlich. Beim löschen wird zum Beispiel nur das kleine Bild gelöscht das große bleibt im Ordner. Allerdings auch nur wenn nur 1 Bild zum löschen markiert wurde. Wenn zwei Bilder zum löschen markiert werden dann wird von dem zweiten sowohl das kleine als auch das große Bild gelöscht. Das gleiche gilt auch für 3 markierte Bilder. Dann werden 2 komplett gelöscht und 1 bleibt übrig. Manchmal bleibt auch der Eintrag in der My SQL Tabelle stehen und manchmal klappt es ohne Probleme.

Gestern hatte ich die delete.php gleich durch den submit Button ausgelöst da gab es garkeine Probleme beim löschen. Jetzt habe ich nur die verteiler.php eingebaut jetzt hakt es beim löschen. Aber irgendwie funktioniert es schon sporadisch.

Der Code wurde ja gepostet, kann mir jemand sagen wo der Fehler liegt?

Gruß
René

vt1816
14.08.2009, 09:32:51
Wenn noch nicht erfolgt, schalte das Error-Reporting an/höher und verwende mysql_error().

Wieso versuchst Du immer alle Bilder zu löschen - auch wenn nur ein Bild markiert ist?

Auf der Mauer
14.08.2009, 10:27:28
Wieso versuchst Du immer alle Bilder zu löschen - auch wenn nur ein Bild markiert ist?

Hallo vt1816,

genau das ist das Problem das zu den Fehlermeldungen führt.
Ich bekomme die Meldungen das es kein Bild mit der Nummer gibt. Das ist klar wenn nur ein Bild zum löschen markiert wurde aber 4 versucht werden zu löschen.
Ich müßte ja ersteinmal das Array untersuchen wieviele Werte [Bildnummern] (min. 1 max 4) es enthällt. Und das dann auch nur vorhandene Nummern verwendet werden.

Genau da hapert es aber. Ich hatte mir da gedacht das ich einfach für jede Eventualität
einen Löschanforderung anfertige was bei 4 Bildern 8 Löschanforderungen ergibt und nur Bilder bei denen Nummern vorhanden sind gelöscht werden. Die anderen müßten den Wert NULL haben und da passiert dann nix. So geht es aber nicht.

Durch die Fehlermeldungausgabe kommt auch noch die Meldung das der Header nicht modifiziert werden kann. Das kommt aber denke ich nur durch die Fehlermeldungen.
Wenn die Fehler aus dem Script sind verschwindet bestimmt auch diese Meldung und dann käme ich auch ohne ob_start() und ob_end_flush() aus.

Jetzt teste ich das nochmal mit dem Error Reporting und mysql_error().
Ich hatte beide drin im Script dann aber wieder rausgenommen weil ich die Fehlermeldungen nicht haben wollte. Doof ne ;-)

Ich tippe aber mal darauf das es die Fehlermeldungen sind die ich hier angegeben habe und die Ursache scheint ja auch schon ausfindig gemacht zu sein.

Gruß
René

vt1816
14.08.2009, 10:32:21
Wenn Du ein/das Array mit den zu löschenden Bildern hast, durchlaufe es und lösche nur die darin enthaltenen Bilder. Das ist dann auch unabhängig wieviele Bilder markiert wurden. Ergo - keine Fehlermeldung mehr. Wie man ein Array durchläuft ist Dir bekannt?

Auf der Mauer
14.08.2009, 10:44:16
Hallo vt1816,

danke für die Antwort. Das müßte mit foreach() gehen, oder?
Ich lese mir das dann mal durch.

Gruß
René

vt1816
14.08.2009, 10:56:11
Ja, ein for() (http://de.php.net/manual/de/control-structures.for.php) sollte aber auch schon ausreichen ...

Auf der Mauer
14.08.2009, 15:18:46
Puh, schwieriges Kapitel finde ich, wahrscheinlich aber auch nur beim ersten Mal.
Ich habe meinen Code jetzt so angepaßt und eine foreachschleife eingebaut.


$Bild = $_POST['delete'];
foreach($Bild as $Bildnummer)
{
echo $Bildnummer,"<br>";
}


Testweise lasse ich mir jetzt den Inhalt von $Bildnummern ausgeben. Es sind exakt soviele Werte wie ich Bilder zum löschen markiere. Würde aber mal behaupten daß das vorher auch schon ging als ich mir $Bild habe ausgeben lassen. An für sich noch nichts neues.

Die Frage ist wie kann ich mir das jetzt zu nutzen machen und das in die MySQL Löschanfrage einbinden.


$loeschen = "DELETE FROM BildDB WHERE Nummer IN ('$Bildnummer[0]','$Bildnummer[1]','$Bildnummer[2]','$Bildnummer[3]')";


und die Bilder aus dem Ordner:


unlink ("$path/re_$Bildnummer[0].jpg");
unlink ("$path/th_$Bildnummer[0].jpg");


oder enthält die Variabel Bildnummer jetzt in der Schleife temporär alle Bildnummern?
Muss dann nur die eine Variabel Bildnummer in die MySQL Abfrage rein?

Gruß
René

vt1816
14.08.2009, 15:31:36
Nun hast Du doch (fast) alles was Du brauchst.

Baue anstatt der Ausgabe echo $Bildnummer,"<br>"; jetzt unlink und das komplette SQL-Statment ein und fertig...

Auf der Mauer
14.08.2009, 15:49:09
Hallo vt1816,

habe ich sogar selbst hinbekommen ;-)
Nachdem ich etwas auf den Code gestarrt habe kam mir dieselbe Idee.
Allerdings und daran könnte ich vezweifeln wird noch immer ein Bild nicht gelöscht.
Im Grunde dasselbe Problem wie am Anfang.

Ich habe jetzt 1 Bild zum löschen markiert. Das Thumbnailbild wurde ordnungsgemäß entfernt und der MySQL Tabelleneintrag auch. Nur das Originalbild ist noch da.
Wie schon geschrieben Thumbnail und Originalfile haben dieselbe Nummer nur der Präfix ist ein anderer. (re_ und th_)

Hier ist nochmal der neue abgeänderte Code:


error_reporting (E_ALL ^ E_NOTICE);

//SessionID Wichtig für wiederaufnahme der Session bei Weiterleitung
$SESSID = $_POST['PHPSESSID'];

//Pfad zum Bilderordner
$path = "/users/xxx/www/Bilder";

//Array mit den zu löschenden Dateinummern & Foreach - Schleife
$Bild = $_POST['delete'];
foreach($Bild as $Bildnummer)
{
unlink ("$path/re_$Bildnummer.jpg");
unlink ("$path/th_$Bildnummer.jpg");

//Verbindung zur Datenbank herstellen
include 'connect.php';

//Löschen der passenden Datensätze aus MySql Tabelle
$loeschen = "DELETE FROM BildDB WHERE Nummer IN ('$Bildnummer')";
$loeschen = mysql_query($loeschen) or die(mysql_error());

}

//Weiterleitung zum privaten Memberbereich
header("Location:http://xxx.net/memberbereich.php?PHPSESSID=$SESSID");



Gruß
René

vt1816
14.08.2009, 16:30:24
1. Schreibweise der Dateinamen prüfen (Groß-/Kleinschreibung)
2. Rechte prüfen
3. Rückgabewert von unlink (http://de.php.net/unlink) prüfen/verarbeiten

Auf der Mauer
14.08.2009, 16:43:45
Hallo vt1816,

Zu 1.
Die Dateinamen (Bildnummern) sind identisch. Es gibt keinen Schreibfehler.

Zu 2.
Rechte sind in Ordnung, das Thumnailbild wird ja auch aus demselben Ordner gelöscht.

Zu 3.
Werde ich mal ausprobieren.

Mir ist da gerade noch eine Idee gekommen. Wenn jetzt z.B. die Bildnummer 10 durchgelaufen ist, kann es sein das sie dann für die nächste Unlinkfunktion garnicht mehr zur Verfügung steht?
Obwohl $path/th_$Bildnummer.jpg steht ja an zweiter Stelle im Script und dieses wird ja richtig gelöscht. Wenn dann wäre es ja anders herum.

Gruß
René

vt1816
14.08.2009, 16:50:16
Zu 1.
Die Dateinamen (Bildnummern) sind identisch. Es gibt keinen Schreibfehler.

Auch der Pre-/Suffix?



Zu 2.
Rechte sind in Ordnung, das Thumnailbild wird ja auch aus demselben Ordner gelöscht.

Haben beide Bilder auch den gleichen Eigentümer?

Auf der Mauer
14.08.2009, 17:02:56
Auch der Pre-/Suffix?


Denke schon, hier mal per copy & paste die Dateiamen aus dem Bilderordner.
Zugriff erfolgt über Filezilla.

re_1250249940.jpg
th_1250249940.jpg

und hier die Löschaufforderung im Script.


unlink ("$path/re_$Bildnummer.jpg");
unlink ("$path/th_$Bildnummer.jpg");


Beide Bilder liegen im gleichen Ordner aber nur das Thumbnailbild wird gelöscht.


Haben beide Bilder auch den gleichen Eigentümer?


Das Bild wurde von mir raufgeladen und das Thumbnailbild wurde auch von mir erstellt.

Gruß
René

Auf der Mauer
14.08.2009, 17:30:05
Hallo vt1816,

klingt vielleicht doof, aber ich habe jetzt eine zweite Schleife dahintergesetzt.
Jetzt funktioniert es ohne Probleme. Vielleicht konnte die Zahl, welche ja identisch ist
nur einmal benutzt werden. Das heißt um auch das Originalbild zu löschen muss die Schleife ein zweites Mal durchlaufen. Ich lösche jetzt in der ersten Schleife das Vorschaubild und in der zweiten das Originalbild.


$Bild = $_POST['delete'];
foreach($Bild as $Bildnummer)
{
unlink ("$path/th_$Bildnummer.jpg");
}


und


foreach($Bild as $Bildnummer)
{
unlink ("$path/re_$Bildnummer.jpg");
}


Vielen Dank für deine Hilfe!

Gruß
René

vt1816
14.08.2009, 18:29:16
Nicht perfekt - aber wenn es Dich nicht stört, ist es doch in Ordnung ...

Auf der Mauer
15.08.2009, 16:43:48
Hallo vt1816,

Perfekt, was ist schon perfekt? ;-)
Nee stört mich nicht wirklich. Aber man könnte ja ggf. noch angeben wie oft die Schleife durchlaufen soll dann würde vielleicht auch eine ausreichen.

Ich sitze momentan an den Funktionen welche es ermöglichen Bilddaten zu ändern/einzutragen.
Die Bilddaten wenn bereits in der MySql Tabelle vorhanden werden als Vorbelegung in den Eingabefeldern angezeigt. Bis auf das <select></select> feld klappt das auch schon ganz gut. Mit value="$row->Kategorie" geht es da leider nicht.

Da ich ja jetzt bei der Löschfunktion so schön gelernt habe wie man eine foreach Schleife benutzt (eine wirklich feine Sache) möchte ich diese auch bei der anderen Funktion benutzen.

Jetzt habe ich hinter die Inputfeldernamen eine [] gesetzt damit die Inhalte in einem Array gespeichert werden. So hatte ich es ja auch bei den Bildnummern gemacht. Wenn ich jetzt "Daten ändern" klicke wird eine Datei aufgerufen die dafür zuständig ist das die Feldeingaben in die MySql Tabelle geschrieben werden.

Hier wollte ich wieder mit der foreach Schleife arbeiten habe aber Schwierigkeiten weil ich mehrere Arrays habe. Gestern ging es nur um 1 Array.

Ich lasse mir auf dieser Seite testweise alle Array ausgeben und kann bestätigen das alle Arrayinhalte ordnungsgemäß an die zweite Datei übergeben wurden. Wie müßte denn das Gerüst aussehen damit ich die Arrays durchlaufen kann und nur eine Update Funktion für die My Sql Tabelle brauche?

Kann ich hier vielleicht mit array_map() arbeiten um die Arrays vorher zu verbinden und dann eben nur das eine Hauptarray durchlaufen?

Hier ist mal mein bisheriger Code:
Das durchlaufen funktioniert, das geht ja aus der Ausgabe hervor.
Ich will da nur jetzt nicht in jeden Durchlauf eine MySql Abfrage reinsetzen zumal die Bildnummer ja in jedem benötigt werden würde. Die Bildnummer ist nämlich die Zuordnung welche Eintrag überhaupt geändert werden soll.


//Sessionvariabel entgegenehmen
$SESSID = $_POST['PHPSESSID'];
echo "SessionID = $SESSID";

echo"<br><br>";

echo "<b>Bildnummer(n)</b><br>";
$Bild = $_POST['Bildnummer'];
foreach($Bild as $Nummer)
{
echo $Nummer,"<br>";
}

echo "<br><br>";
echo "<b>Titel</b><br>";
$Titel = $_POST['Titel'];
foreach($Titel as $Bildtitel)
{
echo $Bildtitel,"<br>";
}

echo "<br><br>";
echo "<b>Tags</b><br>";
$Tags = $_POST['Tags'];
foreach($Tags as $Stichworte)
{
echo $Stichworte,"<br>";
}

echo "<br><br>";
echo "<b>Beschreibung</b><br>";
$Beschreibung = $_POST['Beschreibung'];
foreach($Beschreibung as $Bildbeschreibung)
{
echo $Bildbeschreibung,"<br>";
}

echo "<br><br>";
echo "<b>Kategorie</b><br>";
$Kategorie = $_POST['Kategorie'];
foreach($Kategorie as $Bereich)
{
echo $Bereich,"<br>";
}

//Verbindung zur Datenbank aufbauen
include 'connect.php';

//Daten in Tabelle ändern
$aendern = "UPDATE BildDB Set Titel = '$Bildtitel' WHERE Nummer = '$Nummer' ";
$update = mysql_query($aendern);


//Weiterleitung zum privaten Memberbereich
header("Location:http://xxx.net/memberbereich.php?PHPSESSID=$SESSID");


Bin für jeden Tip dankbar

Gruß
René

vt1816
16.08.2009, 08:49:39
Wie sieht der Inhalt der vier Arrays aus? Werden immer alle Angaben zu allen Bildern geändert? Bei vier Bildern wird ein SQL-Statment nicht ausreichen.

Auf der Mauer
16.08.2009, 12:20:52
Hallo vt1816,

ich habe in der Zwischenzeit etwas rumgetestet.

Code 1 (foreach)


echo "<b>Bildnummer(n)</b><br>";
$Bild = $_POST['Bildnummer'];
foreach($Bild as $Nummer)
{
echo $Nummer,"<br>";
}


Ausgabe ist:


1250338537
1250266131
1250262501
1250260272


Code 2 (array_merge)


<pre>
<?php

$Werte = array_merge ($Bildnummer, $Titel ,$Stichworte );
print_r($Werte);

?>
</pre>


Ausgabe ist:


Array
(
[0] => 1250338537
[1] => 1250266131
[2] => 1250262501
[3] => 1250260272
[4] => Rosa Blüte
[5] => Wartende Frau
[6] => Rote Beeren
[7] => Bella Luna
[8] => Balkonblüte
[9] => Bronzestatue
[10] => Beeren
[11] => Vollmond
)
Array


Hier wird alles nacheinander ausgegeben.
Nummer 0, 4, 8 wären 1 Eintrag und Nummer 1, 5, 9 wäre der zweite Eintrag usw.

Code 3 (array_map)


<pre>
<?php

function verbinden($m, $n) {
return array ($m => $n);
}
$Bildnummer = $_POST['Bildnummer'];
$Titel = $_POST['Titel'];
$Stichworte = $_POST['Tags'];

$Werte = array_map("verbinden", $Bildnummer, $Titel, $Stichworte);
print_r($Werte);

?>
</pre>


Ausgabe ist:


(
[0] => Array
(
[1250338537] => Rosa Blüte
)

[1] => Array
(
[1250266131] => Wartende Frau
)

[2] => Array
(
[1250262501] => Rote Beeren
)

[3] => Array
(
[1250260272] => Bella Luna
)

)



Ich denke das sieht doch schon besser aus. Im letzten Beispiel werden die Daten pro Array gespeichert. Das heißt Array 1 entällt einen kompletten Datensatz (Nummer und Titel) und Array zwei auch und so weiter.
Ich konnte bisher aber noch kein weiteres Array hinzufügen warum weiß ic nicht.
Ich dachte oben bei function kommt dann einfach ein $o hinzu und bei return array ein =>$o aber die Stichworte werden nicht aufgelistet.

Ganz schön komplizierte Geschichte um die Daten in der Tabelle zu ändern.
Mit einem Wert aus einer Variabel ist es ja noch leicht aber so. :-(

Gruß
René

vt1816
16.08.2009, 12:39:04
Habe den Eindruck Du denkst zurzeit zu kompliziert.

Aus Unkenntnis Deines Ursprungformulars und der nur geringen Beschreibung Deines Ziels, ist es schwer Dir den richtigen Weg aufzuzeigen. Letztendlich hast Du ja bereist alles was Du zum Update Deiner Datenbanktablle benötigst. Die Inhalte der Array kommen ja richtig im Verarbeitungsscript an. Baue Dir daraus Dein SQL-Statment (je Bild) zusammen.

Auf der Mauer
16.08.2009, 13:12:37
Hallo vt1816,

ja aber es ist doch kompliziert ;-)

Mein Urpsungsformular sieht so aus.



include 'connect.php';
<form action="aendern.php" method="post" name="formular" id="formular">

$Bild = $_POST['edit'];
foreach($Bild as $Bildnummer)
{
$abfrage = "SELECT Titel, Bildlink, Thumb, Beschreibung, Tags, Kategorie
FROM BildDB WHERE Nummer IN ('$Bildnummer')";
$ergebnis = mysql_query($abfrage);

while($row = mysql_fetch_object($ergebnis))
{
echo "<a href= '$row->Bilderlink' target='pic_haupt'><img class='rand'
src='$row->Thumb' width=126 height=126 border=0></a><br><br>

TITEL:<br><input name='Titel[]' type='text' value= '$row->Titel' size='15'
maxlength='25'><br><br>

TAGS:<br><input name='Tags[]' type='text' value= '$row->Tags' size='15'
maxlength='25'><br><br>

BESCHREIBUNG:<br><textarea name='Beschreibung[]' cols='13'
rows='3'>$row->Beschreibung</textarea><br><br>

KATEGORIE:<br><select name='Kategorie[]' value= '$row->Kategorie' size='1'>
<option></option>
<option>Architektur</option>
<option>Essen & Trinken</option>
<option>Experimentell</option>
<option>Geschichte</option>
<option>Kunst & Kultur</option>
<option>Menschen</option>
<option>Natur</option>
<option>Orte</option>
<option>Sport/Action</option>
<option>Stillleben</option>
<option>Technik</option>
</select><br><br>

BILDNUMMER:<br> $Bildnummer

<input name='Bildnummer[]' type='hidden' value='$Bildnummer'>
<input type=\"hidden\" value=\"$SESSID\" name=\"PHPSESSID\">";


<input type='submit' name='submitbutton' id='submitbutton' value='Daten ändern'>
</form>


Zuerst macht man ein Häkchen bei den Bildern (max. 4) welche bearbeitet werden sollen und bei Klick auf ändern wird diese Datei (oben) aufgerufen. Erst werden anhand der Bildnummern die passenden Einträge aus der Tabelle geholt und in die Eingabefelder als Vorbelegung reingesetzt. Die Werte in den Eingabefeldern egal ob alt oder neu werdern in Arrays gespeichert. Daher die eckigen Klammern [] hinter den Eingabefeldernamen.

Wenn alle Veränderungen gemacht wurden werden die Arrays an diese Datei geschickt.



//foreach Test

echo "<b>Bildnummer(n)</b><br>";
$Bild = $_POST['Bildnummer'];
foreach($Bild as $Nummer)
{
echo $Nummer,"<br>";
}

//array_merge

<pre>

$Werte = array_merge ($Bildnummer, $Titel ,$Stichworte );
print_r($Werte);

</pre>

//array_map

<pre>

function verbinden($m, $n) {
return array ($m => $n);
}
$Bildnummer = $_POST['Bildnummer'];
$Titel = $_POST['Titel'];
$Stichworte = $_POST['Tags'];

$Werte = array_map("verbinden", $Bildnummer, $Titel, $Stichworte);
print_r($Werte);

</pre>



Hier werden die Arrays jetzt testweise ausgegeben um zu sehen ob die Inhalte /Veränderungen welche im Formular gemacht wurde auch übernommen werde. Ja es geht. Jetzt sollen die Daten aus den Arrays in die MySql Tabelle geschrieben werden und zwar anhand der Bildnummern.

Gruß
René

vt1816
16.08.2009, 13:36:28
Hier mal ein möglicher grober Lösungsansatz (Verbindung zur DB wird vorausgesetzt):

$sql = "";
for($i=0; $i<count($_POST['Bildnummer']); $i++)
{
$sql .= "UPDATE SET `Titel` = " .$_POST['Titel'][$i]
.", `Tags` = " .$_POST['Tags'][$i]
.", `Beschreibung` = " .$_POST['Beschreibung'][$i]
.", `Kategorie` = " .$_POST['Kategorie'][$i]
." WHERE `Nummer` = " .$_POST['Bildnummer'][$i] .";";
}

echo $sql; //nur für Testzwecke zur Kontrolle, kann später weg

$result = mysql_query($sql) or die(mysql_error());

** ungetestet **

Auf der Mauer
16.08.2009, 14:20:09
Hallo vt1816,

vielen Dank für die Hilfe. Da habe ich es mir aber wirklich zu kompliziert gemacht.
Du hast ja gleich das Array in das SQL Statement reingesetzt. Was ich da rumgewurschtelt habe ich weiß es nicht. ;-)
Ich bin erstaunt, viel weniger Code und soweit alles drin was benötigt wird.

Die Testausgabe stimmt mich freudig, die Werte stimmen alle, ich bekomme allerdings noch diese Fehlermeldung und die Einträge werden noch nicht gespeichert. (Vermutlich wegem dem Fehler)


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 'SET `Titel` = Rosa Blüte, `Tags` = Balkonblume, Blüte, Sommer, rosa, `Beschreibung` = Balkonblüte im Sommer ' at line 1



Da hatte ich in letzter Zeit häufiger Probleme mit der Fehlermeldung.
Irgendwie reagiert das MySql Statement penibel auf ' ' und " ".

Was auch schön ist daß das Statement noch erweiterbar ist falls noch eine Rubrik dazu kommt. Außerdem ist es nun egal ob 1 4 oder 8 Bilder zum bearbeiten markiert sind.


//Verbindung zur Datenbank aufbauen
include 'connect.php';

//Tabelle
$sql = "";

for($i=0; $i<count($_POST['Bildnummer']); $i++)
{
$sql .= "UPDATE SET `Titel` = " .$_POST['Titel'][$i]
.", `Tags` = " .$_POST['Tags'][$i]
.", `Beschreibung` = " .$_POST['Beschreibung'][$i]
.", `Kategorie` = " .$_POST['Kategorie'][$i]
." WHERE `Nummer` = " .$_POST['Bildnummer'][$i] .";";
}

echo $sql; //nur für Testzwecke zur Kontrolle, kann später weg

$result = mysql_query($sql) or die(mysql_error());



Gruß
René

vt1816
16.08.2009, 14:24:14
[...], ich bekomme allerdings noch diese Fehlermeldung und die Einträge werden noch nicht gespeichert. (Vermutlich wegem dem Fehler)



$sql .= "UPDATE SET `Titel` = '" .$_POST['Titel'][$i]
."', `Tags` = '" .$_POST['Tags'][$i]
."', `Beschreibung` = '" .$_POST['Beschreibung'][$i]
."', `Kategorie` = '" .$_POST['Kategorie'][$i]
."' WHERE `Nummer` = " .$_POST['Bildnummer'][$i] .";";

Auf der Mauer
16.08.2009, 14:42:14
Leider noch dieselbe Fehlermeldung, allerdings jetzt den zweiten Datensatz (Bild 2) betreffend. Die Satzzeichen sind identisch, das habe ich verglichen.


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 'UPDATE BildDB SET `Titel` = 'Wartende Frau', `Tags` = 'Bronzestatue', `Beschreibung' at line 1


Merkwürdig, irgendetwas muss da jetzt aber anders sein sonst wäre der Fehler ja noch im ersten Datensatz.


//Verbindung zur Datenbank aufbauen
include 'connect.php';

$sql = "";

for($i=0; $i<count($_POST['Bildnummer']); $i++)
{
$sql .= "UPDATE BildDB SET `Titel` = '" .$_POST['Titel'][$i]
."', `Tags` = '" .$_POST['Tags'][$i]
."', `Beschreibung` = '" .$_POST['Beschreibung'][$i]
."', `Kategorie` = '" .$_POST['Kategorie'][$i]
."' WHERE `Nummer` = " .$_POST['Bildnummer'][$i] .";";
}

echo $sql; //nur für Testzwecke zur Kontrolle, kann später weg

$result = mysql_query($sql) or die(mysql_error());


Gruß
René

vt1816
16.08.2009, 14:47:32
Poste bitte mal den kompletten SQL-String $sql und die Tabellen-Struktur (CREATE TABLE).

Auf der Mauer
16.08.2009, 15:00:33
Du meinst die echo ausgebae $sql?


UPDATE BildDB SET `Titel` = 'Rosa Blüte', `Tags` = 'Balkonblüte, Sommer, rosa', `Beschreibung` = 'Balkonblüte im Sommer', `Kategorie` = 'Natur' WHERE `Nummer` = 1250338537;UPDATE BildDB SET `Titel` = 'Wartende Frau', `Tags` = 'Bronzestatue', `Beschreibung` = 'Am Eingang der Thyssenverwaltung in Duisburg.', `Kategorie` = 'Kunst & Kultur' WHERE `Nummer` = 1250266131;UPDATE BildDB SET `Titel` = 'Rote Beeren', `Tags` = 'Beeren', `Beschreibung` = 'Die mag ich leider nicht, sehen aber schön aus.', `Kategorie` = 'Essen & Trinken' WHERE `Nummer` = 1250262501;UPDATE BildDB SET `Titel` = 'Bella Luna', `Tags` = 'Vollmond', `Beschreibung` = 'in Duisburg. Eine wunderbare Nacht. Wer muss bei dem Motiv nicht an ET denken?', `Kategorie` = 'Natur' WHERE `Nummer` = 1250260272;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 'UPDATE BildDB SET `Titel` = 'Wartende Frau', `Tags` = 'Bronzestatue', `Beschreib' at line 1



CREATE TABLE `BildDB` (
`ID` int(11) NOT NULL auto_increment,
`Nummer` varchar(35) NOT NULL,
`Titel` varchar(20) NOT NULL,
`Beschreibung` varchar(200) NOT NULL,
`Copyright` varchar(25) NOT NULL,
`Erstellt` timestamp NOT NULL default CURRENT_TIMESTAMP,
`Bilderlink` varchar(150) NOT NULL,
`Thumb` varchar(150) NOT NULL,
`Kategorie` varchar(30) NOT NULL,
`Tags` varchar(200) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=50 DEFAULT CHARSET=latin1



Gruß
René

vt1816
16.08.2009, 15:04:17
$sql .= "UPDATE SET `Titel` = '" .$_POST['Titel'][$i]
."', `Tags` = '" .$_POST['Tags'][$i]
."', `Beschreibung` = '" .$_POST['Beschreibung'][$i]
."', `Kategorie` = '" .$_POST['Kategorie'][$i]
."' WHERE `Nummer` = '" .$_POST['Bildnummer'][$i] ."'; ";

Auf der Mauer
16.08.2009, 15:24:21
Hallo vt1816,


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 'SET `Titel` = 'Rosa Blüte', `Tags` = 'Balkon, Pflanze, rosa', `Beschreibung` = '' at line 1


Ganz schön hartnäckig ;-)

Was kann das denn bloß sein?
Möchtest du es mal selbst auf der Seite ausprobieren?
Ich schicke dir die Daten dann per PM.

Gruß
René

vt1816
16.08.2009, 15:26:10
Ja,

Korrektur:


for($i=0; $i<count($_POST['Bildnummer']); $i++)
{
$result = mysql_query("UPDATE BildDB SET `Titel` = '" .$_POST['Titel'][$i]
."', `Tags` = '" .$_POST['Tags'][$i]
."', `Beschreibung` = '" .$_POST['Beschreibung'][$i]
."', `Kategorie` = '" .$_POST['Kategorie'][$i]
."' WHERE `Nummer` = " .$_POST['Bildnummer'][$i]) or die(mysql_error());
}

// der ehemalige Rest kann weg