Ik heb een scriptje gemaakt om bij te houden wie er wanneer inlogt en vanaf welk IP;

<?php
include_once("config.php");
include_once("connect.php");


//=== check ip in db ===//
$sql = "SELECT * FROM login WHERE id='".$_SESSION['user_id']."'";
$query = mysql_query($sql);
$row = mysql_fetch_row($query);
$exip = htmlspecialchars($row->ip);
$teller = htmlspecialchars($row->tel);
if($exip =' ')
{
//=== nieuwe ip invoeren ===//
$teller = '1';
$ip = $_SERVER['REMOTE_ADDR'];
$sql = "INSERT INTO login (ip,tel) VALUES ('".$ip."', '".$teller."')";
mysql_query($sql);
}
else
{
//=== bestaande ip bijwerken ===//
$teller ++;
$sql = "UPDATE login SET tel = `".$teller."`, ip = `".$ip."` WHERE id=`".$_SESSION['user_id']."`";
mysql_query($sql);
}

?>

Nu is het probleem echter dat hij niets bijwerkt. Het inlogscript werkt met $_session, daarom heb ik die hier ook gebruikt. Ik wil namelijk alleen de gegevens van de mensen die hebben ingelogd. Zelf heb ik het idee dat het daarmee juist fout gaat, maar ik weet niet hoe ik het anders moet oplossen. Wie kan mij helpen?

NB: als ik if($exip= ' ') verander in if($exip ==' '), dan schrijft hij elke keer een nieuwe gebuiker in de tabel zonder verdere waarden :s ??
$exipt = ' ' kan nooit goed zijn want je zet dan je variabele in de if

Ik denk dat je bedoelt if($exip = '') (als die leeg is)
Heb je de data in je DB al een keer gecontroleerd?

$sql = "UPDATE login SET tel = `".$teller."`, ip = `".$ip."` WHERE id=`".$_SESSION['user_id']."`";

$ip declareer je alleen in de if() en niet in de else()

Ook kan je best zonder de backticks (`).

Waarom controleer je eigenlijk of het ip een spatie is?

Hmm.. ik neem aan dat de teller een INT is? Waarom zouden er dan vage tekens in staan? ([php]htmlspecialchars[/php])

Ook de * in je SELECT query is niet zo handig. Alle kolommen apart noemen is veel sneller.

Volgens mij kan je in de UPDATE ook gewoon:

SET tel = tel+1


doen, maar dat weet ik niet zeker.

Kan nog wel even doorgaan (a)
[edit]
Maar dat is heb ik ook bij m'n eigen scripts :P
[/edit]
Of wat dacht je van deze:
<?php
mysql_query(sprintf("
INSERT
INTO login (ip, tel)
VALUES ('%s', 1)
ON DUPLICATE KEY UPDATE
tel = tel + 1",
$_SERVER['REMOTE_ADDR']));
?>

Enige wat nodig is is een unique index op de kolom 'ip'.
Helaas, geen van de oplossingen schijnt te werken. De db wordt gewoonweg niet bijgewerkt, allebei de waarden (aantal bezoeken (tel) en het ipadres) blijven lege velden. Maar het gekke is: als ik if($exip ='') verander in if($exip=='') voegt hij niet alleen lege velden toe aan de database, maar bij een echo van deze velden geeft hij dan weer wel de ip-adressen.........
Ik snap er niets meer van.


Ik heb het ietwat aangepast;

<?php
include_once("config.php");
include_once("connect.php");


//=== check ip in db ===//
$sql = "SELECT ip,tel FROM login WHERE id='".$_SESSION['user_id']."'";
$query = mysql_query($sql);
$row = mysql_fetch_row($query);
$exip = ($row->ip);
$teller = htmlspecialchars($row->tel);
if($exip ='')
{
//=== nieuwe ip invoeren ===//
$teller = '1';
$ip = $_SERVER['REMOTE_ADDR'];
$sql = "INSERT INTO login (ip,tel) VALUES ('".$ip."', '".$teller."')";
mysql_query($sql);
}
else
{
//=== bestaande ip bijwerken ===//
$ip = $_SERVER['REMOTE_ADDR'];
$teller ++;
$sql = "UPDATE login SET tel = `".$teller."`, ip = `".$ip."` WHERE id=`".$_SESSION['user_id']."`";
mysql_query($sql);
}

?>

edit: correctie op $exip; hij maakt een user_id bij zonder waarden in de overige velden en geeft de info niet bij een echo, maar schrijft ze wel bij in de db-> de teller zet ie op 1 en het ip wordt netjes geregistreerd......maar niet bij de user die dan heeft ingelogd.

ter verduidelijking: www.ehbo-stabiel.nl/tabel/tabel.JPG

Reageren