Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][SQL][PHP]Dziwna inkrementacja +2. Wina PHP, MySQL czy moja?
Forum PHP.pl > Forum > Przedszkole
kamil17289
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ę.
lobopol
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.
nospor
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.
potreb
Nospor mówi prawdę, głupi system szukania pliku config powodował że dodawało mi+ 2 zamiast 1 a może nawet 10 razy!
kamil17289
Witam. Miło widzieć tyle podpowiedzi z rana 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 tongue.gif Spróbuje wieczorkiem zrobić coś pod linuxem Ubuntu, tam się czuję nieco swobodniej.
Dziękuję wszystkim za pomoc wink.gif

Witam ponownie. Znalazłem winowajcę 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 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 wink.gif
nospor
Cytat
Byłem pewny że nie powtarzam kodu
A ja ci napisałem ze wykonujesz go dwa razy a nie powtrzasz. Drobna różnica.
kamil17289
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.
nospor
Cytat
czy to czasem nie wina kodu, że strona otwiera się "dwa razy"..
Na pewno nie tego kodu co tu nam pokazałeś.
by_ikar
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.
kamil17289
Reszta jest banalna... Nie wysyłam żadnych nagłówków, nie robię przekierowań ani innych cudów. Zwyczajnie chcę zwiększyć wartość o jedyneczkę 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 smile.gif
Już wiadomo, co powodowało podwójne wykonanie kodu - brak instrukcji echo biggrin.gif
Dzięki wszystkim.
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.