Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql]"Przenoszenie" rekordów do góry i na dół
Forum PHP.pl > Forum > Przedszkole
zlw
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ąć.
Balon
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
skowron-line
daj pole w bazi np. pozycja i tam nadaj wartosci i wtedy zamieniaj

i tak jak wspomnial kolega nie pracuj na id
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.