Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów
Zmiana statusu pozycji w menu - 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: Zmiana statusu pozycji w menu (/thread-zmiana-statusu-pozycji-w-menu)

Strony: 1 2


Zmiana statusu pozycji w menu - e-konrad - 26-01-2012

Witam wszystkich serdecznie.

Piszę funkcję która umożliwia mi zmianę statusu pozycji w menu z aktywnej na nieaktywną i na odwrót. Problem polega na tym że ta funkcja działa tylko na ostatnio dodanej pozycji.

Poniżej przedstawiam kod
Kod PHP:
<?php
$wynik 
mysql_query("SELECT * FROM menu")
or die(
'Błąd zapytania');


if(
mysql_num_rows($wynik) > 0) {

    while(
$r mysql_fetch_assoc($wynik)) {
    
$stat $r['status'];
        
        echo 
"".$r['tytul']."";
        
        
        echo 
"<a href=\"index.php?go=menu&a=status&amp;id={$r['id']}\">";
        if (
$stat == 1){ 
        echo 
"<img src=images/stat1.gif >&nbsp;&nbsp;";
        } 
        else { 
        echo 
"<img src=images/stat0.gif >&nbsp;&nbsp;";
        }
        echo 
"</a>";
     }
}
$a trim($_REQUEST['a']);
$id trim($_GET['id']);

if(
$a == 'status' and !empty($id)) {
    if (
$stat == 1) {
    
mysql_query("UPDATE menu SET status=0 WHERE id='$id'") or die('Błąd zapytania');
    
header('Location: index.php?go=menu');
    }
    else {
    
mysql_query("UPDATE menu SET status=1 WHERE id='$id'")or die('Błąd zapytania');
    
header('Location: index.php?go=menu');
    }
}
    
?>

Tak jak pisałem, funkcja działa tylko do ostatnio dodanej pozycji. Proszę o wyjaśnienie dlaczego tak się dzieje oraz co powinienem poprawić


RE: Zmiana statusu pozycji w menu - Pedro84 - 26-01-2012

Nic takiego nie widzę problematycznego. URLe masz w porządku?


RE: Zmiana statusu pozycji w menu - e-konrad - 26-01-2012

URLe są OK. Po wyświetleniu wszystkich pozycji menu (aktywne i nieaktywne) pozycje mogę zdezaktywować, ale już kolejne kliknięcie nie działa na zmianę statusu, jedynie tak jak pisałem tylko ostatnio dodana pozycja zachowuje się poprawnie.

Czy operacja zmiany statusu powinna znajdować się w innym pliku php niż w tym w którym jest ona wywołana? Powyższy kod przedstawia plik menu.php widziany w przeglądarce jako:
Cytat:index.php?go=menu



RE: Zmiana statusu pozycji w menu - Pedro84 - 26-01-2012

To jak ładujesz plik znaczenia nie ma.

Rozumiem, że nie używasz AJAXa? Następuje przeładowanie strony?

Spróbuj, po deaktywacji jakieś pozycji, wyświetlić sobie źródło strony i sprawdzić te URLe jeszcze raz. Na chwilę obecną, nic do głowy mi nie przychodzi innego.

---

Spróbuj w tym fragmencie,
Kod:
if($a == 'status' and !empty($id)) {
    if ($stat == 1) {
    mysql_query("UPDATE menu SET status=0 WHERE id='$id'") or die('Błąd zapytania');
    header('Location: index.php?go=menu');
    }
    else {
    mysql_query("UPDATE menu SET status=1 WHERE id='$id'")or die('Błąd zapytania');
    header('Location: index.php?go=menu');
    }
}
przed if'em, dać sobie var_dump($stat);


RE: Zmiana statusu pozycji w menu - e-konrad - 26-01-2012

Pod listą pozycji menu pojawiło się
Kod:
string(1) "1"

Przeładowanie strony działa za każdym razem, ale ponowna zmiana statusu pierwszych pozycji nie działa

Po wyświetleniu var_dump($stat); widzę że wartość nie przechowuje jako int tylko nie wiem dlaczego.

Niestety, po zamianie fragmentu kodu
Kod:
$stat = $r['status'];
na kod
Kod:
$stat = (int)$r['status'];
polcenie var_dump($stat); wyrzuca mi:
Kod:
int(1)

ale wraz funkcja nie działa


RE: Zmiana statusu pozycji w menu - Pedro84 - 26-01-2012

Czyli ślepy jestem bo nic nie widzę.

Z drugiej strony, po zastanowieniu, lepiej byłoby gdybyś przekazywał w URL status, odeszły by Ci te if'y niepotrzebne, a to problem rozwiąże na pewno.


RE: Zmiana statusu pozycji w menu - e-konrad - 27-01-2012

Gdybym status przekazywał w URL to czy muszę odnieść się do pliku który odpowiada za zmianę statusu, przykładowo: index.php?go=statusUp&id albo index.php?go=statusDown&id , gdzie pliki statusUp.php i statusDown.php zawierają funkcję atywacji/dezaktywacji statusu?


RE: Zmiana statusu pozycji w menu - Pedro84 - 27-01-2012

Nie. Po prostu w momencie wyświetlania pozycji, generujesz odpowiedni link, np:
Kod:
$status = ($r['status'] == 0) ? 1 : 0;
reszta może zostać tak jak jest. Aczkolwiek, musisz sprawdzać czy masz parametry w GET.


RE: Zmiana statusu pozycji w menu - e-konrad - 27-01-2012

Zrobiłem tak jak opisałem po swojemu i na razie działa dobrze, tylko że musiałem utworzyć dwa pliki odpowiadające za zmianę statusu ale i tak na końcu dodałem header() wiec zmiana jest praktycznie natychmiastowa.

Z php jeszcze raczkuję ale będę próbować też Twoim sposobem. Dziękuję Ci za podrzucenie pomysłu o przekazywaniu statusu w URL.

Pozdrawiam


RE: Zmiana statusu pozycji w menu - Pedro84 - 27-01-2012

Widzisz, raczkujesz, ale strasznie podoba mi się Twoje podejście.

Chcesz się uczyć, poznawać, a takim osobom, aż chce się pomagać, uwierz. Podejście inne nić 99% początkujących Smile