Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][SQL][PHP]Dziwna inkrementacja +2. Wina PHP, MySQL czy moja?, Problem dotyczy inkrementacji która wykonuje się dwa razy...
kamil17289
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.11.2011

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


Witam.
Jestem nowym użytkownikiem. Przeszukałem trochę forum, ale nie znalazłem wątków dotyczących mojego problemu, więc zakładam nowy.
Mam kod

  1. $article = mysql_fetch_array ($result1, MYSQL_ASSOC);
  2. $sql = "UPDATE ".$config->db_prefix."articles SET views=views+1 WHERE id=".$article['id'];
  3. $result2 = mysql_query($sql);


Po wyświetleniu $sql instrukcją echo wygląda ona poprawnie, i wysłana do bazy przez phpMyAdmina daje efekt o jaki mi chodzi, tj. zwiększa pole 'views' o 1.
Kiedy jednak wykona ją skrypt PHP przez mysql_query, w bazie pojawia się wartość większa od poprzedniej o 2, jak gdyby napisane było views=views+2.
Przeanalizowałem dokładnie cały kod, i nigdzie nie inkrementuję nic dwa razy. Instrukcja w phpMyAdmin działa poprawnie. Dla eksperymentu spróbowałem dać w kodzie views=views+2. Ku mojemu zaskoczeniu, wartość zwiększała się wtedy o 4.
Czy ktoś orientuje się o co chodzi? Czy to wina PHP czy MySQL czy czegoś jeszcze innego?
Pozdrawiam i dziękuję.
Go to the top of the page
+Quote Post
lobopol
post
Post #2





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


Daj die() zaraz za tym zapytaniem, i wykonaj, czy wykonało się dwa razy? Nie masz żadnego powtórzenia na 100%? Jak nie pomoże to zrób plik favicon.ico (może być pusty) w katalogu z plikiem.
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Napiszę ci to samo co w tym temacie:
http://forum.php.pl/index.php?showtopic=18...mp;#entry918556

Odpowiedź jest banalnie prosta. Wykonujesz kod 2 razy. Albo strona ci się odswieza, albo kupa innych rzeczy powodujących wykonanie tego kodu dwa razy.

Były dziesiatki takich "problemów" na forum, ludzie zawsze się zastrzegali że robią to tylko raz, ale zawsze się okazywalo, że robią to jednak dwa razy, zazwyczaj nieswiadomie, posrednio z jakiegoś innego powodu.
Go to the top of the page
+Quote Post
potreb
post
Post #4





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Nospor mówi prawdę, głupi system szukania pliku config powodował że dodawało mi+ 2 zamiast 1 a może nawet 10 razy!
Go to the top of the page
+Quote Post
kamil17289
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.11.2011

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


Witam. Miło widzieć tyle podpowiedzi z rana (IMG:style_emoticons/default/wink.gif)
Utworzyłem plik favicon, bo faktycznie odwołanie do niego znajduje się w pliku szablonu, ale że szablon jeszcze nie jest skończony, plik favicon.ico nie istniał fizycznie. Nic to nie zmieniło. Próbowałem też sprawdzać to funkcją die(). Postawienie jej przed mysql_query($sql) powoduje że zapytanie nie jest wykonywane i wartość w bazie pozostaje taka sama przy odświeżaniu strony. Postawienie jej za mysql_query($sql) powoduje inkrementację +2, zamiast +1.
Przeanalizowałem też ponownie kod skryptu, nie znalazłem powtórzeń. Poza tym widać że ich nie ma po tym jak to się zachowuje przy kombinacjach z die()...
Zapoznałem się też z wysłanym wątkiem. Jestem nowicjuszem raczej i nie używałem jeszcze PDO, i nie wiele zrozumiałem z tamtych odpowiedzi...
Używam serwera Apache i MySQLa w XAMPP dla Windows, i nie potrafię znaleźć w nim .htaccess (IMG:style_emoticons/default/tongue.gif) Spróbuje wieczorkiem zrobić coś pod linuxem Ubuntu, tam się czuję nieco swobodniej.
Dziękuję wszystkim za pomoc (IMG:style_emoticons/default/wink.gif)

Witam ponownie. Znalazłem winowajcę (IMG:style_emoticons/default/wink.gif) A jest nim źle skonfigurowany Firefox dla Windows, w wersji 7.0.1. W wersji dla Linucha nie dzieją się żadne cuda. Opera, Safari i Chrome dla Windows też dają pozytywne rezultaty. Zaktualizuję się do wersji FF 8 i zobaczę co to da, ewentualnie popatrzę po konfiguracji. Byłem pewny że nie powtarzam kodu (IMG:style_emoticons/default/wink.gif) Zresztą, przecież samo zapytanie do bazy nie ma prawa zwiększać o dwa jeśli jest sformułowane w taki sposób (views=views+1).
Problem rozwiązany.
Dziękuję wszystkim i pozdrawiam (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Byłem pewny że nie powtarzam kodu
A ja ci napisałem ze wykonujesz go dwa razy a nie powtrzasz. Drobna różnica.
Go to the top of the page
+Quote Post
kamil17289
post
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.11.2011

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


Oczywiście, ale oprócz ciebie inne osoby napisały w tym temacie. Lobopol pytał czy nie mam powtórzenia na 100%.
Gdyby ktoś wpadł na pomysł co zrobić z tym FF żeby tego tak nie odświeżał to byłbym wdzięczny, bo w about:config jest tyle opcji że głowa mała.
No i dalej nie wiem czy to czasem nie wina kodu, że strona otwiera się "dwa razy"... W innych przeglądarkach jest normalnie.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
czy to czasem nie wina kodu, że strona otwiera się "dwa razy"..
Na pewno nie tego kodu co tu nam pokazałeś.
Go to the top of the page
+Quote Post
by_ikar
post
Post #9





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Może używasz w ff jakąś wtyczkę, która ci jeszcze raz wczytuje stronę na której aktualnie jesteś? Wtyczek do ff jest tyle że ciężko powiedzieć która to jest akurat, najlepiej wyłącz wszystkie, i pojedynczo je włączaj, sprawdzając po każdym włączeniu wtyczki swoją stronę czy dodają ci się 2 czy 1.
Go to the top of the page
+Quote Post
kamil17289
post
Post #10





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.11.2011

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


Reszta jest banalna... Nie wysyłam żadnych nagłówków, nie robię przekierowań ani innych cudów. Zwyczajnie chcę zwiększyć wartość o jedyneczkę (IMG:style_emoticons/default/tongue.gif)
Wyłączyłem wszystkie dodatki i wtyczki w FF, ale nie pomogło. Ale podczas otwierania strony w konsoli WWW widać następujący wpis:

[19:23:39.377] GET http://127.0.0.1/aftg/ [HTTP/1.1 200 OK 31ms]
[19:23:39.550] GET http://127.0.0.1/aftg/ [HTTP/1.1 200 OK 15ms]

A po wycięciu w pliku szablonu fragmentu:
  1. <link rel="stylesheet" href="<?php $cms_config->cms_base_url.'templates/'.$cms_config->cms_layout.'/style.css'; ?>" type="text/css"/>


jedynie:
[19:30:07.870] GET http://127.0.0.1/afterglow/ [HTTP/1.1 200 OK 32ms]

i strona znów działa poprawnie (IMG:style_emoticons/default/smile.gif)
Już wiadomo, co powodowało podwójne wykonanie kodu - brak instrukcji echo (IMG:style_emoticons/default/biggrin.gif)
Dzięki wszystkim.

Ten post edytował kamil17289 5.12.2011, 19:50:37
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.09.2025 - 16:46