Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zmiana pozycji obiektu
Forum PHP.pl > Forum > Przedszkole
Włóczykij
Witam, czy byłby ktoś chętny na wykonanie skryptu zmiany pozycji "obiektu" z poziomu panela administracyjnego? Konkretnie wkomponowanie go w skrypt memht portal na stronie eioban.com/articles.

Kod
id1 [Jakiś news]-------[up][down]
id2 [Jakiś news]-------[up][down]
id3 [Jakiś news]-------[up][down]


Jeżeli jest jakiś ładnie opisany skrypt prosiłbym o odnośnik.
korkie
Witam.

Rozwiązanie problemu jest bardzo proste.
Baza danych musi mieć kolumnę index ( nie id !).
Zmieniając kolejność zamieniasz po prostu indeksy, a wyświetlasz dane posortowane właśnie wg indeksów.

Ale jest jedna pułapka:

wiersz 1 | id=1 | indeks =1 |
wiersz 2 | id=2 | indeks =2 |

Jeśli z automata zamienisz w wierszach indeksy, to w chwili zmiany będą one miały tą samą wartość i zamiana się sypnie.
Rozwiązanie:
Najpierw przypisujesz dla wiersz1 indeks abstrakcyjny, np. indeks=99999, potem zamieniasz w wiersz2 indeks=2 na indeks=1,
a na końcu wartość abstrakcyjną czyli dla wiersz1 indeks=99999 na indeks=2.

I wszystko powinno działać.
Oczywiste jest, że indeksy powinny zamieniać swe wartości dynamicznie.
Byłoby nonsensem posługiwanie się konkretnymi liczbami przypisanymi do indeksów.
Rozwiązanie (takie ogólne):

$indeks_obecnie_używany # - to twój indeks, który ma zamienić się wartością np. z tym pierwszym w kolejności o wartości niższej.
# Nie powinieneś zakładać, że będzie on miał po prostu wartość $indeks_obecnie_używany-1, bo w chwili usunięcia jakiegoś wiersza z tabeli
zamiana może się nie wykonać.
$indeks_obecnie_używany pobierzesz sobie z bazy w chwili kliknięcia np. na link "w górę".
Potem pobierz indeks niższy lub wyższy, mniej więcej tak:

$a="SELECT indeks FROM tabela WHERE indeks<= indeks_obecnie_obslugiwany";
$b = mysql_query($a);
while($w = mysql_fetch_array($b))
{
#Z pętli foreach wyciągniemy ostatnią wartość, czyli tą która nas ineteresuje - indeks o jeden niższy niż obecny;
foreach ($w as $wartosc)
{
}
}
$wartosc; # - to twój indeks o jeden niższy.

Można przystąpić do zamiany.
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.