Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów
W górę / W dół - Skrypt do panelu strony - Wersja do druku

+- Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów (https://www.webmastertalk.pl)
+-- Dział: Technologie internetowe - tworzenie stron WWW (https://www.webmastertalk.pl/forum-technologie-internetowe-tworzenie-stron-www)
+--- Dział: Programowanie, Bazy danych (https://www.webmastertalk.pl/forum-programowanie-bazy-danych)
+--- Wątek: W górę / W dół - Skrypt do panelu strony (/thread-w-gore-w-dol-skrypt-do-panelu-strony)

Strony: 1 2


W górę / W dół - Skrypt do panelu strony - tinware - 11-07-2009




RE: W górę / W dół - Skrypt do panelu strony - Sajam - 11-07-2009

W bazie dodaj kolumnę: pozycja.
Przy dodaniu pozycji zwiększaj ją o 1.

Przy naciśnięciu w górę:
- pobierasz pozycję i id wciśniętego elementu,
- wyciągasz z bazy element z pozycją o jedną większą,
- zamieniasz elementy pozycjami,
analogicznie w dół.

Przy takim rozwiązaniu nie musisz się martwić co się stanie jak usuniesz jakiś element Wink Mam gdzieś implementacje tego, bo pisałem nie raz, ale poćwicz sam to dużo się nauczysz ;]


RE: W górę / W dół - Skrypt do panelu strony - tinware - 11-07-2009

Zerknij okiem, skrypt niby jakoś działa, ale się nie raz myli przy przenoszeniu w dol, niewiem czemu:


Kod:
elseif($_GET['action'] == 'up' or $_GET['action'] == 'down') {
        
    $nr = $_GET['id'];
    
    if($_GET['action'] == 'up') {
        $liczba = ($nr+1); //rekord o jedna pozycje wyzej
    }
    else {
        $liczba = ($nr-1); //rekord o jedna pozycje nizej
    }

    //pobranie z bazy danych rekordu ktory ma byc wyzej/nizej
    $query1 = "SELECT * FROM news WHERE nr=" .$nr. "";
    $wynik = mysql_query($query1);
    //rozłozenie rekordu na osobne pozycje
    $post = mysql_fetch_assoc($wynik);
    $tytul = $post['tytul'];
    $osoba = $post['osoba'];
    $tresc = $post['tresc'];
    $data = $post['data'];
    
    //pobranie rekordu o jedne poziom wyzej/nizej niż aktulany
    $query2 = "SELECT * FROM news WHERE nr=" .$liczba. "";
    $wynik = mysql_query($query2);
    echo mysql_error(). ': ' .mysql_errno();
    //rozłożenie rekordu na osobne pozycje
    $wyzszy = mysql_fetch_assoc($wynik);
    $wTytul = $wyzszy['tytul'];
    $wOsoba = $wyzszy['osoba'];
    $wTresc = $wyzszy['tresc'];
    $wData = $wyzszy['data'];
    
    //zamiana pozycji
    //najpierw rekord ktory był wyżej/nizej
    $query3 = "UPDATE news SET
                tytul = '$wTytul',
                tresc = '$wTresc',
                osoba = '$wOsoba',
                data = '$wData'
                WHERE nr = $nr";
    $wynik = mysql_query($query3);
    
    //teraz rekord ktory chcemy zamienic
    $query4 = "UPDATE news SET
                tytul = '$tytul',
                tresc = '$tresc',
                osoba = '$osoba',
                data = '$data'
                WHERE nr = $liczba";
    $wynik = mysql_query($query4);
    echo mysql_errno();
    }



RE: W górę / W dół - Skrypt do panelu strony - Sajam - 11-07-2009

Źle... Nie zrozumiałeś mnie do końca.
Kod:
if($_GET['action'] == 'up') {
    $liczba = ($nr+1); //rekord o jedna pozycje wyzej
} else {
    $liczba = ($nr-1); //rekord o jedna pozycje nizej
}
To nie działa tak. Tutaj narzucasz z góry pozycje ("nr" - dodajesz, albo odejmujesz jedno), ale pomyśl co będzie, jeżeli usuniesz jakiś rekord i będziesz próbował coś przesunąć - wtedy nie zadziała, bo nie znajdzie rekordu o 1 mniejszego/większego.

Podrzucę Ci mój kod (przesuwanie w dół):
Kod:
case 'down':
        
            // Pozycja przesuwanego elementu
            $poz = (int)$_GET['poz'];

            // Pobieramy ID większej pozycji aby zamienić się z nią
            $q = mysql_query("SELECT * FROM `newsy` WHERE `poz`>'$poz' ORDER BY `poz` ASC LIMIT 1");
            if ( mysql_num_rows($q) > 0 ) {
                
                $r = mysql_fetch_array($q);
                $idNowej = $r['id'];
                $pozNowej = $poz;
                $pozPrzesuwanej = $r['poz'];
                
                $q = mysql_query("UPDATE `newsy` SET `poz`='$pozPrzesuwanej' WHERE `poz` = '$poz'".$b."");
                $q = mysql_query("UPDATE `newsy` SET `poz` = '$pozNowej' WHERE `id` = '$idNowej'".$b."");
                
                header('Location:admin.php?a=menu');
                                
                
            } else {
                print '<div class="tip">Nie można już przesunąć w dół.</div>';
            }
        
            break;



RE: W górę / W dół - Skrypt do panelu strony - BlueMan - 12-07-2009

Musisz stworzyć osobną kolumnę w tej bazie danych w której będziesz przetrzymywać kolejność pozycji.

Wtedy przesunięcie +1 i -1 zawsze prawidłowo zadziała.


RE: W górę / W dół - Skrypt do panelu strony - neo_17 - 21-07-2009

kolumna oczywiscie integer co nie BlueMan ;> Big Grin a chciałem sie spytac" doswiadczonych" programistów czy pisanie strukturalne bardzo wieje wiochą ??


RE: W górę / W dół - Skrypt do panelu strony - KowR - 21-07-2009

Wieje wiochą. Big Grin

OOP to podstawa.


RE: W górę / W dół - Skrypt do panelu strony - neo_17 - 21-07-2009

osz kurde ;/ to musze sie wziąć ale no php "znam" zaledwie rok i to sie tak uczylem po godzinach ( po szkole ) Smile mam jeszcze czas Big Grin
a programowanie obiekotowe to g klasy no nie ;> no a skad taki kurs wziac pisania obiekotowego Sad aj cos mi sie wydaje ze tego nie skumam Sad ale tak myslalem gdy sie uczylem z samego poczatku Smile jakos musze ogarnac Smile
a i czym sie rozni to pisanie strukturalne od obiektowego ?? teraz zobaczylem ze wiele nauki przedemna Sad


RE: W górę / W dół - Skrypt do panelu strony - kajzur - 21-07-2009

Różni się przede wszystkim podejściem - w programowaniu wszystko jest obiektem, obiekty mogą zawierać w sobie obiekty, a te w sobie inne obiekty.. Obiekty mogą dziedziczyć, można używać wzorców projektowych, a to wszystko dość ładne można użyć w framework'ach Smile To nie jest trudne, ale inne.. Miałem problemy z przejściem do OOP.


RE: W górę / W dół - Skrypt do panelu strony - neo_17 - 21-07-2009

rodi mam pytania
1) czy po wejsciu na moja strone widac ze jest pisana strukturalnie ?
2)jak zrobic takie linki jak na demotywatory.pl ? proste takie nie jak u mnie na stronie Sad