Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+mysql] Zmienianie pozycji na stronie
Forum PHP.pl > Forum > PHP
Mayger
Mam taki pomysł a zarazem prośbe jak można zrobić zmienianie pozycji:
Mam taką tabele
Kod
id | nazwa   | miejsce
-----------------------
1  | tytul1  | 2
2  | tytul2  | 4
3  | tytul3  | 3

I wyświetla się to nam jako
1. tytul1 + -
3. tytul2 + -
2. tytul3 + -
Czy ktoś umie to zrobić żeby zmieniało miejsce np tytul2 na miejsce tytul1 tylko chodzi o to że nie może być to zmieniane +1 a tu -1 bo jak widac jest tu przerwa co dwa.
Jak ktoś to umie zrobić w php i mysql to prosze o pomoc.
Pigula
tak nie zbyt rozumiem o co ci chodzi zeby wyswitlalo wedlug miejsc jakie masz w tabeli czy co? jezeli wedlug miejsc to ustalasz kolejnosc i dajesz do zapytania ORDER BY. jak jest jakas zmiana to muszi uaktualnic tabele. po kliknieciu na ten +/- poptostu dodajesz czy odejmuszje jeden tylko ze wtedy w tabeli trzymac jakies punkty a nie miejsce bo tak ustalac kolejnosc to bedzie ciezko. zliczasz punkty po nich sortujesz wyswietlasz.
Mayger
Jak klikniesz na plus to to co jest wyżej od tego w co klikasz ma być na miejscu tego teraz i na odwrót troche to skomplikowane wiem no ale chce tak zrobić:P Tak jak to jest rozwiązane w jportal z blokami menu albo w phpbb z zmienianiem pozycjoi kategori;d
Pigula
no to pobierza to na co kliknales i to co jest wyzej i to co jest wyzej dajesz -1 a to co wybrales dajesz +1 jeden select warunkiem where a potemmodyfikujesz te rekordy +1/-1 i dwa update rowniez z warunkiem where.
Mayger
Nie dokońca mnie rozumiesz bo ja napisałem w pierwszym poście że nie moze być +1/-1. Np jeżeli mam coś co ma miejsce 2 i co ma 4 czyli to co ma 3 jest usunięte to jak zrobie +1/-1 to wtedy oba będą miały miejsce 3 i nic z tego tongue.gif
phobos
chodzi ci o to zeby to co bylo na miejscu 2 jak sie nacisnie + to wskakiwalo na miejsce 1 a to co bylo na miejscu 1 wskakiwalo na miejsce 2 itd questionmark.gif
Pigula
no to wyciagasz dwie wartosci zamieniasz je miejscami i zapisujesz spowrotem
Mayger
No niby tak ale czy ktoś umie to napisać bo w prostych rzeczach w php i mysql to się znam ale nie jestem jakis mastah i nie wiem za bardzo jak to zrobić :]
phobos
id | nazwa | miejsce
-----------------------
1 | tytul1 | 2
2 | tytul2 | 4
3 | tytul3 | 3


  1. <?php
  2.  
  3. $query=mysql_query("select miejsce, id from tabela where nazwa='tytul1' ");
  4. $result=mysql_fetch_array($query);
  5.  
  6. $query2=mysql_query("select miejsce, id from tabela where nazwa='tytul2' ");
  7. $result2=mysql_fetch_array($query2);
  8.  
  9. mysql_query("update tabela set miejsce='$result2[miejsce]' where id='$result[id]' ");
  10. mysql_qyery("update tabela set miejsce='$result[miejsce] where id='$result2[id]' ");
  11.  
  12. ?>



powinno dzialac smile.gif
Mayger
Noby wszystko łądnie i pięknie tylko jak zrobić żeby pobierało te dwa koło siebie, nie ważne które klikne ma być koło siebie albo od góry albo od dołu bo to jest tylko taki przykład, a ja chce żeby to dla wszystkiego zmieniać.
phobos
no to zalorzmy takie cos ze:
plus i minus bedzie przy kazdym tytule a jak wiemy kazdy tytul ma swoj id wiec:
plus- <a href="strona.php?id=TuIdTytulu&action=plus" >
minus- <a href="strona.php?id=TuIdTytulu&action=minus" >

i teraz
  1. <?php
  2.  
  3. if($_GET['action']=="plus")
  4. {
  5. $query=mysql_query("select miejsce from tabela where id='$_GET[id]' ");
  6. $result=mysql_fetch_array($query);
  7. $newid=$_GET['id']+1;
  8. $query2=mysql_query("select miejsce from tabela where id='$newid' ");
  9. $result2=mysql_fetch_array($query2);
  10. }
  11. else
  12. {
  13. $query=mysql_query("select miejsce from tabela where id='$_GET[id]' ");
  14. $result=mysql_fetch_array($query);
  15. $newid=$_GET['id']-1;
  16. $query2=mysql_query("select miejsce from tabela where id='$newid' ");
  17. $result2=mysql_fetch_array($query2);
  18. }
  19.  
  20. mysql_query("update tabela set miejsce='$result2[miejsce]' where id='$_GET[id]' ");
  21. mysql_qyery("update tabela set miejsce='$result[miejsce] where id='$newid' ");
  22.  
  23.  
  24. ?>
Mayger
  1. <?php
  2. $newid=$_GET['id']+1;
  3. $query2=mysql_query("select miejsce from tabela where id='$newid' ");
  4. $result2=mysql_fetch_array($query2);
  5. ?>

Mówiłem że chodzi mi tu też o to że jak np coś usune to nie bedzie +1 tylko np +2 i wtedy wywali mi errora że nie ma tego id bo bedzie wcześniej usunięte winksmiley.jpg
phobos
no to jak cos wywalasz o okrelsonym id to to wszystko co jest wieksze od tego id daj -1
czyli jak masz 1,2,3,4,5 i jak wywalisz 3 to 4,5 daj -1
Mayger
Tylko jak to zrobić :]
phobos
1) nie mozesz miec auto_increment w tej kolumnie gdzie masz id bo mysql w wersji 4+ ma takie zabezpieczenie ze jezeli np. masz takie klucze 1,2,3 i teraz usuniesz klucz 3 a potem bedziesz chcial dodac kolejny wpis do bazy do mysql mu przypisze automatycznie klucz 4, i nie jest mozliwe wogole juz uzycie id=3

i teraz taki kod
  1. <?php
  2.  
  3. mysql_query=("delete from tabela where id='$id' ");
  4. $query=mysql_query("select max(id) from tabela ");
  5. $result=mysql_fetch_array($query);
  6. $nextid=$id+1;
  7. for($i=$nextid;$i<=$result[0];$i++)
  8. {
  9. $newid=$i-1;
  10. mysql_query("update tabela set id='$newid' where id='$i' ");
  11. }
  12.  
  13. ?>


chyba wszystko ok
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.