Ik probeer om in de database de datum+tijd dat iemand heeft ingelogd, in een ander veld in de database vast te leggen voordat de datum+tijd wordt opgeslagen als NOW().
Hier is de code:
<?
$sql = "SELECT lastactive FROM '".$db_tbl."' WHERE id='".$_SESSION['user_id']."'";
$query = mysql_query($sql);
$row = mysql_fetch_object($query);
$vorigeactief = ($row->lastactive);
$sql = "UPDATE `".$db_tbl."` SET vorigeactief = '".$vorigeactief."', lastactive = NOW() WHERE id = '".$_SESSION['user_id']."'";
mysql_query($sql);
?>
ontopic:
Hij doet het nu eenmalig, ik snap er helemaal niets meer van . Eerst was het resultaat hetzelfde: geen effect. Toen heb ik iptel.php included, toen schreef hij eenmalig in de db, precies zoals het moet. Maar als ik dan meerdere keren inlog, telt hij het aantal keren niet meer op en lastactive en vorigeactief werkt hij ook niet meer bij...?? Hier is de iptel.php, zou het probleem hierin kunnen zitten? Het heeft wel al die tijd gewerkt.
<?php
include_once("config.php");
include_once("lang/lang_".$lang.".php");
include_once("connect.php");
$ip = $_SERVER['REMOTE_ADDR'];
//=== check ip in db ===//
$sql = "SELECT `ip` FROM `".$db_tbl."` WHERE id='".$_SESSION['user_id']."'";
$query = mysql_query($sql);
$row = mysql_num_rows($query);
if($row == 1)
{
$sql = "SELECT `tel` FROM `".$db_tbl."` WHERE id='".$_SESSION['user_id']."'";
$result = mysql_query($sql);
$tel = mysql_result($result,0);
$tel =$tel + 1;
//=== bestaande ip bijwerken ===//
$sql_1 = "UPDATE `".$db_tbl."` SET `tel` = '$tel', `ip` = '$ip' WHERE id='".$_SESSION['user_id']."'";
mysql_query($sql_1);
}
else
{
//=== nieuwe ip invoeren ===//
$sql = "INSERT INTO `".$db_tbl."` SET `ip` = '$ip',`tel` = '1' ";
mysql_query($sql);
}
?>
De SELECT-query is overbodig, gooi die (samen met bijbehorende php-code) dan ook weg.
Voer een update-query uit en controleer met mysql_affected_rows() of er een record is bijgewerkt. Wanneer dat niet het geval is, voer je de INSERT-query uit.
En uiteraard ga je nooit meer in je database zitten schijten, die vieze backticks ` die een idioot jou heeft aangeleerd, gooi je dan ook uit je SQL. Gebruik die rommel nooit weer, dat is uitsluitend voor sukkels.
$siQuery = "SELECT ip FROM ".$db_tbl." WHERE id = ".(int)$_SESSION['user_id']; // ik hoop dat 'id' een INT-veldtype heeft?
$siResult = mysql_query($siQuery);
if($siResult) {
if(mysql_num_rows($siResult) > 0) {
$utQuery = "UPDATE ".$db_tbl." SET ip = '".$ip."', tel = tel+1 WHERE id = ".(int)$_SESSION['user_id'];
$utResult = mysql_query($utQuery);
if($utResult) {
// goed uitgevoerd
} else {
echo mysql_error().' in query: '.$utQuery;
}
} else {
$iiQuery = "INSERT INTO ".$db_tbl." (ip, tel) VALUES ('".$ip."', '1')";
$iiResult = mysql_query($iiQuery);
if($iiResult) {
// goed uitgevoerd
} else {
echo mysql_error().' in query: '.$iiQuery;
}
}
} else {
echo mysql_error().' in query: '.$siQuery;
}
?>
Nou, dat ziet er al een heel stuk beter uit, vind je niet? :-)
Ten eerste stap af van Engine="MyIsam" gebruik InnoDB
Ten tweede zorg ervoor dat je id en ip samen de primary key of unique key vormen
<?php
$sql = "INSERT INTO <tabel> (id,ip,tel)
VALUES (".$_SESSION['user_id']."
,'".$_SERVER['REMOTE_ADDR']."'
,1)
ON DUPLICATE KEY
UPDATE tel = tel + 1";
if (!$result = mysql_query($sql)) {
echo mysql_error();
}
?>
@Noppes: ON DUPLICATE KEY kan problemen opleveren, deze gaat af op iedere willekeurige unique-constraint. Wanneer je er meerdere in 1 tabel hebt staan, en dat is niets bijzonders, kan er een hoop misgaan. Vandaar dat ik het advies gaf om gewoon een update uit te voeren en eventueel een insert. Dat gaat altijd goed.
Iedereen hartstikke bedankt voor de hulp. Na vele uren proberen is het me gelukt!
En tja, wat die backticks betreft, die stonden al in het script van Jorik.....
Nee, dat is waar. Maar ik ben nog maar een beginner en ik wil eerst zeker weten dat zulke veranderingen niet ten koste gaan van de werking, snappie?
Al doende leert men......