[PHP] optellen in mysql levert extra telling

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Ankh
  • Registratie: Mei 2001
  • Laatst online: 15:34
Goed, howto explain :o

Om toch eens mijn site te updaten en te verbeteren ben ik bezig geweest om mijn oude php scripts eens te verbeteren. En te verkleinen. Beginnende bij het eerste stukje wat geopend bij het bekijken van mijn site.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
include("./include/global.php");
$user_tot = $database->query("SELECT * FROM visitors WHERE ip = '$user_ip'");
$user_aan = mysql_num_rows($user_tot);
if($user_aan=='0') {
    $database->query("INSERT visitors VALUES ('$user_ip', '1', '$user_host')");
} elseif ($user_aan > 0) {
    $toev=$database->query("SELECT visits FROM visitors WHERE ip = '$user_ip'");
    while(list($num_visits)=mysql_fetch_row($toev)) {
        $num_visits=$num_visits+1;
        $database->query("UPDATE visitors SET visits=$num_visits WHERE ip ='$user_ip'");
    }
}


de include is niet meer dan het laden globals / classes en functions.

Nu leek mij het 2de gedeelte, de elseif, veel simpeler te kunnen. Namelijk:
PHP:
1
$database->query("UPDATE visitors SET visits = visits + 1 WHERE ip = '$user_ip'");


Op elke website staat dit nou eenmaal dus zo simpel als het kan wezen zou dit moeten werken.
En voila het werkte, enkel... bij het optellen krijg ik ineens 2 extra (dus elke keer website laden geeft mij +2 op mijn visitors lijstje...

Nu kan ik de oude wel gewoon toepassen en dat is misschien de beste oplossing (en dit werkt dus niet). Maar ik zie even door de bomen het bos niet meer en vraag me dan ook af waarom ik dus +2 krijg.. iemand die mijn hersenen even kan wakker schudden.

Thanks

-Ankh- Camera Gear: Nikon D7000 | Nikon AF-S DX 16-85mm f3.5-5.6 AF-S DX VR & Tokina AT-X 116 Pro DX AF 11-16mm f2,8


Acties:
  • 0 Henk 'm!

Verwijderd

Aangezien je MySQL gebruikt kun je INSERT INTO ... ON DUPLICATE KEY UPDATE gebruiken, dat scheelt je 3 queries in je code, en het scheelt je rekenen in PHP.

Acties:
  • 0 Henk 'm!

  • Ankh
  • Registratie: Mei 2001
  • Laatst online: 15:34
thanks dat scheelt inderdaad :D

dit is hem geworden:
PHP:
1
$database->query("INSERT INTO visitors VALUES ('$user_ip', '1', '$user_host') ON DUPLICATE KEY UPDATE visits=visits+1");


Alleen ik krijg dus weer het probleem dat er 2 opgeteld worden... Dit kan niet aan deze query liggen lijkt me...

-Ankh- Camera Gear: Nikon D7000 | Nikon AF-S DX 16-85mm f3.5-5.6 AF-S DX VR & Tokina AT-X 116 Pro DX AF 11-16mm f2,8


Acties:
  • 0 Henk 'm!

Verwijderd

Dat kan inderdaad niet. Mogelijk staat er een URL teveel in je HTML document waardoor elke hit een tweede hit oplevert, een URL die verkeerd wordt gerewrite of iets dergelijks? Of misschien include je die code tweemaal?

Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 23-08 23:43
Krijg je door regel 8 in combinatie met MYSQL_BOTH (is dat zo bij jou?) niet het effect dat deze query 2x per record wordt doorlopen.
Zie http://nl2.php.net/manual/en/function.mysql-fetch-array.php

Acties:
  • 0 Henk 'm!

Verwijderd

Bolukan schreef op maandag 04 februari 2008 @ 21:03:
Krijg je door regel 8 in combinatie met MYSQL_BOTH (is dat zo bij jou?) niet het effect dat deze query 2x per record wordt doorlopen.
Zie http://nl2.php.net/manual/en/function.mysql-fetch-array.php
Ik kan het me niet voorstellen, als ik de C API van de mysql client in m'n achterhoofd houd. Dat zou wel een hele krankzinnige implementatie van de koppeling met PHP zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

Misschien is het bestand dubbel ge-include? Gebruik eens require_once als je dat bestand apart in laad

Acties:
  • 0 Henk 'm!

  • Ankh
  • Registratie: Mei 2001
  • Laatst online: 15:34
*bangs head on the table*
zucht, blijkbaar had ik nog een ghost scriptje draaien die elke keer bij het laden van de pagina hem nog een keer laadde (alleen dit merkte je niet..) heel typisch...

*fluit rustig door*

-Ankh- Camera Gear: Nikon D7000 | Nikon AF-S DX 16-85mm f3.5-5.6 AF-S DX VR & Tokina AT-X 116 Pro DX AF 11-16mm f2,8

Pagina: 1