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>
<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ć?