hoelang geleden vorige post?
Omdat ik mijn reactie systeem wil beveiligen tegen spammers (ja ik heb al een captcha) ben ik op zoek naar wat hulp.
Ik wil een sessie scrhijven (ja ik weet dat dit niet geheel veilig is). Dat de bezoekers pas na 2 minuten opnieuw een reactie kan schrijven.
ik heb dit reeds zo in gedachten.
Code (php)
Iemand die mij een tip kan geven en dit mss helpen op te lossen.
Alvast bedankt iedereen.
Niels
Gewijzigd op 01/01/1970 01:00:00 door Niels Beckers
Wanneer iemand eens in de 2 minuten mag posten, dan sla je bij iedere post een datumtijdstempel op en controleer je bij een nieuwe post eerst of er al 2 minuten zijn verstreken. Dat is vrijwel waterdicht.
nu heb ik deze structuur:
if(isset($_SESSION['request']))
{
// nu vergelijken
if($_SESSION['request']+2 > date('i'))
{
echo 'U mag pas na 2 minuten een nieuwe request aanvragen';
}
else
{
///////////////
//hier komt alles voor te posten
}
else
{
//hier staat alles voor te posten
}
} // else voor de date
?>
Dus ik heb 2x dezelfde code. kan ik dit oplossen?
met sessions kun je gewoon je browser sluiten en dan kun je geloof ik ook weer posten en natuurlijk een andere browser openen. Ik zou gaan voor de oplossing van pgFrank, een tijdstempel in de database.
bedankt iedereen.
Nu nog een Seo vraagje
hoe kan ik het beste mijn geuploade foto's noemen?
-een willekeurige naam (jhsjshhs.jpg)
-een naam van de categorie en naam samen(categorie-naam.jpg?)
ik vermoed het 2de maar ga ik dan hier ook echt beter op scoren in google images?
dus ik wil ook een sessie aanmaken met het huidige uur.
hoe ga ik dit dan vergelijken?
ik gok op dit:
if datumsessie == datum
minuten vergelijken
else
je mag posten want verschil is met het uur.
Dat andere kun je op veel manieren oplossen, misschien grappig om strtotime() ermee te gebruiken, iets van strtotime('+2 minutes') ofzo..
bedtijd :(
Moeten mensen ingelogd zijn voor het posten van een reactie of niet?
Timestamp moet opgeslaan zijn in DB als: YmdHis
Tijd van nu min 2:
$DateStampMinus2Min=date("YmdHis", mktime($HourNow,$MinuteNow-2,$SecondNow,$MonthNow,$DayNow,$YearNow));
Dan vergelijken en klaar is kees.
ps: Lees wat over mktime, ipv je druk te maken over de 61ste second van een minuut...
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
34
35
36
37
38
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
34
35
36
37
38
<?php
$sql = "INSERT INTO
reacties
(
reactie,
topic_id,
user_id,
datum
)
VALUES
(
'".mysql_real_escape_string($_POST['reactie'])."',
'".mysql_real_escape_string($_GET['topic'])."',
".mysql_real_escape_string($_SESSION['u_id']).",
NOW()
)"; //doe zoiets bij je insert query
$sql2 = "SELECT
id
FROM
reacties
WHERE
user_id = ".mysql_real_escape_string($_SESSION['u_id'])."
AND
TIMEDIFF(datum,NOW) => 00:00:02
ORDER BY
datum
LIMIT 1"; //zet hier eventueel ook een topic id bij, als iemand wel mag reageren in een ander topic, binnen 2 minuten
if(mysql_num_rows(mysql_query($sql)) == 1)
{
echo 'Je moet minimaal 2 minuten wachten';
}
else
{
//handle je form
}
?>
$sql = "INSERT INTO
reacties
(
reactie,
topic_id,
user_id,
datum
)
VALUES
(
'".mysql_real_escape_string($_POST['reactie'])."',
'".mysql_real_escape_string($_GET['topic'])."',
".mysql_real_escape_string($_SESSION['u_id']).",
NOW()
)"; //doe zoiets bij je insert query
$sql2 = "SELECT
id
FROM
reacties
WHERE
user_id = ".mysql_real_escape_string($_SESSION['u_id'])."
AND
TIMEDIFF(datum,NOW) => 00:00:02
ORDER BY
datum
LIMIT 1"; //zet hier eventueel ook een topic id bij, als iemand wel mag reageren in een ander topic, binnen 2 minuten
if(mysql_num_rows(mysql_query($sql)) == 1)
{
echo 'Je moet minimaal 2 minuten wachten';
}
else
{
//handle je form
}
?>
Niels schreef op 28.11.2007 08:00:
oke bedankt. dit werkt nu, echter heb ik nog wel een andere vraag / probleem:
nu heb ik deze structuur:
if(isset($_SESSION['request']))
{
// nu vergelijken
if($_SESSION['request']+2 > date('i'))
{
echo 'U mag pas na 2 minuten een nieuwe request aanvragen';
}
else
{
///////////////
//hier komt alles voor te posten
}
else
{
//hier staat alles voor te posten
}
} // else voor de date
?>
Dus ik heb 2x dezelfde code. kan ik dit oplossen?
nu heb ik deze structuur:
if(isset($_SESSION['request']))
{
// nu vergelijken
if($_SESSION['request']+2 > date('i'))
{
echo 'U mag pas na 2 minuten een nieuwe request aanvragen';
}
else
{
///////////////
//hier komt alles voor te posten
}
else
{
//hier staat alles voor te posten
}
} // else voor de date
?>
Dus ik heb 2x dezelfde code. kan ik dit oplossen?
Als je nou een post hebt op 58 en dan +2 is 60 dat zal altijd groter zijn 59 dus het is niet waterdicht.
Je hebt toch de timestamp van de laatste post in je DB staan?
Dan zou je daarmee kunnen vergelijken of het langer dan 2 minuten geleden is dmv een Query
nu loop ik toch hier vast:
$sql2 = "SELECT
id
FROM
reacties
WHERE
user_id = ".mysql_real_escape_string($_SESSION['u_id'])."
AND
TIMEDIFF(datum,NOW) => 00:02:00
ORDER BY
datum
LIMIT 1"; //zet hier eventueel ook een topic id bij, als iemand wel mag reageren in een ander topic, binnen 2 minuten
wat ik ook probeer hij blijft 0 rijen geven
Gewijzigd op 01/01/1970 01:00:00 door Niels Beckers
Ik graak er echt niet uit
De syntax is TIMEDIFF(eind, begin) dus jij moet TIMEDIFF(NOW(), datum) gebruiken...
-> Wat ik zelf vaak doe is gewoon in PHPmyAdmin (voor MySQL) een query invullen als onderstaand:
SELECT TIMEDIFF(NOW(),datum) AS verschil FROM reacties WHERE
user_id = USERID
Het voordeel is dat je kan zien hoe het eruit komt. Zoals jij die TIMEDIFF hebt staan, gaat het ook niet goed.
Is het precies 2 minuten geleden, dan komt er bij jou -00:02:00 te staan. Je moet ze dus omdraaien :0
heb de oplossing van frank genomen,
thx mate