Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Proste zapytanie dodaje podwójnie rekordy.
Forum PHP.pl > Forum > PHP
1010
Mam proste zapytanie do bazy danych, dodajace rekord do tabel, jednak za każdym razem rekord dodawany jest podwojnie. Nie mam pojęcia w czym problem.

Wklejam caly kod php pliku ktory jest includowany do innego pliku:

  1. <?
  2.  
  3. if (($logged!=true)||($admin!=true))
  4. {
  5. header ("location: wyloguj.php");
  6. die();
  7. }
  8.  
  9. $zapytanie=mysql_query("SELECT * FROM `news_spolecznosc` WHERE `id`='".$_GET['id']."' LIMIT 1;")
  10. or die ("Blad komunikacji z baza. 69");
  11.  
  12. if (mysql_num_rows($zapytanie)==0)
  13. {
  14. die ("<center>News o podanym id nie istnieje!!!</center>");
  15. }
  16. $rekord=mysql_fetch_array($zapytanie);
  17. mysql_query("UPDATE `news_spolecznosc` SET `accepted`='1';")
  18. or die ("Blad komunikacji z baza 70");
  19.  
  20. mysql_query("INSERT INTO `news` VALUES ('','".$rekord['categ_id']."','".$rekord['id_author']."','".$rekord['date']."','".$rekord['title']."','".$rekord['contents']."');")
  21. or die ("Blad komunikacji z baza. 71");
  22. print "aaa";
  23. print $id;
  24. copy ("../news_avatars/spolecznosc/".$rekord['id'].".gif","../news_avatars/".$id.".gif");
  25.  
  26.  
  27.  
  28. ?>


Co najciekawsze, pierwsza mysl jaka mi przyszla do glowy to to ze plik wykonuje sie dwa razy np poprzez podwojne includowanie, jednak wstawiajac kontrolne printy "aaa" oraz $id wyswietlaja sie one tylko raz. Co jeszcze ciekawsze print $id wyswietla id rekordu przedostatniego. Tzn ze jezeli przed wykonaniem skryptu mielismy najwyzsze id nr np 22, to po wykonaniu skryptu w bazie pojawiaja sie dwa identyczne rekordy o id 23 i 24, skrypt zas wyswietla tylko id nr 23.
Ktos wie o co tutaj chodzi? Ja juz sie pogubilem i nie ma pojecia z ktorej strony to zlapac.
Z gory wielkie dzieki za jakakolwiek pomoc.
Pozdrawiam

PS. Ciekawe jest rowniez to, ze kopiowanie pliku ktore odbywa sie na koncu skryptu rowniez wykonuje sie podwojnie, tzn ze plik kopiowany jest dwa razy...
bendi
  1. <? if( !empty( $GLOBALS['use_only_once'] ) ) { return; }
  2. $GLOBALS['use_only_once'] = 1; ?>
1010
Nie do konca wiem jak to zastosowac.
Jakas podpowiedz?

W miejsce "return" wstawilem moje zapytanie dodajace dane.
Teraz nie dodaje zadnego rekordu dla odmiany :/ juz nie mam sil do tego masakra...
Ktos wie o co chodzi?

Nastepnie wywalilem wykrzykni z warunku przed "empty" i znow dodaje podwojnie :/

Nie pomaga nawet wstawienie die(); zaraz za zapytaniem - i tak dodaje dwa razy... :/

Ostatecznie problem rozwiazalem doraznie wstawiajac za zapytanie headera i przekierowalem strone gdzie indziej. Dziala ok, jednak na pewno nie jest to pelne rozwiazanie tematu.
Jak sadze mam gdzies podwojne includowanie, ale jak narazie nie mam pojecia gdzie :/ moze uda mi sie to pozniej znalezc.
Jak na cos wpadniecie to piszcie tongue.gif
Dzieki i sorki za zamieszanie smile.gif
pozdrawiam
bartoland
Mimo, że od postawienia tematu minęło trochę czasu dopiszę co mi się przytrafiło - a objawy miałem identyczne.

Efektem błędu było podwójne wykonywanie operacji na bazie danych. Przy select nie było tego widać ale w insert już zdecydowanie tak. W moim przypadku błąd był taki zupełnie niezwiązany z includowaniem czy bazą danych, mianowicie:

Stworzyłem sobie odnośnik do strony w taki sposób:
<a class="buton" href="adres"> <button type="button">OK</button> </a>
Nie chciało mi się pisać formularza by zrobić przycisk i myślałem że można i tak.
Efekt działania jest taki że cała strona ładuje się dwa razy i to najśmieszniejsze że nie zawsze. Wygląda to mniej więcej tak, że jak kliknę myszką w OK to się wykona dwa razy, ale jak obok ok tak by trafić jedynie na button to się wykona tylko raz.

Spędziłem 2h przed kompem zanim znalazłem przyczynę.
Pozdrawiam.
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.