Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dwukrotne wysyłanie danych do bazy
Forum PHP.pl > Forum > Przedszkole
JinLisek
Witam. Piszę stronę internetową i mam taki problem, że strona dodaje mi do bazy danych dwa razy te same rekordy, dokładniej w tym przypadku do tabel `zapytanie_znajomosci` i `messages` wstawia podwójne rekordy, ale mam ten problem też w innych sytuacjach... Nie mam ifa w while, już nie wiem dlaczego może tak być...
Daję kod, mam nadzieję, że ktoś potrafi mi pomóc...

  1. <?php
  2.  
  3. $dodaj_znajomego = zabezpiecz_string($_GET['dodaj_znajomego']);
  4. if($dodaj_znajomego == true)
  5. {
  6. $dodaj_znajomego = false;
  7. $q_dodajacy = mysql_query("SELECT * FROM `users` WHERE `id_usera` = '$id_usera' LIMIT 1;");
  8. $r_dodajacy = mysql_fetch_assoc($q_dodajacy);
  9.  
  10. mysql_query("INSERT INTO `zapytanie_znajomosci` (`id_wysylajacego`, `id_odbierajacego`) VALUES ('$id_usera', '$idu');");
  11.  
  12. $tytul = "Zapytanie o znajomość.";
  13. $data_wyslania = date("Y.m.d H:i");
  14. $tresc =
  15. "
  16. Użytkownik ".$r_dodajacy['login']." zaprasza Cię do grona znajomych. Przyjmujesz zaproszenie?
  17. <a href=\"?id=przyjmij_znajomego&idwys=".$id_usera."&idodb=".$idu."\">TAK</a>
  18. <a href=\"?id=odrzuc_znajomego&idwys=".$id_usera."&idodb=".$idu."\">NIE</a>
  19. ";
  20. mysql_query("INSERT INTO `messages` (`id_odbiorcy`, `id_nadawcy`, `tytul`, `data_wyslania`, `tresc`) VALUES ('$idu', '$id_usera', '$tytul', '$data_wyslania', '$tresc');");
  21. ?>
  22. <script type="text/javascript">
  23. location.href='?id=profil&idu=<?php echo $idu; ?>';
  24. </script>
  25. <?php
  26. }
  27. ?>
Daiquiri
Proszę poprawić BBCode - tak na start.

Pytanie zasadnicze brzmi: Czy po dodaniu do bazy "wracasz" na ten sam adres? Jeżeli tak to zerknij na var_dump($dodaj_znajomego) przed warunkiem.
!*!
Czyli mogę dodać znajomego przez link? Zabezpiecz to jakoś isset
JinLisek
Cytat(Daiquiri @ 24.09.2011, 19:16:39 ) *
Proszę poprawić BBCode - tak na start.

Pytanie zasadnicze brzmi: Czy po dodaniu do bazy "wracasz" na ten sam adres? Jeżeli tak to zerknij na var_dump($dodaj_znajomego) przed warunkiem.


Nie rozumiem co mam poprawić w związku z tym BBCode (bo chyba nie chodzi tu o mój kod tylko post na forum) - jeśli chodzi o znaczniki [PHP] i [MySQL] w nazwie tematu to zaznaczyłem je...

W sprawie tego problemu: jestem na stronie np "?id=profil&idu=8", po kliknięciu linka przenosi mnie na stronę "?id=profil&idu=8&dodaj_znajomego=true", a później przez skrypt js w ifie przenosi mnie spowrotem na "?id=profil&idu=8"...

Na marginesie dodam, że jestem początkujący, co raczej widać...
Daiquiri
Poprawiłam tag.

Jeżeli "wracasz" na stronę, w której masz Insert -> to prawdopodobnie spełnia się Twój warunek (mimo, iż próbujesz zmiennej nadać wartość FALSE). Dodaj var_dump($dodaj_znajomego) przed Ifem, to zobaczysz czy przy powrocie zmienna $dodaj_znajomego jest jednak TRUE i dane dodają się raz jeszcze (ponieważ warunek jest spełniony).
JinLisek
Cytat(Daiquiri @ 24.09.2011, 19:38:22 ) *
Poprawiłam tag.

Jeżeli "wracasz" na stronę, w której masz Insert -> to prawdopodobnie spełnia się Twój warunek (mimo, iż próbujesz zmiennej nadać wartość FALSE). Dodaj var_dump($dodaj_znajomego) przed Ifem, to zobaczysz czy przy powrocie zmienna $dodaj_znajomego jest jednak TRUE i dane dodają się raz jeszcze (ponieważ warunek jest spełniony).


Nie jestem pewny czy dobrze to sprawdziłem, ale chyba miałaś rację z tym, że zmienna nadal ma wartość true... Co mogę zrobić w tym wypadku, jeśli nie chce się jej zmienić wartość?

Chciałbym się dowiedzieć też co dokładnie było źle w moim tagu, żeby na przyszłość nie popełnić tego błędu...

Do !*!: chciałem to zrobić na formularzu, ale mam do kliknięcia obrazek i tekst, więc pomyślałem, że łatwiej będzie na linku...
!*!
Źle się do tego zabierasz. Dane do bazy wysyłasz jakimś formularzem? To sprawdź czy został wysłany przez isset($_POST['submit']);
JinLisek
Cytat(!*! @ 24.09.2011, 19:49:02 ) *
Źle się do tego zabierasz. Dane do bazy wysyłasz jakimś formularzem? To sprawdź czy został wysłany przez isset($_POST['submit']);


Nie... Przechwytuję z linku $_GET['dodaj_znajomego'] i wtedy daję warunek

  1. $dodaj_znajomego = $_GET['dodaj_znajomego'];
  2. if($dodaj_znajomego == "true")
  3. {
  4. mysql_query("INSERT INTO...");
  5. }
!*!
Mało bezpieczne wink.gif sprawdzaj to na tej samej zasadzie.
JinLisek
Cytat(!*! @ 24.09.2011, 19:54:45 ) *
Mało bezpieczne ;) sprawdzaj to na tej samej zasadzie.


Dzięki, zupełnie się nie znam na zabezpieczaniu strony, więc każde wytknięcie luki będę przyjmował z entuzjazmem smile.gif

Teraz dałem if( isset($_GET['dodaj_znajomego'] ), tylko, że to nie rozwiązuje mojego problemu...
Daiquiri
No to przestań przekierowywać na adres z ustawioną zmienną $_GET['dodaj_znajomego'], wtedy warunek nie będzie spełniony.
JinLisek
Cytat(Daiquiri @ 24.09.2011, 20:03:50 ) *
No to przestań przekierowywać na adres z ustawioną zmienną $_GET['dodaj_znajomego'], wtedy warunek nie będzie spełniony.


Właśnie za pierwszym razem muszę przekierować... Spróbuję to wytłumaczyć dokładniej...

1. Użytkownik wchodzi na profil kogoś o adresie "?id=profil&idu=12";
2. Postanawia dodać osobę, której profil odwiedził do znajomych, klika "dodaj do znajomych" co przekierowuje go na stronę "?id=profil&idu12&dodaj_znajomego=true";
3.Strona widzi, że jest $_GET['dodaj_znajomego'], więc dodaje do bazy danych rekord, a później przy pomocy js przekierowuje na stronę z 1 punktu: "?id=profil&idu=12" - tu już nie ma dodaj_znajomego=true, więc nie powinna się drugi raz instrukcja wykonywać...
Daiquiri
Ale na górze masz $dodaj_znajomego = zabezpiecz_string($_GET['dodaj_znajomego'])? Musisz po prostu sprawdzić skrypt "od góry" pod kątem przypisywania wartości do zmiennej $dodaj_znajomego, bo jak sam stwierdziłeś przyjmuje wartość TRUE smile.gif.

Może po prostu przed $dodaj_znajomego = zabezpiecz_string($_GET['dodaj_znajomego']) wstaw warunek (if_isset($_GET['dodaj_znajomego'])) a w nim dopiero wywołaj funkcję zabezpiecz_string(). Opcjonalnie w tej funkcji zwracaj FALSE jeżeli $_GET['dodaj_znajomego'] nie została ustawiona.
CuteOne
Więc przed zapisem sprawdź czy użytkownik ma już danego Pana/Panią w znajomych... nie ma dodaj / ma brak akcji
JinLisek
Próbowałem sposobem Daiquiri, ale mi nie wychodziło, więc ostatecznie zrobiłem to sposobem CuteOne... Dziękuję wszystkim za pomoc smile.gif
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.