registrering af ip og hostname til database?

Tags:    php

<< < 12 > >>
Jeg prøver at få min hp til at registrere ip og hostname på mine besøgende.. og skrive det
i en database.
den skriver godt nok til db men den gør det 2 gange pr gæst? og det er tomme felter den indsætter?

mine globale variabler er


$sesscookie = $_COOKIE['besog'];
$remotehost = $_SERVER['REMOTE_ADDR'];
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);


og selve funktionen ser således ud


function taelbesoeg() {

if($sesscookie == ""){

$sqlcommand = "INSERT INTO taeller(ipadresse,reverselookup) ";
$sqlcommand .= "VALUES('$remotehost','$hostname')";

domysql($sqlcommand);

setcookie("besog", $remotehost, "", "/");

}
}

Nogen der kan sige mig hvorfor? og hvordan det løses? 50 UP




19 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Har du husket at slætte de ip-adresser der stod i tabellen i forvejen?





Som det er nu bliver der ikke slettet nogen iper.
min kode pt ser således ud


function taelbesoeg() {

$sesscookie = $_COOKIE['besog'];
$remotehost = $_SERVER['REMOTE_ADDR'];
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$fip = $_SERVER['HTTP_X_FORWARDED_FOR'];

if (($fip!= "") && ($fip != "unknown")) {
$remotehost = $fip; }
$remotehost = explode(",", $ip);
$remotehost = $remotehost[0];


if(($sesscookie == "")&&($remotehost != '192.168.1.1')){

$sqlcommand = "INSERT INTO taeller(ipadresse,reverselookup) ";
$sqlcommand .= "VALUES('$remotehost','$hostname')";

domysql($sqlcommand);//forenklet sql rutine

setcookie("besog", $remotehost, "", "/");

}
}



// nuppet fra http://www.udvikleren.dk/article.php?techid=6&aid=148
$ip= $_SERVER['REMOTE_ADDR'];
$fip = $_SERVER['HTTP_X_FORWARDED_FOR'];

if (($fip!= "") && ($fip != "unknown")) {
$ip = $fip;
}
$ip = explode(",", $ip);
$ip = $ip[0];


dette virker ikke



// nuppet fra http://www.udvikleren.dk/article.php?techid=6&aid=148
$ip= $_SERVER['REMOTE_ADDR'];
$fip = $_SERVER['HTTP_X_FORWARDED_FOR'];

if (($fip!= "") && ($fip != "unknown")) {
$ip = $fip;
}
$ip = explode(",", $ip);
$ip = $ip[0];


dette virker ikke


Prøv
getenv() i stedet for $_SERVER[]
eller
!== i stedet for !=

Det ene virker i nogle php-versjoner, det andet i nogle andre



Problemet er ikke at koden ikke virker.. men det at enkelte adresse bliver lagret 2 gange??
og med det mener jeg i træk.. det gør ikke noget at den samme ip står flere gange i databasen men den må ikke lagres 2 gange på 1 login.




hvad mener du med "//forenklet sql rutine" er det en funktion eller er det bare fordi du ikke vil skrive dit password?

kunne det tænkes at taelbesoeg() køres to gange? {

bruger du nogle steder header("Location: xxx"); ? Det er en af de hyppigste årsager til at en side loades uden at cookien er blevet gemt så funktionen køres to gange. Cookies gemmes jo først når siden er loadet helt færdigt.



hvad mener du med "//forenklet sql rutine" er det en funktion eller er det bare fordi du ikke vil skrive dit password?

kunne det tænkes at taelbesoeg() køres to gange? {

bruger du nogle steder header("Location: xxx"); ? Det er en af de hyppigste årsager til at en side loades uden at cookien er blevet gemt så funktionen køres to gange. Cookies gemmes jo først når siden er loadet helt færdigt.




domysql() er en funktion der kører password og alt det andet skralder for mig.


jeg kalder kun taelbesoeg 1 gang.

bruger ikke location.


jeg kan se at det ikke er alle iper der gemmes 2 gange... men der er heller ikke et system i hvilke der blir gemt og hvilke der ikke gør.


selve index siden er den der kalder taelbesoeg() som ligger includeret i en anden fil..
ved ikke om det ku ha noget medd et at gøre, men tror det ikke..




prøv at skrive noget fra funktionen domysql fx echo "hej";

så skulle der kun stå "hej" een gang på den første side og ikke noget anden gang du loader siden

kunne du måske skrive noget mere kode?



prøv at skrive noget fra funktionen domysql fx echo "hej";

så skulle der kun stå "hej" een gang på den første side og ikke noget anden gang du loader siden

kunne du måske skrive noget mere kode?



her er mere kode.


Nu har jeg prøvet at samle al den kode både php og html der bliver passeret
undervejs.

først min index.php

<? if($HTTP_HOST != "harlem.dk") { header("Location: http://harlem.dk"); } ?>
<? include($_SERVER['DOCUMENT_ROOT'].'/data/include.php'); ?>
<? if($sesscookie==""){taelbesoeg();}?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- Minus AutoDato -->
<title>Harlem.DK</title>
<META NAME="Generator" CONTENT="Stone's WebWriter 3.5">
</head>
<frameset cols="21%,79%">
<frame src="left.php" name="left">
<frame src="right.htm" name="right">
</frameset>
</html>




her kommer den funktion der skal sætte min cookie og lagre ip.


function taelbesoeg() {

$sesscookie = $_COOKIE['besog'];
$remotehost = $_SERVER['REMOTE_ADDR'];
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$fip = $_SERVER['HTTP_X_FORWARDED_FOR'];

if (($fip!= "") && ($fip != "unknown")) {
$remotehost = $fip; }
$remotehost = explode(",", $remotehost);
$remotehost = $remotehost[0];

if(($sesscookie == "")&&($remotehost!='192.168.1.1')){

$sqlcommand = "INSERT INTO taeller(ipadresse,reverselookup) ";
$sqlcommand .= "VALUES('$remotehost','$hostname')";

domysql($sqlcommand);

setcookie("besog", $remotehost, "", "/");

}
}




dette er den funktion som taelbesog kalder for at komme til databasen de ligger begge i det samme document.


function domysql($query) {
/* Simplified MySQL routine */



$dbhost = "localhost";
$dbuser = "user";
$dbpass = "pass";
$dbdb = "database";

$dblink = mysql_connect($dbhost,$dbuser,$dbpass) or die("Could not connect to DB server");
$database = mysql_select_db($dbdb) or die("Could not select DB");

$result = mysql_query($query) or die("Could not perform <b>$query</b>");

mysql_close($dblink);
return $result;
}


ser det helt tosset ud?



Lad os se på den første linje:

<? if($HTTP_HOST != "harlem.dk") { header("Location: http://harlem.dk"); } ?>

når man bruger den førnævnte location, er det en god ide at sætte et exit; bag efter, så man er sikker på at der ikke køres noget php-kode der ikke skulle være kørt

<? if($HTTP_HOST != "harlem.dk") { header("Location: http://harlem.dk"); exit;} ?>

prøv det.



<< < 12 > >>
t