Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/mysql]"Przenoszenie" rekordów do góry i na dół
zlw
post 2.05.2007, 08:42:31
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 30.04.2007
Skąd: WWA

Ostrzeżenie: (0%)
-----


Witam.

Mam pewien problem. Mam w bazie table category.
Mam zamiar przechowywać w niej kategorie pod które podpięte będą później artykuły.
Z powodu mojego widzi mi się chciałem zmieniać kolejność ich wyświetlania na stronie.

Baza wygląda tak:

  1. name | ord | id
  2. n1 1 1
  3. n2 2 2
  4. n3 3 3



Mam więc kod, który wyświetla wszystkie kategorie:



  1. <?php
  2. include "config.php";
  3. $result = mysql_query("SELECT ord, id FROM cms_category ORDER BY ord ")
  4.  or die("Zapytanie niepoprawne");
  5. $liczba_rekordow = mysql_num_rows($result);
  6.  while ($num <> $liczba_rekordow)
  7. {
  8.  $rows = mysql_fetch_array($result);
  9.  $num = $num + 1;
  10.  $tablica[$num] = $rows[id];
  11.  
  12. }
  13.  $result = mysql_query("SELECT name, ord, id FROM cms_category ORDER BY ord ")
  14.  or die("Zapytanie niepoprawne");
  15.  $num_rows = mysql_num_rows($result);
  16.  
  17.  
  18. while($n <> $num_rows)
  19. {
  20.  
  21.  $row = mysql_fetch_array($result);
  22.  $n = $n + 1;
  23.  $new_id = $tablica[$n + 1];
  24.  
  25.  if ($old_id == "") {
  26.  echo "<table width=31% border=1>
  27. <tr>
  28. <td width=30%>$row[name]</td>
  29. <td width=38%><a href=?mode=edit&id=$row[id]>EDYTUJ</a>|<a href=?mode=delete&id=$row[id]>USUŃ</a></td>
  30. <td width=32%><a href=?mode=down&id=$row[id]&new_id=$new_id>DÓŁ</a></td>
  31. </tr>
  32. </table>";
  33.  }
  34.  elseif($old_id <> "" AND $new_id <> "")
  35.  {
  36.  echo "<table width=31% border=1>
  37. <tr>
  38. <td width=30%>$row[name]</td>
  39. <td width=38%><a href=?mode=edit&id=$row[id]>EDYTUJ</a>|<a href=?mode=delete&id=$row[id]>USUŃ</a></td>
  40. <td width=32%><a href=?mode=up&id=$row[id]&old_id=$old_id>GÓRA</a>|<a href=?mode=down&id=$row[id]&new_id=$new_id>DÓŁ</a></td>
  41. </tr>
  42. </table>";
  43.  }
  44.  elseif ($new_id == "")
  45.  {
  46.  echo "<table width=31% border=1>
  47. <tr>
  48. <td width=30%>$row[name]</td>
  49. <td width=38%><a href=?mode=edit&id=$row[id]>EDYTUJ</a>|<a href=?mode=delete&id=$row[id]>USUŃ</a></td>
  50. <td width=32%><a href=?mode=up&id=$row[id]&old_id=$old_id>GÓRA</a></td>
  51. </tr>
  52. </table>";
  53. }
  54. $old_id = $row[id];
  55. }
  56.  
  57.  echo "<br><br><a href=?mode=add>DODAJ</a> <br>";
  58.  echo "<a href=menu.php><- POWRÓT</a>";
  59. ?>


Oraz dalej części odpowiadające za zmianę pola 'ord' w bazie:

  1. <?php
  2. //przesunięcie kategorii do góry
  3.  
  4. //Pobranie kolejności kategorii, która ma być przeniesiona do góry
  5. $result_id = mysql_query("SELECT ord FROM cms_category WHERE id = '$_GET[id]'")
  6. or die("Niepoprawne zapytanie MySQL");
  7. $row_id = mysql_fetch_array($result_id);
  8. //Pobranie kolejności kategorii, która ma być przeniesiona w dół
  9. $result_old_id = mysql_query("SELECT ord FROM cms_category WHERE id = '$_GET[old_id]'")
  10. or die("Niepoprawne zapytanie MySQL");
  11. $row_old_id = mysql_fetch_array($result_old_id);
  12.  
  13. //Zmiana kolejności
  14. $update = mysql_query("UPDATE cms_category SET ord = '$row_old_id[ord]' WHERE id = '$_GET[id]'")
  15. or die("Niepoprawne zapytanie MySQL");
  16. $upd = mysql_query("UPDATE cms_category SET ord = '$row_id[ord]' WHERE id = '$_GET[old_id]'")
  17. or die("Niepoprawne zapytanie MySQL2");
  18. echo "Kategoria przeniesiona";
  19. echo "<br><a href=category.php><- Powrót</a>";
  20. ?>


Problem jest mianowicie taki, że klikając na Góra albo w ogóle nic się nie dzieje, albo gdy klikam na ostatnią kategorię przenosi ją na samą górę, a nie o jeden.



--------------

Problem rozwiązany. Można usunąć.

Ten post edytował zlw 2.05.2007, 09:00:23


--------------------
Krzysztof Zalewski :: blog

----------------------------------------------------------------------------------------

Go to the top of the page
+Quote Post
Balon
post 2.05.2007, 10:51:54
Post #2





Grupa: Zarejestrowani
Postów: 422
Pomógł: 0
Dołączył: 14.12.2005
Skąd: Wałbrzych

Ostrzeżenie: (0%)
-----


To co napisales nie ma sensu - zmiana kolejnosci.

Zmieniasz id jednego na inny. I w tym momencie masz dwa rekordy o tym samym id wiec kolejne zapytanie zmienia dwa rekordy naraz.. Bez sensu winksmiley.jpg

Ja bym dal jakas wartosc tymczasowa najpierw jednemu np -1 winksmiley.jpg a potem kombinowalbym


--------------------
Postura wielka i morda wredna, jestem Balon, kozak z osiedla !
bzdury.pl - Królestwo rozrywki
Go to the top of the page
+Quote Post
skowron-line
post 2.05.2007, 12:59:29
Post #3





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


daj pole w bazi np. pozycja i tam nadaj wartosci i wtedy zamieniaj

i tak jak wspomnial kolega nie pracuj na id


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.07.2025 - 12:53