14. juni 2005 - 22:55Der er
5 kommentarer og 1 løsning
Udfører kun 1. query og glemmer den 2.
function sortAfsnit($id, $way){ $sql = $this->db->getArray("SELECT sort, parent FROM khs_afsnit WHERE id = '$id'"); $count = $this->db->getRows("SELECT id FROM khs_afsnit WHERE parent = '$sql[parent]'");
if ($way == "ned"){ $c = $sql['sort'] + 1; return ($x = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$sql[sort]' WHERE sort = '$c' AND parent = '$sql[parent]'") && $y = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$c' WHERE sort = '$sql[sort]' AND parent = '$sql[parent]'"));
} if ($way == "op"){ $c = $sql['sort'] - 1; return (($x = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$c' WHERE sort = '$sql[sort]' AND parent = '$sql[parent]'")) && ($y = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$sql[sort]' WHERE sort = '$c' AND parent = '$sql[parent]'"))); } return false; }
Har denne function. Som i nok kan se, sorterer den i nogle afsnit.
Hvis man vælger at et afsnit skal op, tager den 'sort' - 1 og udskifter med 'sort' - derefter skal den række der har 'sort' - 1 have skiftet sort til 'sort'
Problemet er, at kun første query bliver udført, i hvert af de to tilfælde.
Hvis jeg kører en med "op" bliver dens 'sort' - 1, hvilket betyder jeg har 2 med samme 'sort'.
Når man ønsker at bytte om på to værdier er man som regel nødt til at lægge et mellemled ind. Ellers ender man bare med at overskrive man bare den ene med den anden. Prøv at ret din:
if ($way == "ned") { $c = $sql['sort'] + 1; return ($x = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$sql[sort]' WHERE sort = '$c' AND parent = '$sql[parent]'") && $y = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$c' WHERE sort = '$sql[sort]' AND parent = '$sql[parent]'")); }
- til noget i stil med:
if ($way == "ned") { $c = $sql['sort'] + 1; return ($x = $this->db->runQuery("UPDATE khs_afsnit SET sort = 'SWAP' WHERE sort = '$c' AND parent = '$sql[parent]'") && $y = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$c' WHERE sort = '$sql[sort]' AND parent = '$sql[parent]'") && $z = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$sql[sort]' WHERE sort = 'SWAP' AND parent = '$sql[parent]'")); }
Hvorfor return'er du? Og hvorfor presser du dine to queries sammen i en lang pærevælling med logisk konjunktion? Og hvad returnerer dit db-objekt på en update-query (siden du bruger retur-værdien til at angive, om anden query skal udføres).
Prøv:
if ($way == "ned"){ $c = $sql['sort'] + 1; $x = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$sql[sort]' WHERE sort = '$c' AND parent = '$sql[parent]'"); $y = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$c' WHERE sort = '$sql[sort]' AND parent = '$sql[parent]'"); return $x && $y; // men hvorfor?
} if ($way == "op"){ $c = $sql['sort'] - 1; $x = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$c' WHERE sort = '$sql[sort]' AND parent = '$sql[parent]'"); $y = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$sql[sort]' WHERE sort = '$c' AND parent = '$sql[parent]'"); return $x && $y; // ja igen? } return false;
Jeg er godt klar oper at mit ekempel ikke holder meget mere end - skal vi sige - 80%. Men det var også bare for at demonstrere hvad det egentlig var som gik galt. Lidt svært at gemmeskue det midt i alt det andet.
... og et svar.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.