Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  15 1175
Jeg lurer på hvordan jeg skal lage et PHP script, uten hjelp fra Cron Jobs, som gjør at når en bruker har gjort *DET* så må han vente ti minutter før han kan gjøre *DET* igjen. Jeg er ikke god med PHP Time-relaterte ting, så vær så snill å lag meg noen code snippets eller veiled meg!

Det jeg strever med er hvordan jeg skal få de ti minuttene til å gå nedover til null, og når de ti minuttene har gått, så kan han gjøre *DET* igjen.

Andre opplysninger:
Bruker MySQL selvfølgelig ;D

------------------------
Tenker meg liksom noe sånn som:

Kode

<?PHP
require_once("config.php");

$tid = mysql_fetch_array(mysql_query("SELECT * FROM brukere where id ='$bruker[id]'"));

if($bruker[ventetid] < 10 minutter){ //Lol, ingen anelse hvordan jeg skal sette det opp i PHP-time format

echo "Du må vente ti minutter før du kan ta deg på leggen en gang til!";
}else
{
echo "Du tok deg på leggen, du!";
}
?>
Sur og sarkastisk
droppboks's Avatar

Kode

mysql_query("INSERT INTO timelog (user_id, sperretid) VALUES ('$id', NOW() + INTERVAL 10 MINUTES)", $con); 
mysql_query("SELECT * FROM timelog WHERE user_id='$id' AND sperretid>NOW()", $con);
Mener å huske det var noe slik... se på "Interval" i MySQL du
Sist endret av droppboks; 14. mai 2010 kl. 18:47.
Trådstarter
76 0
Sitat av CHooBE Vis innlegg

Kode

mysql_query("INSERT INTO timelog (user_id, sperretid) VALUES ('$id', NOW() + INTERVAL 10 MINUTES)", $con); 
mysql_query("SELECT * FROM timelog WHERE user_id='$id' AND sperretid>NOW()", $con);
Mener å huske det var noe slik... se på "Interval" i MySQL du
Vis hele sitatet...
Sitat av Sanandy Vis innlegg

Det jeg strever med er hvordan jeg skal få de ti minuttene til å gå nedover til null, og når de ti minuttene har gått, så kan han gjøre *DET* igjen.
Vis hele sitatet...
Men den SQLen kommer helt sikkert til nytte. Skal google it ;D
Sist endret av Sanandy; 14. mai 2010 kl. 18:51.
Sur og sarkastisk
droppboks's Avatar

Kode

$sql = mysql_query("SELECT * FROM timelog WHERE user_id='$id' AND sperretid>NOW()", $con);

if(mysql_num_rows($sql)) { /* hvis side for at han kan gjøre DET */ }
else { /* hvis alternativ side */ }
Med riktig SQL her (er ikke helt sikker på om spørringa mi er heelt riktig) så vil jo alt løse seg
Sist endret av droppboks; 14. mai 2010 kl. 18:56.

Kode

$ta_leggen_cooldown = time() + 100000
if(time() > $ta_leggen_cooldown) {
echo "Du tok deg på leggen";
} else {
echo "Du må nok vente litt før du kan ta deg på leggen";
}
Så kan du bare å hente/lagre verdien til $ta_leggen_cooldown i databasen?
Jeg ville løst det på følgende måte:

- Brukeren kjører scriptet, og tar seg på leggen
- Det blir lagret et timestamp i databasen at brukeren tok seg på leggen
- Brukeren prøver å ta seg på leggen igjen, og det blir sjekket opp mot databasen om timestampen er mer enn 10 minutter gammel

EDIT: Det var kanskje det de andre kom frem til også?
Sist endret av Toak; 14. mai 2010 kl. 19:35. Grunn: kom borti send inn knappen....
Trådstarter
76 0
Sitat av hayer Vis innlegg

Kode

$ta_leggen_cooldown = time() + 100000
if(time() > $ta_leggen_cooldown) {
echo "Du tok deg på leggen";
} else {
echo "Du må nok vente litt før du kan ta deg på leggen";
}
Så kan du bare å hente/lagre verdien til $ta_leggen_cooldown i databasen?
Vis hele sitatet...
Hmm, hadde vært greit om du sa litt mer...

time() + 100000 er ti minutter? Og om det så er, hvordan skal jeg få gjort det slik at det må gå ti minutter før databasen oppdateres og de ti minuttene blir endret til 0? :*

Altså, la oss si at i min SQL-tabell 'brukere' har jeg et felt som heter 'ventetid'. I ventetid-feltet står da altså '100000', og når det har gått ti minutter, blir '100000' endret til '0'.

Sitat av Toak Vis innlegg
Jeg ville løst det på følgende måte:

- Brukeren kjører scriptet, og tar seg på leggen
- Det blir lagret et timestamp i databasen at brukeren tok seg på leggen
- Brukeren prøver å ta seg på leggen igjen, og det blir sjekket opp mot databasen om timestampen er mer enn 10 minutter gammel
Vis hele sitatet...
Ja, det er akkurat slik jeg tenker å utføre det, problemet er bare hvordan jeg skal få til nedtellingen fra de ti minuttene og ned til null.
Sist endret av Sanandy; 14. mai 2010 kl. 19:37.
Sitat av Sanandy Vis innlegg
Ja, det er akkurat slik jeg tenker å utføre det, problemet er bare hvordan jeg skal få til nedtellingen fra de ti minuttene og ned til null.
Vis hele sitatet...
Du skal ikke telle ned med den nevnte metoden, du skal bare sjekke om det har gått 10 minutter ved neste "spørring"
Superlurker
merulz's Avatar
10 minutter er 600 sekunder btw.

Du kan f.eks legge inn klokkeslettet brukeren da brukeren tok seg på leggen.
Så plusser du på 10 minutter. date("H.S",strtotime("+ 10 minutes");
Legg dette inn i databasen og dersom brukeren prøver å ta seg på legge igjen sjekker du om klokka er mer eller mindre enn klokkeslettet du har i databasen.

Kode

$timestamp=date("H:s",strtotime("+10 minutes"));
mysql_query("insert into brukere (timestamp) values ($timestamp)" where brukerid = '$id' ");
------
if($timestamp_result <= date("H:s")){ echo "Du kan ta deg på leggen"; }
else{ echo "Du kan ikke ta deg på leggen";}
Sikkert noen feil i koden da den ble skrevet i hui og hast. Men slik tenker jeg at det blir i teorien.
Trådstarter
76 0
Sitat av HabbaLaBiba Vis innlegg
Du skal ikke telle ned med den nevnte metoden, du skal bare sjekke om det har gått 10 minutter ved neste "spørring"
Vis hele sitatet...
Mhm, men jeg får virkelig ikke til denne neste spørringen!

La oss si at i SQL-spørringen velger jeg feltet 'ventetid' fra tabellen 'brukere', og i 'ventetid' står det '10000' som da altså er ti minutter?

Neste spørring (da altså fra siden i PHP) er tolv minutter senere, og voilá, vi oppdaterer 'ventetid' feltet med '0' (?) og brukeren kan nå ta seg på leggen igjen! Prøver meg fram her jeg sitter, men jeg får det virkelig ikke til.

Kode

<?PHP
$sql = mysql_query("SELECT * FROM brukere WHERE eier='$in[id]' AND ventetid>NOW()");

if(mysql_num_rows($sql)) { 


echo "Du har ventet ti minutter!";
 }
else { 

echo "Du må vente ti minutter før du kan ta deg selv på leggen igjen...";

 }  

?>
Dette er da altså scriptet som sjekker om de ti minuttene har blitt til null, men selveste scriptet som oppdaterer 'ventetid' feltet til 0 fra ti minutter når de ti minuttene først har gått har jeg ingen anelse om hvordan jeg skal lage.

Sitat av merulz Vis innlegg
10 minutter er 600 sekunder btw.

Du kan f.eks legge inn klokkeslettet brukeren da brukeren tok seg på leggen.
Så plusser du på 10 minutter. date("H.S",strtotime("+ 10 minutes");
Legg dette inn i databasen og dersom brukeren prøver å ta seg på legge igjen sjekker du om klokka er mer eller mindre enn klokkeslettet du har i databasen.

Kode

$timestamp=date("H:s",strtotime("+10 minutes"));
mysql_query("insert into brukere (timestamp) values ($timestamp)" where brukerid = '$id' ");
------
if($timestamp_result <= date("H:s")){ echo "Du kan ta deg på leggen"; }
else{ echo "Du kan ikke ta deg på leggen";}
Sikkert noen feil i koden da den ble skrevet i hui og hast. Men slik tenker jeg at det blir i teorien.
Vis hele sitatet...
Takk for koden, forsto langt mer nå.

Nå lagde jeg to script her jeg sitter utifra merulz's eksempel:

Sjekker om brukeren kan ta seg på leggen:

Kode

<?PHP
if($ch[nestereise] <= date("H:s"))
{ echo "Du kan ta deg på leggen igjen!"; 
}
else { 
echo "Du kan ikke ta deg på leggen"; 
}

?>
Oppdaterer ventetiden:

Kode

<?PHP


if($bruker[brukernavn]) {


$timestamp=date("H:s",strtotime("+10 minutes"));
 $oppdateringen = mysql_query("UPDATE bruker set nestegang = '$timestamp' where id = '$in[id]'");
 
echo "Oppdaterte tiden du må vente før du kan ta deg på leggen!";

}else{
echo "Du er ikke pålogget!";
}
?>
Sist endret av Sanandy; 14. mai 2010 kl. 20:16.
er ventetid alltid konstant? At tiden mellom 2 ting kan gjøres er alltid minimum 10 minutter?
og nei, 100000 sekunder er ikke 10 minutter. Det er 60 sekunder i et minutt.

I stede for at du lagrer i databasen hvor lenge han må vente, så lagrer du en av to ting:
1: Tidspunktet han gjorde det sist (du kan ta enkelt regne deg frem til når han kan gjøre det igjen)
2: Tidspunktet han får lov til å gjøre det igjen.

Metode 1 har de allerede forklart over her veldig godt

Metode 2 er og enkel: år brukeren tar seg på leggen så tar du tidspunktet nå + 10 minutter. Og lagrer dette i databasen. Når brukerne prøver å gjøre det igjen sjekker du om klokken er mer eller mindre enn det du lagret i databasen. Er klokken mer får han gjøre det, er den mindre får han beskjed om å vente.

I stede for å sjekke om Vente_tid er <= 0, så kan du sjekke om: Tid_nå - (tid_sistgang + "10 minutter") <= 0.
Sist endret av etse; 14. mai 2010 kl. 20:43.
Trådstarter
76 0
Sitat av etse Vis innlegg
er ventetid alltid konstant? At tiden mellom 2 ting kan gjøres er alltid minimum 10 minutter?
og nei, 100000 sekunder er ikke 10 minutter. Det er 60 sekunder i et minutt.

I stede for at du lagrer i databasen hvor lenge han må vente, så lagrer du en av to ting:
1: Tidspunktet han gjorde det sist (du kan ta enkelt regne deg frem til når han kan gjøre det igjen)
2: Tidspunktet han får lov til å gjøre det igjen.

Metode 1 har de allerede forklart over her veldig godt

Metode 2 er og enkel: år brukeren tar seg på leggen så tar du tidspunktet nå + 10 minutter. Og lagrer dette i databasen. Når brukerne prøver å gjøre det igjen sjekker du om klokken er mer eller mindre enn det du lagret i databasen. Er klokken mer får han gjøre det, er den mindre får han beskjed om å vente.
Vis hele sitatet...
Den er grei!

Kunne du gitt meg et SQL eksempel på hvordan jeg plusser på de ti minuttene når jeg utfører SQL-spørringen? Metodene nevnt ovenfor fungerte ikke. Den '+ 10 minutes'! Det som skjer er at det oppdateres med tilfeldige klokkeslett mellom 19:00-19:40! Ingen anelse hvorfor...

Her er da altså scriptet mitt nå som sjekker om brukeren kan ta seg på leggen igjen. Det som står i 'nestereise' feltet i databasen min er 19:58, det vil si at når klokken er 19:58 ++ kan han ta seg på leggen igjen.

Scriptet:

Kode

<?PHP
if(date("H:s") >=$ch[nestereise]){
 echo "Du kan ta deg på leggen igjen nå!"; 
}
else { 
echo "Du kan ikke ta deg på leggen! Vent til etter 19:58 eller etter :D"; 
}

?>
Som du sikkert allerede har lagt merke til, fungerer ikke dette scriptet. Hvorfor ikke?
Hvorfor bruke en database her når du kan bare bruke sessions?
Sist endret av SemiColon; 14. mai 2010 kl. 21:05.
Trådstarter
76 0
Sitat av SemiColon Vis innlegg
Hvorfor bruke en database her når du kan bare bruke sessions?
Vis hele sitatet...
Fordi en database vil gi både meg og brukerne mine en bedre oversikt, og det er sikrere. Orker ikke utdype det, men jeg vil ihvertfall ha det i databasen.

Sitat av pinkrabbitz Vis innlegg
Vis hele sitatet...
Php.net er det mest forvirrende, irriterende og frustrende stedet jeg vet om når det kommer til det å lære PHP. Jeg har PHP som en hobby for å ha det gøy her jeg ligger. Det å lese på php.net... det er ikke gøy.

Jeg liker heller å lære fra dere av den grunn at:
- det er på norsk
- jeg fokuserer bedre når jeg kommuniserer med andre folk
- jeg kan få kodeeksempel spesifikt til problemet mitt istedenfor at jeg må lese tusenvis av blokker med koder for å finne fram til forskjellige løsninger.
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av Sanandy Vis innlegg
Php.net er det mest forvirrende, irriterende og frustrende stedet jeg vet om når det kommer til det å lære PHP. Jeg har PHP som en hobby for å ha det gøy her jeg ligger. Det å lese på php.net... det er ikke gøy.
Vis hele sitatet...
Og grunnen er at du kan for lite programmering. Eller rettare - du har ikkje forstått tenkemåten. Uttrykke nøyaktig kva du vil på norsk, finne ei løsning på det steg for steg som du kan få ei datamaskin til å gjere, for å så oversette det til det språket du vil lage det i. Øv meir på generell programmering, så vil du ha stort utbytte av php.net, som er rimelig god dokumentasjon av språket.
Sitat av Sanandy Vis innlegg
Jeg liker heller å lære fra dere av den grunn at:
- det er på norsk
- jeg fokuserer bedre når jeg kommuniserer med andre folk
- jeg kan få kodeeksempel spesifikt til problemet mitt istedenfor at jeg må lese tusenvis av blokker med koder for å finne fram til forskjellige løsninger.
Vis hele sitatet...
Beklagelegvis orker ikkje vi å mate folk med te-skei.