Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Werte Tausch in DB, Denkfehler? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Werte Tausch in DB, Denkfehler?


 
Hazzardous
16-07-2004, 11:34 
 
Hallo Jungs,

das folgende Skript soll eigentlich 2 Werte in der Datenbank Tauschen.

Angenommen die beiden Werte sind 1 und 2. 2 soll zu 1 werden und umgedreht. Am Ende sind aber leider beide 1. Was mich ein wenig wundert. Habe ich in dem Skript einen denkfehler?

Die Werte werde richtig übergeben, und aus dem DB query kommt auch der richtige Wert raus. Also $id und $sortchange sind ok.


<?PHP
$id = $_POST["sortcode"];
if($csort_up) {
$sql_csort = "SELECT menusort FROM content WHERE menusort < '$id' AND status = 'category' ORDER BY menusort DESC LIMIT 1;";
$result_csort = mysql_query($sql_csort) OR die(mysql_error());
$row_csort = mysql_fetch_assoc($result_csort);
$sortchange = $row_csort["menusort"];
echo $id;
echo $sortchange;
$sql_sort_entry_up2 = "UPDATE content SET menusort='$id' WHERE menusort='$sortchange';";
$sql_sort_entry_up1 = "UPDATE content SET menusort='$sortchange' WHERE menusort='$id';";
mysql_query($sql_sort_entry_up2);
mysql_query($sql_sort_entry_up1);

}


Danke im vorraus...

 
flat_le
16-07-2004, 11:48 
 
Also angenommen $id = 1, $sortchange = 2.
Dann ändert dein erster SQL-Query unten folgendes:
Die Einträge mit menusort=2 werden geändert, menusort = 1 wird gesetzt.
Alles gut und schön.
Dann kommt aber dein zweiter Query:
Die Einträge mit menusort=1 werden geändert, menusort=2.

Da änderst du ja quasi die Einträge, die du mit dem ersten Query bearbeitet hast, zurück, oder? ;)

also auf die schnelle würde mir nur einfallen vorher den primary key der Einträge mit menusort = 2 und menusort = 1 auszulesen, und dann eben die UPDATE-Queries mit WHERE id IN (1,2,3....)

 
asp2php
16-07-2004, 11:50 
 
*ROFL*

arbeite mit eindeutigen IDs und schreibe nur dazugehörige Inhalt um, dann hast du das Problem nicht.

z.B. 2 DS mit (id, bla)
- 1. DS: 56, 1
- 2. DS: 90, 2
jetzt willst du 1 und 2 vertauschen, also
- set bla=2 where id=56
- set bla=1 where id=90

denn wenn du so machst:
set bla=2 where bla=1
dann hast du 2 mal bla=2
im nächsten schritt machst du
set bla=1 where bla=2
-> dein bisheriges Ergebnis.

Was meinst du warum man einen Primarykey in der Tabelle erstellt?

 
Hazzardous
16-07-2004, 12:03 
 
Ihr habt recht. habe schlichtweg einen Zwischenschritt vergessen. Danke für den Wink mit dem Zaunpfahl :]

 
Hazzardous
16-07-2004, 12:38 
 
Hi
ich nochmal...

hier der Finale Code...

vielleicht brauch es ja wer. Vielleicht gibt es auch noch was zu verbessern. Codeform etc o.Ä.

Gruß


<?PHP
if($_POST["sortcode"])
{
$id = $_POST["sortcode"];
if($csort_up) {
$operator = "<";
$descasc = "desc";
}
if($csort_down) {
$operator = ">";
$descasc = "asc";
}
$sql_csort = "SELECT menusort FROM content WHERE menusort $operator '$id' AND status = 'category' ORDER BY menusort $descasc LIMIT 1;";
$result_csort = mysql_query($sql_csort) OR die(mysql_error());
$row_csort = mysql_fetch_assoc($result_csort);
$sortchange = $row_csort["menusort"];
$sql_csort_get_id_id = "SELECT id FROM content WHERE menusort = '$id' AND status = 'category' ORDER BY id DESC LIMIT 1;";
$sql_csort_get_id_sortchange = "SELECT id FROM content WHERE menusort = '$sortchange' AND status = 'category' ORDER BY id DESC LIMIT 1;";
$result_csort_get_id_id = mysql_query($sql_csort_get_id_id);
$result_csort_get_id_sortchange = mysql_query($sql_csort_get_id_sortchange);
$row_csort_get_id_id = mysql_fetch_assoc($result_csort_get_id_id);
$row_csort_get_id_sortchange = mysql_fetch_assoc($result_csort_get_id_sortchange);
$idsort = $row_csort_get_id_id["id"];
$msort = $row_csort_get_id_sortchange["id"];
$sql_sort_entry_up2 = "UPDATE content SET menusort='$sortchange' WHERE id = '$idsort';";
$sql_sort_entry_up1 = "UPDATE content SET menusort='$id' WHERE id = '$msort';";
mysql_query($sql_sort_entry_up2);
mysql_query($sql_sort_entry_up1);

}
?>

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:44 Uhr.