Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Przesuwanie bloków menu
Forum PHP.pl > Forum > PHP
kociupk
mam problem z przesuwaniem blokow menu mam o to taki kod php

  1. <?php 
  2. if($op == 'gora_kat') { 
  3. $zapytanie = "SELECT * FROM menu_kategorie WHERE pozycja < '".$_GET['id']."' ORDER BY pozycja DESC LIMIT 1"; 
  4. $query = mysql_query($zapytanie) or die(mysql_error()); 
  5. $dane = mysql_fetch_array($query); 
  6.  
  7. echo 'nowe '.$nowe_id = $dane['pozycja']; 
  8. echo 'stare '.$_GET['id']; 
  9. $zmien_n_id = "UPDATE menu_kategorie SET pozycja = '".$_GET['id']."' WHERE pozycja = '".$nowe_id."' LIMIT 1"; 
  10. $query_n_id = mysql_query($zmien_n_id) or die(mysql_error()); 
  11.  
  12. $zmien_a_id = "UPDATE menu_kategorie SET pozycja = '".$nowe_id."' WHERE pozycja = '".$_GET['id']."' LIMIT 1"; 
  13. $query_a_id = mysql_query($zmien_a_id) or die(mysql_error()); 
  14.  
  15. if(!$query_n_id && !$query_a_id) { 
  16. echo 'Nie można zmienic pozycji kategorii!'; 
  17. } else { 
  18. echo 'ok'; 
  19. } 
  20. } 
  21. if($op == 'dol_kat') { 
  22. $zapytanie = "SELECT * FROM menu_kategorie WHERE pozycja > '".$_GET['id']."' ORDER BY pozycja ASC LIMIT 1"; 
  23. $query = mysql_query($zapytanie) or die(mysql_error()); 
  24. $dane = mysql_fetch_array($query); 
  25.  
  26. echo 'nowe '.$nowe_id = $dane['pozycja']; 
  27. echo 'stare '.$_GET['id']; 
  28. $zmien_n_id = "UPDATE menu_kategorie SET pozycja = '".$nowe_id."' WHERE pozycja = '".$_GET['id']."' LIMIT 1"; 
  29. $query_n_id = mysql_query($zmien_n_id) or die(mysql_error()); 
  30.  
  31. $zmien_a_id = "UPDATE menu_kategorie SET pozycja = '".$_GET['id']."' WHERE pozycja = '".$nowe_id."' LIMIT 1"; 
  32. $query_a_id = mysql_query($zmien_a_id) or die(mysql_error()); 
  33.  
  34. if(!$query_n_id && !$query_a_id) { 
  35. echo 'Nie można zmienic pozycji kategorii!'; 
  36. } else { 
  37. echo 'ok'; 
  38. } 
  39. } 
  40. ?>

no i niby wszystko dziala ok ale sie bloki menu nie przesuwaja http://koteluk.pl/sklep_internetowy/panel/lista_menu.php
tommy4
bo najpierw zmieniasz nowe id na stare id, a potem zmieniasz wszystkie wiersze, gdzie jest stare id na nowe id, czyli skutek jest taki, że zamieniasz w dwoch wierszach.
kociupk
a mi sie wydaje ze to innaczej robie smile.gif najpierw zmieniam aktualne id na nowe (czyli nastepne albo poprzednie po aktualnym id)
  1. <?php
  2. $zmien_n_id = "UPDATE menu_kategorie SET pozycja = '".$nowe_id."' WHERE pozycja = '".$_GET['id']."' LIMIT 1";  $query_n_id = mysql_query($zmien_n_id) or die(mysql_error());
  3. ?>

a pozniej zmieniam poprzednie albo nastepnie id na id aktualne czyli na $_GET['id'] ale to jakos nie dziala ;/

  1. <?php
  2. $zmien_a_id = "UPDATE menu_kategorie SET pozycja = '".$_GET['id']."' WHERE pozycja = '".$nowe_id."' LIMIT 1";  $query_a_id = mysql_query($zmien_a_id) or die(mysql_error());
  3. ?>


raz dziala a raz nie;/
Kicok
Cytat
a pozniej zmieniam poprzednie albo nastepnie id na id aktualne czyli na $_GET['id']


Nie zamieniasz "poprzedniego albo następnego id", tylko "poprzednie albo następne id + to, które zamieniłeś tym pierwszym zapytaniem".
Jeśli `pozycja` to klucz podstawowy tej tabeli, to skopałeś strukturę. A jeśli nie, to tu masz proste rozwiązanie twojego problemu:


1. Pobierz pozycję przesuwanego elementu
  1. SELECT pozycja FROM menu_kategorie WHERE (id = $_GET['id'])

2. Pobierz id i pozycję poprzedniego/następnego elementu bazując na wyniku pierwszego zapytania:
  1. SELECT id, pozycja AS `pozycja2` FROM menu_kategorie WHERE (pozycja < $pozycja) ORDER BY pozycja DESC LIMIT 1

3. Jeśli zapytanie nie zwróciło wyniku, to znaczy że dany element jest pierwszy/ostatni i nie robisz nic. W przeciwnym wypadku zamieniasz oba elementy pozycjami:
  1. UPDATE menu_kategorie SET pozycja = $pozycja2 WHERE ( id = $_GET['id'] )
  2. UPDATE menu_kategorie SET pozycja = $pozycja WHERE ( id = $id )
Sopnet
Cytat(Kicok @ 31.05.2007, 17:16:15 ) *
Jeśli `pozycja` to klucz podstawowy tej tabeli, to skopałeś strukturę.

Klucz podstawowy jest kluczem unikalnym wiec struktury by sobie nie skopal. Co innego ze teraz ma podwojne wpisy w polu pozycja. Wyjsciem byloby nadanie klucza uniklanego na ta pozycje. Ale tera jest za pozno.

A tak ogolnie to tak jak w poprzednich postach:
W momencie drugiego uaktualniania masz dwa wiersze z pozycja=$_GET['id']. Co z tego ze robisz limit 1 w zapytaniu, skoro mysql moze raz zgadnac o ktory tobie chodzilo a raz nie? Warto zawsze na trzezwo przesledzic co skrypt robi. Zalozenie miales sluszne, ale skrypt robi cos innego...
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.