Also ich verzweifle gerade
Folgende Tabelle in der Mysql Datenbank
id tag von bis jahreszeit status strposi
1 Montag bis Freitag 10:00 22:00 winter offen 1
2 Samstag, Sonntag 10:00 14:00 winter offen 2
3 Montag, Mittwoch 14:00 22:00 sommer offen 1
4 Dienstag, Donnerstag 14:00 22:00 sommer offen 2
5 Freitag 10:00 21:00 sommer offen 3
6 Samstag 10:00 14:00 sommer offen 4
7 Sonntag 00:00 00:00 sommer geschlossen 5
( id 1 = strposi 1 )
( id 2 = strposi 2 )
( id 3 = strposi 1 )
( id 4 = strposi 2 )
( id 5 = strposi 3 )
( id 6 = strposi 4 )
( id 7 = strposi 5 )
alle felder sind strings außer ID = integer(255) mit auto increment
ich will damit bezwecken das ich die positionierungen der Texte verändern kann , als Abfrage zum ausgeben der Tabelle folgender Code
echo "
<table border=1 cellspacing=0 cellpadding=0 style=\"width:400px;\">
<tr>
<td>Tag(e):</td><td>Von</td><td>Bis</td><td style=\"width:50px;\">Position</td><td style=\"width:125px;\">Optionen:</td>
</tr>
";
$sql = Mysql_query("SELECT * FROM zeiten WHERE jahreszeit = 'Sommer' order by strposi");
while($get = Mysql_fetch_object($sql)){
echo "
<tr>
<td>$get->tag</td>
<td>$get->von</td>
<td>$get->bis</td>
<td align='center'><a href=\"?page=zeiten&action=pos&id=".$get->id."&to=up&zeit=sommer\"><img src=\"images/arror_up.gif\" width=\"11\" height=\"11\" border=\"0\" alt=\"\"></a><a href=\"?page=zeiten&action=pos&id=".$get->id."&to=down&zeit=sommer\"><img src=\"images/arror_down.gif\" width=\"11\" height=\"11\" border=\"0\" alt=\"\"></a></td>
<td>Editieren | Löschen</td>
</tr>
";
}
echo "</table>
";
So nun zu meinem "update" code
if($action == "pos"){
// Hier werden erstmal alle erstellen variablen die nicht übergeben werden müssen leer gesetzt und zerstört
$strr = ""; unset($strr);
$strr_id = ""; unset($strr_id);
$strold = ""; unset($strold);
$sql = ""; unset($sql);
$sqll = ""; unset($sqll);
$sqlll = ""; unset($sqlll);
$sqllll = ""; unset($sqllll);
$get = ""; unset($get);
$gett = ""; unset($gett);
// Hier wird die aktuelle Position der übergeben ID ermittelt und ein ( für testzwecke ) alle infos herausgeholt
$sql = Mysql_query("SELECT * FROM zeiten WHERE id = '$id'");
while($get = Mysql_fetch_object($sql)){$strold = $get->strposi; $strold_name = $get->tag;$str_old = $get->strposi;}
// wenn nun die variable $to = up ist ( um den text nach oben zu holen ) wird in $strr die aktuelle position - 1 genommen, damits ne kleinere zahlt halt wird is ja klar, anders rum bei down wirds + 1 genommen
if($to == "up"){$strr = $strold - 1;}else if($to == "down"){$strr = $strold + 1;}
//Hier wird nun nach der id geschaut wo die position, die neue Position der alten id ist.
// kleines beispiel id 5 hat position 4 , nun wird geschaut position 4 hat id 6
// es werden auch hier für testzwecke alle daten ausgelesen
$sqll = Mysql_query("SELECT * FROM zeiten WHERE jahreszeit = '$zeit' AND strposi = '$strr'");
while($gett = mysql_fetch_object($sqll)){$strr_id = $gett->id; $strr_name = $gett->tag;$strr_old = $gett->strposi;}
//Kurzer debug ausgabe der mir sagt welche id hatte welchen wert und bekommt neuen wert und um welche richtung es sich handelt
echo "
String Move ID: $id ( $strold_name ) war $str_old -> wird zu: $strr
String Move To: $to
String Move ID: $strr_id ( $strr_name ) war $strr_old -> wird zu $strold
";
/*
Danach wird die DB geupdated sprich die alte id bekommt ihre neue position und die id mit der neuen position der alten id, bekommt die alte position der alten id :
Sprich bei down wäre
id 5 hatte position 4 und wird zu position 5
id 6 hatte position 5 und wird zu position 4
einfach nur umgedreht halt
*/
$sqlll = Mysql_Query("Update zeiten set strposi = '$strr' WHERE id = '$id'");
$sqllll = Mysql_Query("Update zeiten set strposi = '$strold' WHERE id = '$strr_id'");
// Danach wird nochmal Debug informationen ausgeben WAS er nun eigentlich gemacht hat , da hier genau das steht was in der mysql_query anweisung steht MUSS er genau das machen was er dann auch ausgibt.
echo "Update zeiten set strposi = '$strr' WHERE id = '$id'
";
echo "Update zeiten set strposi = '$strold' WHERE id = '$strr_id'";
}
Eigentlich is ja alles simple denkt man so, mein problem besteht nun darin das er sowas macht wenn folgenden link aufrufe:
?action=pos&id=5&to=down&zeit=sommer
Beispiel:
DB vor ausführen der Datei ( script )
id tag von bis jahreszeit status strposi
1 Montag bis Freitag 10:00 22:00 winter offen 1
2 Samstag, Sonntag 10:00 14:00 winter offen 2
3 Montag, Mittwoch 14:00 22:00 sommer offen 1
4 Dienstag, Donnerstag 14:00 22:00 sommer offen 2
5 Freitag 10:00 21:00 sommer offen 3
6 Samstag 10:00 14:00 sommer offen 4
7 Sonntag 00:00 00:00 sommer geschlossen 5
Script ausgabe durch echo ( Debug )
String Move ID: 5 ( Freitag ) war 3 -> wird zu: 4
String Move To: down
String Move ID: 6 ( Samstag ) war 4 -> wird zu 3
Update zeiten set strposi = '4' WHERE id = '5'
Update zeiten set strposi = '3' WHERE id = '6'
DB NACH ausführen des Scriptes
id tag von bis jahreszeit status strposi
1 Montag bis Freitag 10:00 22:00 winter offen 1
2 Samstag, Sonntag 10:00 14:00 winter offen 2
3 Montag, Mittwoch 14:00 22:00 sommer offen 1
4 Dienstag, Donnerstag 14:00 22:00 sommer offen 2
5 Freitag 10:00 21:00 sommer offen 5
6 Samstag 10:00 14:00 sommer offen 3
7 Sonntag 00:00 00:00 sommer geschlossen 4
geändert wurden also :
ID von strposi zu strposi
5 3 5
6 4 3
7 5 4
Er hat 3 Datensätze geändert OBWOHL ID überall eindeutig ist und er beim sql-update befehl nur die ID als abfrage punkt bekommt womit er nur die Möglichkeit hat immer nur 1 Datensatz pro Query zu ändern.
Also in meinem Falle nur 2 Datensätze, ABER er macht3 oOoOoO
Sorry aber hier hört meine Logik auf
hoffe auf antwort.