Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Kolejność bloków menu
Forum PHP.pl > Forum > Przedszkole
Lee
Mam moduł bloków menu i gdy jedynie je przesuwam wszystko jest ok, ale gdy skasuje jakiś np. ze środka to już wszystko się rozwala :/

Tak przesuwam blok w górę (w doł pdobonie)
  1. <?php
  2. public function Up($id) {
  3. global $tbl_menu;
  4. $this -> query = mysql_query("SELECT * FROM $tbl_menu WHERE id='$id' LIMIT 1");
  5. while ($this -> result = mysql_fetch_assoc($this -> query)) {
  6. $up = $this -> result['order'];
  7. $position = $this -> result['position'];
  8. }
  9. $order = $up - 1;
  10. $this -> query = mysql_query("SELECT * FROM $tbl_menu WHERE `order`='$order' AND `position`='$position' LIMIT 1");
  11. while ($this -> result = mysql_fetch_assoc($this -> query)) {
  12. $down = $this -> result['order'];
  13. $id_down = $this -> result['id'];
  14. }
  15. $this -> query = mysql_query("UPDATE $tbl_menu SET `order`='$down' WHERE id='$id' LIMIT 1");
  16. $this -> query = mysql_query("UPDATE $tbl_menu SET `order`='$up' WHERE id='$id_down' LIMIT 1");
  17. header ('Location: admin.php?mod=menu');
  18. }
  19. ?>


a tak kasuję blok
  1. <?php
  2. public function Delete($id) {
  3. global $tbl_menu;
  4. echo 'Czy na pewno chcesz usunąć to menu ? (<a href="admin.php?mod=menu&act=delete&confirm=yes&id='.$id.'">Tak</a> | <a href="admin.php?mod=menu">Nie</a>)<br />';
  5. if ($_GET['confirm'] == 'yes') {
  6. @$this -> query = mysql_query("DELETE FROM $tbl_menu WHERE id='$id' LIMIT 1") or die (_MYSQL_ERROR_3 .''. mysql_error());
  7. echo 'Menu zostało usunięte ! <a href="admin.php?mod=menu">Powrót</a>';
  8. }
  9. }
  10. ?>

co powinienem zmienić/dodać ? próbowałem po skasowaniu danej pozycji pozostałe zmniejszyć ale nie działało dobrze (może coś źle robiłem, ale kodu już niestety nie mam :/)
wipo
Nie działa poprawnie bo źle badasz poprzedni link
Ty badasz link mniejszy o 1 od poprzedniego, więc jak usuniesz jakiś to możesz go potem nie znależć.
Spróbuj where id<klikanego_id order bo id lub pozycja desc limit 0,1
Lee
A w którym momencie powinienem to wstawić ?
wipo
Kod

<?php
public function Up($id) {
      global $tbl_menu;
          $this -> query = mysql_query("SELECT * FROM $tbl_menu WHERE id='$id' ");
          while ($this -> result = mysql_fetch_assoc($this -> query)) {
              $up = $this -> result['order'];
              $position = $this -> result['position'];
          }
          $order = $up - 1;
          $this -> query = mysql_query("SELECT * FROM $tbl_menu WHERE position<$position ORDER BY position desc limit 0,1");
          while ($this -> result = mysql_fetch_assoc($this -> query)) {
              $down = $this -> result['order'];
              $id_down = $this -> result['id'];
          }
          $this -> query = mysql_query("UPDATE $tbl_menu SET `order`='$down' WHERE id='$id' LIMIT 1");
          $this -> query = mysql_query("UPDATE $tbl_menu SET `order`='$up' WHERE id='$id_down' LIMIT 1");
          header ('Location: admin.php?mod=menu');
      }
?>


Coś takiego powinno działać
Lee
No nie zabardzo, to co chciałem do góry podnieść kolumne "order" ma pustą
wipo
A pokaż jak masz zrobioną tabelę w bazie bo pewnie nie to zmieniam co trzeba
Lee
|id(int)|name(varchar)|content(text)|position(varchar:left/right)|order(int:1-n)|active(int0/1)|
|1|Główne|blabla|left|1|1
|2|Polecam|blabla|left|2|1
wipo
Kod
$this -> query = mysql_query("SELECT * FROM $tbl_menu WHERE order<$position ORDER BY order desc limit 0,1");

To teraz powinno działać
Lee
ok działa, nie zauważyłem, że rodzaj kolumny order to varchar winksmiley.jpg btw. poprawny kod wygląda tak
  1. <?php
  2. $this -> query = mysql_query("SELECT * FROM $tbl_menu WHERE id='$id' LIMIT 1");
  3. while ($this -> result = mysql_fetch_assoc($this -> query)) {
  4. $up = $this -> result['order'];
  5. $position = $this -> result['position'];
  6. }
  7. $this -> query = mysql_query("SELECT * FROM $tbl_menu WHERE `order`<$up AND `position`='$position' ORDER BY `order` DESC LIMIT 1");
  8. while ($this -> result = mysql_fetch_assoc($this -> query)) {
  9. $down = $this -> result['order'];
  10. $id_down = $this -> result['id'];
  11. }
  12. $this -> query = mysql_query("UPDATE $tbl_menu SET `order`='$down' WHERE id='$id' LIMIT 1");
  13. $this -> query = mysql_query("UPDATE $tbl_menu SET `order`='$up' WHERE id='$id_down' LIMIT 1");
  14. header ('Location: admin.php?mod=menu');
  15. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.