Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Proste zapytanie dodaje podwójnie rekordy.
1010
post
Post #1





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

Ostrzeżenie: (0%)
-----


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...


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
bendi
post
Post #2





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


  1. <? if( !empty( $GLOBALS['use_only_once'] ) ) { return; }
  2. $GLOBALS['use_only_once'] = 1; ?>


--------------------
Go to the top of the page
+Quote Post
1010
post
Post #3





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

Ostrzeżenie: (0%)
-----


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

Ten post edytował 1010 3.11.2006, 10:12:41


--------------------
Go to the top of the page
+Quote Post
bartoland
post
Post #4





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 10.04.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:54