Avatar billede -kenner- Nybegynder
09. juli 2006 - 18:44 Der er 9 kommentarer

MySQL forspøgsel returnere fejl ved SELECT.

Hej eksperter,

Jeg har lavet en likke besøgstæller funktion, for at identificere whilke IP-adresser der kommer forbi min side oftest, men der opstår en fejl, når de har besøgt sitet engang og der efter besøger den igen. Første gang de besøger det bliver de oprettet i databasen, hvilket går fint men anden gang får jeg dennefejlmeldign:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource on line 15

Hvad er det der går galt, og hvordan kan jeg rette det?

Source:
$ansoeg = mysql_query ("SELECT Count(*) FROM `besoeg` WHERE IP = '".$_SERVER['REMOTE_ADDR']."'") or die (mysql_error());
$antal = mysql_result($ansoeg,0);
if($antal >0){
$foresp = mysql_query("SELECT * FROM `besoeg` WHERE IP = '".$_SERVER['REMOTE_ADDR']."'");
$data = mysql_fetch_array($foresp);
$visit = $data['besoeg'] + 1;
mysql_query("UPDATE besoeg SET Besoeg='$visit', Sidste_Besoeg='".time()."' WHERE IP = '".$_SERVER['REMOTE_ADDR']."'") or die (mysql_error());
    }else{
    mysql_query("INSERT INTO besoeg (IP, Besoeg, Sidste_Besoeg) VALUES ('".$_SERVER['REMOTE_ADDR']."', '1', '".time()."')") or die(mysql_error());
    }
Avatar billede iss Novice
09. juli 2006 - 18:52 #1
Prøv:
$ansoeg = mysql_query ("SELECT * FROM `besoeg` WHERE IP = '".$_SERVER['REMOTE_ADDR']."'") or die (mysql_error());
$antal = mysql_num_rows($ansoeg);
if ($antal >0){
    $data = mysql_fetch_array($ansoeg);
    $visit = $data['besoeg'] + 1;
    mysql_query("UPDATE besoeg SET Besoeg='$visit', Sidste_Besoeg='".time()."' WHERE IP = '".$_SERVER['REMOTE_ADDR']."'") or die (mysql_error());
}
else {
    mysql_query("INSERT INTO besoeg (IP, Besoeg, Sidste_Besoeg) VALUES ('".$_SERVER['REMOTE_ADDR']."', '1', '".time()."')") or die(mysql_error());
}
Avatar billede leif Seniormester
09. juli 2006 - 19:00 #2
$ansoeg = mysql_query ("SELECT Count(*) FROM `besoeg` WHERE IP = '".$_SERVER['REMOTE_ADDR']."'") or die ("1. ".mysql_error());
$antal = mysql_result($ansoeg,0);
if($antal >0){
$foresp = mysql_query("SELECT * FROM `besoeg` WHERE IP = '".$_SERVER['REMOTE_ADDR']."'");
$data = mysql_fetch_array($foresp);
$visit = $data['Besoeg'] + 1;
mysql_query("UPDATE `besoeg` SET Besoeg='$visit', Sidste_Besoeg='".time()."' WHERE IP = '".$_SERVER['REMOTE_ADDR']."'") or die ("2. ".mysql_error());
    }else{
    mysql_query("INSERT INTO `719327` (IP, Besoeg, Sidste_Besoeg) VALUES ('".$_SERVER['REMOTE_ADDR']."', '1', '".time()."')") or die("3. ".mysql_error());
    }


Har jeg lige brugt med success.
Avatar billede -kenner- Nybegynder
09. juli 2006 - 19:01 #3
Det virker perfekt..

Jeg skulle dog ændre  $visit = $data['besoeg'] + 1; til
  $visit = $data['Besoeg'] + 1;
Men det er en fejl fra min side :)
Avatar billede iss Novice
09. juli 2006 - 19:06 #4
Skulle også virke:
$ansoeg = mysql_query ("SELECT * FROM `besoeg` WHERE IP = '".$_SERVER['REMOTE_ADDR']."'") or die (mysql_error());
$antal = mysql_num_rows($ansoeg);
if ($antal >0){
    mysql_query("UPDATE besoeg SET Besoeg = Besoeg +1, Sidste_Besoeg='".time()."' WHERE IP = '".$_SERVER['REMOTE_ADDR']."'") or die (mysql_error());
}
else {
    mysql_query("INSERT INTO besoeg (IP, Besoeg, Sidste_Besoeg) VALUES ('".$_SERVER['REMOTE_ADDR']."', '1', '".time()."')") or die(mysql_error());
}
Avatar billede -kenner- Nybegynder
09. juli 2006 - 19:06 #5
iss din virker perfekst send svar.
Avatar billede iss Novice
09. juli 2006 - 19:11 #6
Ellers tak...
Avatar billede Slettet bruger
10. juli 2006 - 13:25 #7
Man kan lave en lille finte i SQL, så proceduren kan klares med et kald til databasen i stedet for først at lave et kald for at kontrollere og bagefter et nyt kald for at skrive. Manualen beskriver det på http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

mysql_query("INSERT INTO besoeg (IP, Besoeg, Sidste_Besoeg) VALUES ('".$_SERVER['REMOTE_ADDR']."', '1', '".time()."') ON DUPLICATE KEY UPDATE Besoeg=Besoeg+1, Sidste_Besoeg = VALUES(Sidste_Besoeg)") or die(mysql_error());

Denne ene (dog lidt lange) linie skulle kunne erstatte hele koden, der har været arbejdet med i dette spørgsmål.
Avatar billede -kenner- Nybegynder
06. august 2006 - 12:23 #8
sandbox send svar for deltagelse, da iss er så gavmild ikk at ville have point.
Avatar billede Slettet bruger
10. august 2006 - 22:26 #9
Var det ikke nærmere leif, der skulle have? Jeg blandede mig jo først, da du sagde opgaven var løst.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester