Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Jquery, php, html]Niepożądana zmiana id diva prowadzi do błędnego wstawienia danych
Forum PHP.pl > Forum > Po stronie przeglądarki
Programer
Witam,
Spotkałem się z pewnym problemem. Mianowicie zbudowałem sobie formularz do dodawania komentarzy pod określonym artykułem. Formularz działa w oparciu o Jquery, PHP, HTML, Ajax oraz JSON i rzecz jasna CSS, ale to już mało istotne. Dane, czyli komentarz trafia do bazy danych MySQL. Sam formularz działa prawidłowo.
W wielkim skrócie formularz działa następująco. W skrypcie Jquery obsługuję zdarzenie click przycisku "Dodaj", który jest odpowiedzialny za wysłanie danych formularza. Dane te następnie Ajaxem wysyłam do skryptu PHP o nazwie "walidacja.php", który to właśnie odpowiedzialny jest za walidację danych formularza. Informacje o ewentualnych błędach (np. zły email, zła captcha) powracają następnie JSON-em do skryptu Jquery i tam jeśli podam, np. nieprawidłowy adres email to odpowiednie pole dostaje czerwoną obwódkę. Nie w tym jednak rzecz. W przypadku gdy wszystkie dane z pól formularza są prawidłowe to w pliku walidacyjnym "walidacja.php" zachodzi operacja wstawienia danych do bazy.

I teraz tak, jak to przejrzyście opisać. W bazie danych mam 3 tabele:
a ) Articles - odpowiedzialna za przechowywanie artykułów, każdy artykuł posiada IDArticle jako klucz główny
b ) Comments - przechowuje komentarze, klucz dla każdego to IDComment
c ) ArtCom - trzecia tabela, której zadaniem jest powiązanie odpowiednich komentarzy z odpowiednimi artykułami. Zawiera klucze obce do powyższych tabel (IDArticle i IDComment)

W momencie podania prawidłowych danych w formularzu, jak już napisałem wyżej, w pliku walidacja.php następuje wstawienie danych do dwóch tabel. Najpierw do tabeli Comments wstawiany jest komentarz (przy tam nick, email), a zaraz potem w tabeli ArtCom jest tworzone powiązanie: czyli wstawiam ID komentarza i ID artykułu. W ten sposób komentarz ląduje pod artykułem, pod którym jest pisany.

Tu zaczynają się schody i to bez poręczy. Muszę znać właśnie ID komentarza (tego co dopiero wstawiłem) oraz ID artykułu, pod którym piszę komentarz. Z ID komentarza problemu nie ma: wstawiam dane do tabeli i następnie odczytuję ID wstawionych danych. Problem jest z ID artykułu bo skądś muszę go wziąć.
Artykuł pod którym piszę dany komentarz leży w div-ie, którego id ma postać "articlex", gdzie x to ID artykułu pobrany z bazy podczas wyświetlenie strony. Wygląda to następująco, np.:
Kod
<div id="article5">artykuł"</div>
<div>komentarze</div>

Pobieram zatem w skrypcie Jquery tą wartość, wycinam zbędne "article" i w ten sposób uzyskuję potrzebny ID artykułu. Następnie wartość ta (razem z danymi z pól formularza) jest Ajax-em wysyłana do pliku walidacja.php i tam wstawienie do tabeli ArtCom nie generuje dużego problemu bowiem oba potrzebne identyfikatory już znam.

Do czego jednak zmierzam.

Zauważyłem, że gdy, obojętnie czy to Firebugiem w Firefoksie czy edytorem strony wbudowanym w Chrome, zamienię wartość identyfikatora diva, w którym leży komentarz, tzn. zmienię cyfrę, która tam jest, np. z nazwy "article7" na "article8" to do Jquery idzie fałszywy ID artykułu (np. zamiast 7 to 8) i dalej reakcja łańcuchowa: Ajax wysyła do pliku walidacja.php zły ID artykułu, a afekt jest taki, że komentarz zamiast być dodany pod aktualnie wyświetlonym artykułem to ląduje pod innym.
Mam nadzieję, że dobrze to wytłumaczyłem.

Pytanie: jak się przed taką niechcianą zmianą id diva zabezpieczyć?
BugsBunny
Jeżeli w adresie strony z formularzem masz ID artykułu np. index.php/arykul/1 to możesz w walidacja.php sprawdzić sobie wartość $_SERVER['HTTP_REFERER'], czyli zmiennej mówiącej z jakiego adresu przyszło zapytanie i stamtąd pobrać ID artykułu. Jeżeli chcesz mieć dodatkowe zabezpieczenie możesz pobierać z DIV i z adresu i porównywać ich wartości.
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.