login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Tijdslimiet (Opgelost)

Offline avickum - 22/11/2009 20:47
Avatar van avickumNieuw lid Hey,

ik probeer nu al een tijdje te werken met current data mysql maar het lukt me niet.. Wat ik tot nu toe heb is dat als je op een button klikt je tijd word opgeslagen. Nu moet er dus alleen nog 24 uur bij op worden geteld en dat als de 24 uur voorbij is je de pagina met de button weer ziet.. Zou iemand me kunnen helpen en eventueel een voorbleedje maken?

Gr.
ondergetekende 

20 antwoorden

Gesponsorde links
Offline voltrex - 22/11/2009 23:00 (laatste wijziging 22/11/2009 23:02)
Avatar van voltrex Lid
  1. <?php
  2. // Je mysql_query en fetchen (pak vb mysql_fetch_array)
  3. $tijdnu = time();
  4. if($tijdnu > $jearray['tijdnavierentwintigofzo'] || of nog nooit op button geklikt) {
  5. // button
  6.  
  7. // Er wordt op de button geklikt:
  8. $timeafter = time() + "86400"; // is 1 dag als ik juist ben
  9. mysql_query("INSERT INTO tabel (blablabla, tijdnavierentwintigofzo) VALUES (blablabla, '".$timeafter."')") or die(mysql_error());
  10.  
  11. }
  12. ?>


Even snel wat getypt, i know, maar iets in die stijl?
Offline vinTage - 22/11/2009 23:08
Avatar van vinTage Nieuw lid
voltrex schreef:
[..code..]

Even snel wat getypt, i know, maar iets in die stijl?


pls, niet doen  
Offline Wim - 23/11/2009 13:44 (laatste wijziging 23/11/2009 13:47)
Avatar van Wim Crew algemeen
  1. SELECT COUNT(id) AS canclick
  2. FROM clicktimes
  3. WHERE
  4. user='user' AND
  5. timeclicked + INTERVAL 24 HOUR < NOW()


Met die query tel je het aantal id's in de tabel clicktimes waar de kolom "user" gelijk is aan "user" en waar het veld timeclicked+24uur kleiner is dan nu, en dus in het verleden ligt. Het aantal id's bewaar je in het veld canclick. Gezien de kolom "user" uniek is (dit is slechts ter voorbeeld) kan je maximum 1 rij selecteren. canclick zal dus 1 zijn als de gebruiker de laatste 24 uur niet geklikt heeft en 0 als dat wel het geval is
Je kan dit met bvb mysql_fetch_assoc uitlezen.

Ik veronderstel wel dat je met een DATETIME veld werkt?

Je ziet ook dat ik gebruik maak van een INTERVAL. Hiermee kan je namelijk zeer makkelijk tellen met datums binnen MySQL. Meer informatie over datum's & tijd vind je hier:
http://dev.mysq...tions.html
Offline Richard - 23/11/2009 14:11
Avatar van Richard Crew algemeen En als je dan die INTERVAL nog even van NOW() aftrekt heb je een constante expressie die veel lichter is :-)

  1. WHERE timeclicked < NOW() - INTERVAL 24 HOUR
Offline avickum - 23/11/2009 17:17
Avatar van avickum Nieuw lid Wim, welke tabellen moet ik nu allemaal aanmaken met welke standaard waarde, ik heb namelijk maar 3 velden, id, gebruikersnaam en tijd:

  1. <?php
  2. echo "<form method=\"post\">";
  3. echo "<input type=\"hidden\" name=\"gebruikersnaam\" value=\" ".$list->gebruikersnaam." \">";
  4. echo "<input type=\"submit\" value=\"Ga verder\">";
  5. echo "</form>";
  6. ?>
  7.  
  8. <?php
  9. if (isset($_POST['gebruikersnaam'])) {
  10. mysql_query('INSERT INTO leden_bibliotheek (gebruikersnaam, tijd) VALUES ("'.$_POST['gebruikersnaam'].'", NOW())') or die(mysql_error());
  11. header("Location: http://avickum.nl/pagina/bibliotheek/test.php");
  12. }
  13. ?>
Offline voltrex - 23/11/2009 19:49
Avatar van voltrex Lid Even offtopic, waarom echo je heel je formulier...? (zei Titjes in een ander topic ook al, denk'k)  
Offline avickum - 23/11/2009 20:03
Avatar van avickum Nieuw lid kweenie, mezelf aangeleerd denk ik, of miss eens een verkeerd voorbeeld bekeken en dat daarom blijven doen 
Offline Abbas - 23/11/2009 22:08
Avatar van Abbas Gouden medaille

Crew .NET
Niet meer doen!
Offline avickum - 24/11/2009 15:14
Avatar van avickum Nieuw lid maar hoe moet ik nu veder dan met het tijdslimiet..?
Offline Wim - 24/11/2009 23:53
Avatar van Wim Crew algemeen
avickum schreef:
Wim, welke tabellen moet ik nu allemaal aanmaken met welke standaard waarde, ik heb namelijk maar 3 velden, id, gebruikersnaam en tijd:

[..code..]


In plaats van met het veld "timeclicked" te werken moet jij met het veld tijd werken. Jou tabel heet ook "leden_bibliotheek" ipv clicktimes.

Best lees je eventjes het gedeelte op dev.mysql.com door dat handeld over INTERVAL. Hoewel dit vrij simpel en veel duidelijker is, wordt het helaas (te) weinig gebruikt.

maw, voordat je lijn 2-5 uitvoert, moet je eerst m.b.v. mijn query (en dan een beetje aangepast naar je eigen situatie, dit moet je normaal zelf kunnen mits een beetje proberen) een controle uitvoeren (if).
Offline avickum - 25/11/2009 17:40 (laatste wijziging 25/11/2009 21:44)
Avatar van avickum Nieuw lid Zo zou het toch moeten werken? Want dat doet ie niet..
hij zet 'klik' weer op 0 terwijl de echte tijd lager is dan de tijd in de database..

  1. <?php
  2. $gebruikersnaam = $list->gebruikersnaam
  3. ?>
  4.  
  5. <?php
  6. $select = "SELECT * FROM leden_bibliotheek WHERE gebruikersnaam = '$gebruikersnaam' ";
  7. $query = mysql_query($select)or die(mysql_error());
  8. $list = mysql_fetch_object($query);
  9.  
  10. if ($list->klik == "1") {
  11. echo "Je hebt al geklikt!";
  12. }
  13. else
  14. {
  15. echo "Je mag klikken";
  16. echo "<form method=\"post\">";
  17. echo "<input type=\"hidden\" name=\"gebruikersnaam\" value=\"$gebruikersnaam\">";
  18. echo "<input type=\"submit\" value=\"Ga verder\">";
  19. echo "</form>";
  20. }
  21.  
  22. $tijd = date("Y-m-d H:i:s");
  23.  
  24. if ($tijd >= " $list->tijd ") {
  25. $update = "UPDATE leden_bibliotheek SET klik = '0' WHERE gebruikersnaam = '$gebruikersnaam'";
  26. }
  27. ?>
  28.  
  29.  
  30. <?php
  31. if (isset($_POST['gebruikersnaam'])) {
  32. mysql_query('INSERT INTO leden_bibliotheek (gebruikersnaam, klik, tijd) VALUES ("'.$_POST['gebruikersnaam'].'", 1, NOW() + INTERVAL 1 DAY)') or die(mysql_error());
  33. header("Location: http://avickum.nl/pagina/bibliotheek/test.php");
  34. }
  35. ?>
Offline ArieMedia - 26/11/2009 09:07 (laatste wijziging 26/11/2009 09:11)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Heb je al wel vaker gezegd, en daarom werd ik er ook zo moe van bij jou, je hebt die klik helemaal niet nodig. Ik zal nog 1x proberen om het je uit te leggen. Daarnaast heel leuk dat je een hidden inputveld erbij zet, Maar ik kan straks dus gaan klikken voor anderen als ik wil, kwestie van de value veranderen in de broncode.

Wat je wil is controleren of een gebruiker weer mag klikken, hier zit een bepaalde tijd aan vast (bijvoorbeeld om de 5 minuten).
De laatste keer dat er geklikt is staat in je tabel weggeschreven.

Wat jij nu doet is dit:
SQL 1: Haal de tijd op
SQL 2: Update of hij mag klikken als de tijd dit toelaat

Wat je wil doen
Je tabel ziet er zo uit:
Tabel :Leden_bibliotheek
id (int 11) AI PRIMKEY
lid_id* (int 11) UNIQUE
tijd** (int 11)
-- eventuele eigen andere velden. maar deze 3 zijn basis --

* Je ziet dat ik een ID gebruik IPV van een naam, numerieke velden zijn sneller en het scheelt ook nog eens dat de koppeling blijft bestaan zolang de gebruiker in je leden-tabel zit, Als jij nu een naam gaat veranderen dan zal jou systeem gaan piepen want de naam bestaat niet meer.

** int?! Waarom een int.. Nou PHP beschikt over de gigantisch mooie functie PHP.net: time(), je ziet straks (hopelijk) het nut er van.

Goed dan kunnen we nu even de code induiken
  1. <?php
  2. /**
  3.  * Ik neem aan dat je een sessie gebruikersnaam hebt gemaakt
  4.  * Daarom zal ik zo vrij zijn om deze ook op te halen...
  5.  * Heb je een sessie-id dan kan je dit gedeelte weghalen
  6.  * Maar ik raad je aan om een sessie aante maken waar het id in staat!!
  7.  **/
  8.  
  9. $sql = 'SELECT id FROM leden WHERE naam = "'.$_SESSION['gebruikersnaam'].'"';
  10. $res = mysql_query($sql);
  11. $rij = mysql_fetch_assoc($res);
  12. if(mysql_num_rows($res) > 1) {
  13. $iID = $rij['id']; // dit kan je veranderen naar $_SESSION['id'] als je die hebt.
  14.  
  15. $sql = 'SELECT id, lid_id, tijd
  16. FROM leden_bibliotheek
  17. WHERE lid_id = '.$iID;
  18. $res = mysql_query($sql);
  19. if(mysql_num_rows($res) > 0) {
  20. $rij = mysql_fetch_assoc($res);
  21. if($rij['tijd'] <= time()) {
  22. $iNTijd = time() + 300; // 5 minuten
  23. if(isset($_POST['klik'])) {
  24. $sql = 'UPDATE leden_bibliotheek
  25. SET tijd = '.$iNTijd.'
  26. WHERE id = '.$rij['id'];
  27. if(mysql_query($sql)) {
  28. echo 'Gefeliciteerd, je hebt geklikt!';
  29. } else {
  30. echo 'Sorry, er is iets fout gegaan tijdens het opslaan';
  31. }
  32. } else {
  33. echo '<form method="post" action="klik.php">
  34. <input type="submit" name="klik" value="Klik mij">
  35. </form>';
  36. }
  37. } else {
  38. echo 'Sorry, maar je mag niet niet klikken';
  39. }
  40. } else { // ID niet gevonden in de bieb
  41. echo 'Sorry, maar je staat nog niet ingeschreven bij de bibliotheek';
  42. }
  43. } else { // hij is verkeerd ingelogd oid, er is iniedergeval iets fout met je ledenbestand
  44. echo 'Sorry, maar ik heb je naam niet gevonden in de leden-tabel';
  45. }
  46. ?>


Je kan het zelfs nog iets anders doen, door bijvoorbeeld de tijd meteen mee te geven in de SQL, maar in dit geval heb ik dat dus niet gedaan.
Offline Wim - 26/11/2009 09:39
Avatar van Wim Crew algemeen Een kleine aanpassing in je database en je code moet werken; je moet het veld klik verwijderen.

Ik heb jou code een beetje verfrist met de code die ik je op de vorige pagina gaf. Lees het aub even door en stel een vraag als je het niet begrijpt, dan lukt het je volgende keer zeker zelf 

  1. <?php
  2. $gebruikersnaam = $list->gebruikersnaam
  3.  
  4. $select = "SELECT COUNT(id) AS klik FROM leden_bibliotheek WHERE (gebruikersnaam = '$gebruikersnaam') AND (tijd < NOW() - INTERVAL 24 HOUR) LIMIT 1";
  5. $query = mysql_query($select)or die(mysql_error());
  6. $list = mysql_fetch_object($query);
  7.  
  8. if ($list->klik == "1") {
  9. echo "Je hebt al geklikt!";
  10. }
  11. else
  12. {
  13. echo "Je mag klikken";
  14. echo "<form method=\"post\">";
  15. echo "<input type=\"hidden\" name=\"gebruikersnaam\" value=\"$gebruikersnaam\">";
  16. echo "<input type=\"submit\" value=\"Ga verder\">";
  17. echo "</form>";
  18. }
  19.  
  20. // $tijd = date("Y-m-d H:i:s"); <= Dit laten we door MySQL doen! Hier hebben we geen PHP voor nodig :-)
  21.  
  22. //Onderstaand blokje code hoort hier niet! Als je dan een keertje op refresh drukt mag je zowieso opnieuw klikken :-)
  23. /*if ($tijd >= " $list->tijd ") {
  24. $update = "UPDATE leden_bibliotheek SET klik = '0' WHERE gebruikersnaam = '$gebruikersnaam'";
  25. }*/
  26.  
  27. if (isset($_POST['gebruikersnaam'])) {
  28. mysql_query('UPDATE leden_bibliotheek SET tijd=NOW() WHERE gebruikersnaam=\''.$list->gebruikersnaam.'\'') or die(mysql_error());
  29. header("Location: http://avickum.nl/pagina/bibliotheek/test.php");
  30. }
  31. ?>
Offline ArieMedia - 26/11/2009 09:41
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Wim schreef:
Een kleine aanpassing in je database en je code moet werken; je moet het veld klik verwijderen.

Ik heb jou code een beetje verfrist met de code die ik je op de vorige pagina gaf. Lees het aub even door en stel een vraag als je het niet begrijpt, dan lukt het je volgende keer zeker zelf 

[..code..]
Moet je mij nou weer overtreffen   
Offline Wim - 26/11/2009 09:57 (laatste wijziging 26/11/2009 09:57)
Avatar van Wim Crew algemeen
ArieMedia schreef:
[..quote..]Moet je mij nou weer overtreffen  Â 


Deze code stond er op de vorige pagina al, maar dan niet zo letterlijk. Ik heb zijn code aangepast wat voor hem waarschijnlijk veel duidelijker gaat zijn omdat hij er een groot stuk zelf van gemaakt heeft. Anders wordt het klakkeloos overgenomen en staat hier morgen weer een gelijkaardige vraag (met alle respect!)

wat ik verder vooral wil promoten is het gebruik van de datum en tijd functies van MySQL!
Offline ArieMedia - 26/11/2009 10:03
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Wim schreef:
[..quote..]

Deze code stond er op de vorige pagina al, maar dan niet zo letterlijk. Ik heb zijn code aangepast wat voor hem waarschijnlijk veel duidelijker gaat zijn omdat hij er een groot stuk zelf van gemaakt heeft. Anders wordt het klakkeloos overgenomen en staat hier morgen weer een gelijkaardige vraag (met alle respect!)

wat ik verder vooral wil promoten is het gebruik van de datum en tijd functies van MySQL!
Misschien een goede tutorial schrijven over de mogelijkheden met mysql en tijd? Heb namelijk ook al vernomen dat afstandsberekeningen van A naar B gemakkelijker gaat met SQL, dus neem aan dat SQL ook wel goed met tijd overweg kan 
Offline Richard - 26/11/2009 10:06
Avatar van Richard Crew algemeen http://wiki.phpfreakz.nl/Datums_en_tijden

Need I say more?
Offline ArieMedia - 26/11/2009 10:09
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Richard schreef:
Jup..

Ik vind deze wiki vallen onder "De nog niet ingevulde wiki's"
Offline Wim - 26/11/2009 16:26
Avatar van Wim Crew algemeen of gewoon deze: http://dev.mysq...tions.html

duidelijker kan haast niet
Offline avickum - 26/11/2009 21:35
Avatar van avickum Nieuw lid Ty, maar ik had de oorspronkelijke fout al gevonden, ik was 'query =' gwn vergeten.. 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.261s