probleempje
Klaasjan Boven schreef op 31.12.2008 14:01:
He Arno heb je mijn scriptje geprobeerd. Ik ben namelijk niet voor Jan l.l bezig geweest en je reageert er niet eens op.
Sorry, ik krijg ook zoveel mogelijkheden om uit te proberen.....maar ik heb hem getest, helaas levert het niets op...
Gewijzigd probeer het nog eens, wel even opnieuw CTRL-C CTRL -V doen
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?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);
}
?>
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);
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Arno
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
include_once("config.php");
include_once("lang/lang_".$lang.".php");
include_once("connect.php");
$ip = $_SERVER['REMOTE_ADDR'];
$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;
}
?>
include_once("config.php");
include_once("lang/lang_".$lang.".php");
include_once("connect.php");
$ip = $_SERVER['REMOTE_ADDR'];
$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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?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();
}
?>
$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.
En tja, wat die backticks betreft, die stonden al in het script van Jorik.....
Arno schreef op 03.01.2009 12:56:
Maar dat is voor jou nog geen reden om ze te laten staan ;-)En tja, wat die backticks betreft, die stonden al in het script van Jorik.....
Al doende leert men......