Hejsan,
Håller på att lära mig sessions, men får inte detta att fungera som jag vill!
Det jag vill uppnå är att om man postat ett inlägg, så ska man inte kunna posta ett nytt inom 2 minuter, men sessionen verkar inte vilja dö ut, och värdet på "timer" förblir 2 efter ett postat inlägg!
Jag skulle nog valt att spara tidpunkten för det senaste inlägget istället för de siffror du använder nu. Då kan du alltid jämföra med aktuell tid och se om två minuter har passerat.
Jag tror ett problem är att du inte kollar om sessionsvärdet är satt. Om du alltid sätter värdet när man postar något, så måste värdet finnas för att man ska kunna ha postat alldeles nyligen. Utnyttja det!
Och varför krångla till det?
session_start(); //<---- Måste stå på första raden
if ( isSet(($_SESSION['timer']) && $_SESSION['timer'] + 120 < time()) {
//Postat för mindre än 2 min sedan
echo "Du måste vänta 2 minuter för att kunna posta igen.";
}
else {
//Klart att posta
// < kod för att posta >
$_SESSION['timer'] = time();
echo "Ditt meddelande har nu blivit skickat!";
}
Snart flintis här, fungerar det verkligen att göra en sådan här if sats?
if ($_SESSION['timer'] + 120 < time()) {
Har försökt på massor av olika sätt att få detta att fungera, men antagligen släpper ifsatsen inte igenom någon, eller så släpper den igenom allt lite beroende på hur jag gör..!
Kan ju visa koden just nu, som säkert ser väldigt överarbetad och onödig ut, men inga lättare sätt verkar fungera heller.. tycker detta borde fungera i teorin..!
<?php
session_start();
$tid = time();
if (isset( $_SESSION['timer'] ) ){
$tstamp = "55";
$tajm = $_SESSION['timer'];
} else {
$tstamp = "100";
$_SESSION['timer'] = "55";
$tajm = "123";
}
if ( $tstamp == "55" && $tajm + 120 < $tid )
{
echo "Du måste vänta 2 minuter innan du postar igen";
else
{
// Kod för spara..
$_SESSION['timer'] = $tid;
}
?>
Har även testat att göra det lite enklare som exemplet ovan, men det ville sig inte heller..!
}
Snart flintis här, fungerar det verkligen att göra en sådan här if sats?
if ($_SESSION['timer'] + 120 < time()) {
Ja. 120 = 60*2 (sekunder) = 2 min så det villkoret säger i ord "det är mer än 2 min sedan du senast postade".
Resten av din kod ser däremot mera skum ut! Du kan inte blanda diverse heltalssiffror med time. time() innehåller uppgift om hur många sekunder som gått sedan något fixt, gammalt datum.
Ett fel i ditt skript är att du sätter $tid till time() men jämför mot sessions-variabeln. Som alltså redan från början får ett gammalt time-värde eftersom det mellanlagrats i en variabel.
När någon postar sätter du $_SESSION['timer'] = time(); se mitt exempel ovan. För övrigt: ta mitt exempel ovan rakt av och testa med. Blanda inte in dina heltalsvariabler.
Kör ungefär precis som det du sagt ovan aasah, men den släpper inte igenom något, är du säker på att det går att köra isset på en icke satt $_SESSION? Valde att skriva ut värdet på $_SESSION och det är 1, även om den inte är satt någonstans innan..
Valde då att skriva if satsen så här,
if ( isSet($_SESSION['timer']) && $_SESSION['timer'] != 1 && $_SESSION['timer'] + 120 < time())
{
echo "Du kan inte posta ännu";
}
else
{
$_SESSION['timer'] = time();
echo "Postat";
Men då släppte den igenom allt igen.. Allt eller inget hmm :)
Undrar dock lite fortfarande om isSet fungerar, eller om värdet på en osatt $_SESSION alltid är 1?
PHP är ett förlåtande språk som så långt det kan försöker tolka ut hur programmeraren egentligen menade - inte alltid med bra resultat. Exvis kommer du inte att få rapporterade fel om du blandar in en osatt variabel i en jämförelse, däremot riskerar du att variabeln får det värde det var meningen att den skulle jämföras mot!!! :o Det är det du råkar ut för när du tror att den har värdet 1 med automatik. För att komma ifrån dessa oönskade effekter ska man som regel alltid kolla att variabeln är satt (med isSet() ) innan man använder den till något. Gäller variabler som du inte själv alltid tilldelar värden, tex GET, POST, COOKIE, SESSION.
255 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e