Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Zmiana statusu pozycji w menu
#1
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ć
Odpowiedz
#2
Nic takiego nie widzę problematycznego. URLe masz w porządku?
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#3
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
Odpowiedz
#4
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);
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#5
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
Odpowiedz
#6
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.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#7
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?
Odpowiedz
#8
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.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#9
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
Odpowiedz
#10
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
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Wink [PROBLEM][PHP] Zmiana języku www! Korsakoff 1 1,748 20-03-2012, 00:28
Ostatni post: Pedro84
  Zmiana małych liter na duże - PHP SkuterPL 2 2,927 17-02-2012, 21:50
Ostatni post: SkuterPL
  Dynamiczna zmiana rozmiaru obrazka rev5 1 1,926 12-11-2011, 20:04
Ostatni post: toma5z
  [PHP MySQL] nie działa dodawanie statusu treecom 1 2,453 21-06-2011, 19:44
Ostatni post: Sosna
  Zmiana rekordu mysql na podstawie roznic w 2 tablicach jaro74 0 1,931 30-01-2011, 20:49
Ostatni post: jaro74

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości
Sponsorzy i przyjaciele
SeoHost.pl