Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Blokada na więcej niż jeden proces
Forum PHP.pl > Forum > Przedszkole
atomek_16
Kochani!
Jak zrobić blokadę, aby np. przy update skrypt nie wykonał więcej niż 1 proces?

Chodzi mi o to, że na przykład ktoś edytuje artykuł i wciska "zmień". I jest funkcja update()
i aby była blokada, że może wykonać tylko i wyłącznie jeden proces i będzie on właśnie update?

Mam taki problem, że już drugi raz zdarzyło mi się, że przy updatowaniu pozmieniał wszystkie wpisy w bazie :/ mimo że miał warunek WHERE id_uzytkownika=$idusera AND numer_artykulu=$edytowany_artykul_numer

BARDZO WAS proszę o pomoc, życzliwe rady i jakby była możliwość o jakieś przykłady

Z poważaniem
SongoQ
Temat wiele razy byl na tym forum, poszukaj. Najprosciej zrobic przeladowanie lub zapisywac w sesji ze juz taka czynosc zostala wykonana.
atomek_16
Cytat(SongoQ @ 3.06.2006, 11:38 ) *
Temat wiele razy byl na tym forum, poszukaj. Najprosciej zrobic przeladowanie lub zapisywac w sesji ze juz taka czynosc zostala wykonana.


Właśnie o to chodzi, że jest zaraz po update();
echo "<script>location.href='index.php'</script>";

Skrypt działał przez kilka miesięcy bez zarzutu, aż nagle po jednej edycji jakiegoś użytkownika (trudno stwierdzić którego, bo wszystko się pozmieniało) edycji nie uległ tylko jeden artykuł, ale wszystkie (takie same tytuły, taki sam tekst, ta sama kategoria).

Skrypt nawet nie zdołał dojść do przekierowania lub sprawdzenia sesji.

Wykonał update (pomiając warunki WHERE) dla wszystkich wpisów w bazie, dopiero jak skończył wykonał przekierowanie.

I stąd moje pytanie czy jest jakaś możliwość nakazania przy UPDATE, aby wykonał daną czynność tylko i wyłącznie raz i zakończył.

Pozdrawiam
atomek_16
Aby było zabawniej ( :/ ) skrypt wykonał się w dziwaczny sposób.

Przykład:
Chcę zmienić tytuł, tekst i kategorię artykuły.

Tytuł: AAAA
Tekst: BBBB
Kategoria: CCCC
Id_artykulu (hidden): 101
Id_uzytkownika (hidden): 102

Update:

  1. <?php
  2. $zmiana = "UPDATE artykuly SET tytul='$tytul', kategoria='$kategoria', tekst='$tekst' WHERE id='$Id_artykulu' AND uzytkownik='$Id_uzytkownika'";
  3. $dokonaj = mysql_query($zmiana);
  4. ?>


Efekt w bazie danych:
Wszystkie rekordy maja zmieniony:
Tytul na AAAA
Tekst na BBBB
a KATEGORIA na , kategoria=
(dokładnie tak)

sad.gif
SongoQ
Cytat
I stąd moje pytanie czy jest jakaś możliwość nakazania przy UPDATE, aby wykonał daną czynność tylko i wyłącznie raz i zakończył.


NIE

Cos nie chce mi sie wierzyc ze to to zapytanie tak Ci namieszalo. Przeciez warunek ogranicza zmiane. Dla pewnosci mozesz dodac LIMIT 1. Odnosnie przeladowania mowielem o header a nie js. Pokombinuj z sesja.
atomek_16
Właśnie sad.gif mnie też w to trudno uwierzyć. Nie dość, że stało się, mimo warunków, to jeszcze (jak pisałem wyżej) wszystkie kolumny "kategoria" mają kawałek kodu z update, to znaczy:

, kategoria=

Wszystkie przyjęły taką wartość.

Jak zabezpieczy, aby nie działo się tak w przyszłości to nie mam pojęcia sad.gif
jest sprawdzenie sesji, są warunki, jest zaraz przekierowanie po update() i jest limit.
SongoQ
Cytat
Wszystkie przyjęły taką wartość.

Hm moze ktos Ci psikusa zrobil. Przepatrz jeszcze raz kod bo moze jest jeszcze jakis blad.
atomek_16
Cytat(SongoQ @ 3.06.2006, 12:08 ) *
Hm moze ktos Ci psikusa zrobil. Przepatrz jeszcze raz kod bo moze jest jeszcze jakis blad.


Na początku pierwsze co przyszło mi na myśl to właśnie to, że "ktoś zrobił psikusa". Jednak gdyby rzeczywiście tak było to czy męczył by się, aby wyedytować artykuł i wpisać sensową treść, kategorię i tytuł? (chodzi o to, że wszystkie wpisy zmieniły się podług tej zmiany).

Sprawdzałem skrypt jak się zachowuje na różnego rodzaju próby z wstawianiem przekombinowanego kodu php, java (wyłączona), html (wyłączony)... różne kombinacje.
:/

Przychodzi mi na myśl taka oto sytuacja:
W czasie edycji serwer działał poprawnie. Użytkownik wcisnął "zmień i musieli wyłączyć apache/mysql czy jak?
I pełne zapytanie nie poszło. Włączyli ponownie bez wyczyszczenia pamięci i wykonało się błędne zapytanie. Czy to możliwe?
SongoQ
Raczej cos takiego jest nie mozliwe, poniewaz musisz wyslac cale zapytanie zeby wykonac. Trudno stwierdzic co jest przyczyna.
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.