[HTML][MySQL][SQL] Wpisy się duplikują mimo if-a porównującego, Wpisy się duplikują mimo if-a porównującego |
[HTML][MySQL][SQL] Wpisy się duplikują mimo if-a porównującego, Wpisy się duplikują mimo if-a porównującego |
14.07.2012, 20:21:58
Post
#1
|
|
Grupa: Zarejestrowani Postów: 131 Pomógł: 0 Dołączył: 31.05.2010 Ostrzeżenie: (0%) |
Taki mały problem.. próbowałem już chyba z 10 sposobów na porównanie wpisanego komentarza z tymi już wpisanymi wcześniej i z jakiegoś powodu zamiast porównywać, sprawdza owszem ale nie blokuje niczego - głównie chodzi mi o to żeby się nie dodawały komentarze po odświeżeniu strony powtarzalność wpisów jest drugorzędnym problemem.
Możecie popatrzeć niżej co mam nie tak? Tylko nadmienię że to już chyba 10 jeśli nie 12 wersja skryptu i pewnie tam jest namieszane za bardzo.. Będę bardzo wdzięczny za obejrzenie tego świeżym okiem ...
|
|
|
14.07.2012, 20:27:40
Post
#2
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 23.12.2006 Skąd: Będzin / Kraków Ostrzeżenie: (0%) |
A próbowałeś funkcji unset() ? Zastosuj go pod koniec if'a
Ten post edytował matty7 14.07.2012, 20:28:09 |
|
|
14.07.2012, 20:41:01
Post
#3
|
|
Grupa: Zarejestrowani Postów: 131 Pomógł: 0 Dołączył: 31.05.2010 Ostrzeżenie: (0%) |
czyli że np
if ($add) { unset($_POST['zmienna']) } Wolałbym jednak porównywać żeby jednocześnie sprawdzało czy już takie wpisy są... Jeszcze dodam ze to stronka z mojego podpisu ... zebyscie mogli zobaczyc jak to wyglada .. Ten post edytował konradkw 14.07.2012, 20:42:06 |
|
|
14.07.2012, 20:46:50
Post
#4
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 9 Dołączył: 3.03.2011 Ostrzeżenie: (0%) |
W formularzu polu ukrytym generuj i przekazuj zmienną losową lub np. liczbę mikrosekund (funkcja microtime) i dodawaj tę zmienną do bazy przy rekordzie.
Później przy dodawaniu komentarza możesz sprawdzać czy taka zmienna już jest w bazie i jeśli jest to odrzucaj komentarz. Zmienną losową możesz tez utworzyć przez połączenie liczby mikrosekund i np. liczbą losową rzędu 1000. Jaka jest szansa, że dwóch kolesi w tej samej mikrosekundzie wylosuje tą samą liczbę losową? Ogólnie preferuję łączenie takiej pseudolosowości właśnie z funkcjami czasu - sama losowość nie gwarantuje nam, że ktoś kiedyś nie wylosuje takiej samej liczby.... No i co jakiś czas możesz w bazie czyścić te pola przy rekordach starszych niż np. 1 dzień Ten post edytował skleps 14.07.2012, 20:49:28 |
|
|
14.07.2012, 20:48:03
Post
#5
|
|
Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) |
Jeżeli chodzi Ci tylko o odświeżenie strony to wystarczy, że po obsłudze danych z POST i dodaniu do bazy zrobisz redirect.
-------------------- |
|
|
14.07.2012, 20:51:19
Post
#6
|
|
Grupa: Zarejestrowani Postów: 131 Pomógł: 0 Dołączył: 31.05.2010 Ostrzeżenie: (0%) |
ale czemu utrudniać... nie chcę mieć dwóch takich samych komentarzy w bazie więc nie wystarczy porównać treści?
redeemer - przekierowanie do bloga spowrotem? to powinno zadziałać bo wyczyści zmienne... widzicie może dlaczego duplikują się wpisy? |
|
|
14.07.2012, 20:54:36
Post
#7
|
|
Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) |
To załóż indeks typu UNIQUE w bazie (np. na autor,komentarz). A tak właściwie to po co ta pętla while w PHP jak sama baza Ci to może zwrócić jednym zapytaniem, czy już taki komentarz jest, czy nie.
Edit: Ja polecałbym jednak redirect, a jeśli chciałbyś się zabezpieczyć przed spamowaniem (bo samo porównanie treści mało Ci da) to zrób limit czasowy, że można dodać X komentarzy w ciągu Y minut. Ten post edytował redeemer 14.07.2012, 20:59:30 -------------------- |
|
|
16.07.2012, 11:57:11
Post
#8
|
|
Grupa: Zarejestrowani Postów: 131 Pomógł: 0 Dołączył: 31.05.2010 Ostrzeżenie: (0%) |
mogę prosić o poprawę tego co już mam żebym miał doraźnie rozwiązane? później ewentualnie bym to zmienił na to co proponujecie ..? Będę wdzięczny.
Naprawde nie widze dlaczego wpisy sie duplikuja - czy moze ktos podpowiedziec prosze? Chodzi mi o juz nie tyle o to ze da sie wpisac ten sam komentarz ale o to ze po dodaniu jednego komentarza dodaje sie np ich 5 lub 6... :/ jak widzicie ponizej, wpisy sie powielaja bez powodu .. ale wyswietla sie tylko JEDEN Z NICH!! dlaczego .. ? nie rozumiem co sie dzieje .. Ten post edytował konradkw 15.07.2012, 23:57:11 |
|
|
16.07.2012, 14:01:23
Post
#9
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 22 Dołączył: 22.06.2012 Ostrzeżenie: (0%) |
Zacznijmy od tego że na końcu masz coś w nadmiarze klamerek jak widać po tym jak ułożyłem skrypt. Kolejna rzecz to twoje porównywanie nie działa z prostego powodu ponieważ porównujesz każdy element z bazy i przechodząc do kolejnego elementu zapominasz o wyniku porównania poprzedniego ( bo podmieniasz zmienną ). To co dałem, wyszuka ci w bazie czy jest rekord w którym `komentarz` = '$a' LIMIT 1 dałem po to by skrypt nie szukał już dalej, bo nie ma to sensu. Jeżeli znajdzie to $x = 'dalej'; bez żadnego elsa by nie podmieniał rekordów ( chociaż już teraz LIMIT 1 blokuje dalsze podmienianie ) Dalej jest już twój skrypt ( z małą zmianą w warunku ifa - dodałem @ by nie pluł się w że takiej zmiennej nie ma gdy nie znajdzie nic w bazie ). Ten post edytował Shido 16.07.2012, 14:03:19 -------------------- Sorka za błędy ort. jak coś dajcie znać na PW to popoprawiam.
|
|
|
16.07.2012, 14:11:21
Post
#10
|
|
Grupa: Zarejestrowani Postów: 131 Pomógł: 0 Dołączył: 31.05.2010 Ostrzeżenie: (0%) |
nie dodaje komentarzy wcale teraz :/
co to znaczy: @$x to tak powinno byc? edit: bez @ tez nie dziala .. Ten post edytował konradkw 16.07.2012, 14:12:45 |
|
|
16.07.2012, 14:13:25
Post
#11
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 22 Dołączył: 22.06.2012 Ostrzeżenie: (0%) |
Skrewiłem, źle obrałem warunek ( zamiast blokować powtarzający się komentarz, to tylko takie akceptował )
A @$x powoduje że debuger nie będzie krzyczał jeżeli zmienna $x nie będzie istnieć. Teraz powinno być dobrze.
Ten post edytował Shido 16.07.2012, 14:14:39 -------------------- Sorka za błędy ort. jak coś dajcie znać na PW to popoprawiam.
|
|
|
16.07.2012, 14:16:35
Post
#12
|
|
Grupa: Zarejestrowani Postów: 131 Pomógł: 0 Dołączył: 31.05.2010 Ostrzeżenie: (0%) |
jakiego debugera uzywasz? ja szukam dobrego bo dreamviewer nei wylapuje wszystkiego ..
po poprawce juz nie duplikuje wpisow - dziekuje uprzejmie!! zastanawia mnie tylko jedna rzecz .. dlaczego po dodaniu wpisu (strona sie odswieza zeby wyslac info) najnowszy wpis sie nie pokazuje do kolejnego odswiezenia .. ? |
|
|
16.07.2012, 14:20:32
Post
#13
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 22 Dołączył: 22.06.2012 Ostrzeżenie: (0%) |
Ja korzystam ze standardowego Apache'owego tyle że ustawiam
I mi wtedy najmniejsze błędy wyświetla. Co do odświeżania komentarze musiałyby być odświeżane niezależnie od strony. Ewentualnie po dodaniu komentarza wymuś odświeżenie, lub przenieś skrypt dodania komentarza przed skrypt ich wyświetlania ( najbardziej prawdopodobne że tak masz ) -------------------- Sorka za błędy ort. jak coś dajcie znać na PW to popoprawiam.
|
|
|
16.07.2012, 14:25:10
Post
#14
|
|
Grupa: Zarejestrowani Postów: 131 Pomógł: 0 Dołączył: 31.05.2010 Ostrzeżenie: (0%) |
zgadza sie - przenioslem na sama gore .. i jest gitara..
Gdzie to "ini_set('display_errors', 1);" ustawiasz? w apache? czy dajesz to w skrypcie? - nigdy tego nie uzywalem .. |
|
|
16.07.2012, 14:28:06
Post
#15
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 22 Dołączył: 22.06.2012 Ostrzeżenie: (0%) |
ogólnie opcje są 2 ustawiasz w PHP.ini display_errors na 1 lub dajesz w pliku php. Jeżeli cały serwer opiera się na np. pliku index.php to wystarczy że dasz to na początku tego index i będzie jak trza, w innym wypadku musisz dać w każdym pliku w którym chcesz by wyświetlały się błędy.
Ten post edytował Shido 16.07.2012, 14:28:41 -------------------- Sorka za błędy ort. jak coś dajcie znać na PW to popoprawiam.
|
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 05:10 |