PHP/MySQL update: counter=counter+1 hoogt op met 2*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • lavagiant
  • Registratie: April 2002
  • Laatst online: 23-03-2018
Query:
$query = mysql_query("UPDATE pagina SET count = (count + 1) WHERE ID = " . intval($ID) . "");

Dat is een query die ik uitvoer om het aantal hits op een pagina 1 op te hogen. Echter, bij het uitvoeren van deze query (eenmaal!) wordt de waarde van count met 2 opgehoogd. Ik heb vanalles geprobeerd en nagekeken, maar het komt echt door deze query.

Ik heb iets soortgelijks een keer eerder gehad op een andere site. Daar heb ik het opgelost door bovenaan de pagina de huidige waarde op te vragen met een SELECT, deze 1 op te hogen, en die onderaan de pagina met een UPDATE weer te wijzigen. Erg omslachtig maar toen de enige oplossing.

In dit geval kan het niet op die manier. Heeft iemand een id wat het probleem kan zijn?

// Edit: Als ik de query rechtstreeks in phpMyAdmin invoer is het resultaat wel correct.

[ Voor 8% gewijzigd door lavagiant op 07-09-2005 11:40 ]


Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Er moet ergens anders iets misgaan waardoor je pagina twee keer opgeroepen wordt (gebruik je (i)frames? een img gegenereerd door dit scriptje? oid) :)

In ieder geval dit is beter op z'n plek in Programming & Webscripting :)

Software Algemeen >> Programming & Webscripting

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Je voert je SQL Statement stiekem twee keer ergens uit, of je roept hem 2 keer aan?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • lavagiant
  • Registratie: April 2002
  • Laatst online: 23-03-2018
Het is 1 pagina die aangeroepen wordt.

Deze pagina creeert de class Pagina.
Dan wordt $pagina->inc_hits() aangeroepen die de query bevat. Ik heb ook een echo in de inc_hits functie gezet zodat ik kan zien hoe vaak deze aangeroepen wordt, maar dat is toch echt maar 1 keer.

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Zet eens een print "test"; direct na die regel, dan zie je gelijk hoe vaak hij uitgevoert wordt. Of vraag de waarde van het veld op voor en na de update en print hem uit. Dan kun ook controleren of het wel goed werkt.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • lavagiant
  • Registratie: April 2002
  • Laatst online: 23-03-2018
Dat was een goede. Het resultaat:

VOOR: 114
NA: 115

Resultaat in DB: 116

Dus de query gaat gewoon goed. Ik d8 dat ik toch echt geen andere aanroepen had buiten deze functie om. Maar dit bewijst dus dat het wel ergens nog een keer moet staan zonder dat ik de functie aanroep. Dus dan ga ik toch maar graven waar dat ergens kan zijn.

Iig bedankt voor de reacties tot nu toe! :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Weet je echt 100% zeker dat je dit niet in een functie hebt staan die je meermaals aanroept, of in een aparte file die je vaker dan eens include? Dat zijn de enige verklaringen die ik kan bedenken in dit geval.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • ShadowLord
  • Registratie: Juli 2000
  • Laatst online: 18-09 22:12
Is de pagina class toevallig een auto_prepend file? Ik had namelijk hetzelfde probleem ook met mijn counter die 2x of meer) werdt opgehoogd als ik dynamische (PHP gegenereerde) plaatjes had... Het auto_prepend script werd ook aangeroepen voor die PHP files --> dus 2x verhoging!

Om te debuggen, probeer eens deze code net onder of boven je update regel te zetten:
PHP:
1
$query = mysql_query("INSERT INTO counterdebug (page, time) VALUES ('".$_SERVER["PHP_SELF"]."', ".time().")");


Maak ook de bijbehorende tabel aan in de DB:
SQL:
1
2
3
4
5
6
CREATE TABLE `counterdebug` (
`id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`page` VARCHAR( 128 ) NOT NULL ,
`time` INT( 10 ) UNSIGNED NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = innodb;


Dit logged dan iedere keer welke pagina die regel (en dus ook de update regel) aanroept.

You see things; and you say, "Why?" But I dream things that never were; and I say, "Why not?"


Acties:
  • 0 Henk 'm!

  • lavagiant
  • Registratie: April 2002
  • Laatst online: 23-03-2018
Mijn held! _/-\o_

Thnx voor de tip.

Ik vond dit:
.../counter.php?sw=1280&sc=32&referer=http://...&page=http://...

Ik maak gebruik van een statistieken systeem voor de complete website, maar er worden ook hits bij gehouden die in het CMS zichtbaar zijn. Het eerste systeem roept mijn pagina om de een of andere reden nogmaals aan. Nu weet ik dus waar ik moet gaan sleutelen.

[ Voor 6% gewijzigd door lavagiant op 07-09-2005 15:25 ]

Pagina: 1