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?
<?php
// Je mysql_query en fetchen (pak vb mysql_fetch_array)
$tijdnu = time();
if($tijdnu > $jearray['tijdnavierentwintigofzo'] || of nog nooit op button geklikt) {
// button
// Er wordt op de button geklikt:
$timeafter = time() + "86400"; // is 1 dag als ik juist ben
mysql_query("INSERT INTO tabel (blablabla, tijdnavierentwintigofzo) VALUES (blablabla, '".$timeafter."')") or die(mysql_error());
}
?>
<?php
// Je mysql_query en fetchen (pak vb mysql_fetch_array)
SELECT COUNT(id) AS canclick
FROM clicktimes
WHERE
user='user' AND
timeclicked + INTERVAL 24 HOUR < NOW()
SELECT COUNT(id)AS canclick
FROM clicktimes
WHERE
user='user'AND
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
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).
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.
<?php
/**
* Ik neem aan dat je een sessie gebruikersnaam hebt gemaakt
* Daarom zal ik zo vrij zijn om deze ook op te halen...
* Heb je een sessie-id dan kan je dit gedeelte weghalen
* Maar ik raad je aan om een sessie aante maken waar het id in staat!!
**/
$sql = 'SELECT id FROM leden WHERE naam = "'.$_SESSION['gebruikersnaam'].'"';
$res = mysql_query($sql);
$rij = mysql_fetch_assoc($res);
if(mysql_num_rows($res) > 1) {
$iID = $rij['id']; // dit kan je veranderen naar $_SESSION['id'] als je die hebt.
$sql = 'SELECT id, lid_id, tijd
FROM leden_bibliotheek
WHERE lid_id = '.$iID;
$res = mysql_query($sql);
if(mysql_num_rows($res) > 0) {
$rij = mysql_fetch_assoc($res);
if($rij['tijd'] <= time()) {
$iNTijd = time() + 300; // 5 minuten
if(isset($_POST['klik'])) {
$sql = 'UPDATE leden_bibliotheek
SET tijd = '.$iNTijd.'
WHERE id = '.$rij['id'];
if(mysql_query($sql)) {
echo 'Gefeliciteerd, je hebt geklikt!';
} else {
echo 'Sorry, er is iets fout gegaan tijdens het opslaan';
}
} else {
echo '<form method="post" action="klik.php">
<input type="submit" name="klik" value="Klik mij">
</form>';
}
} else {
echo 'Sorry, maar je mag niet niet klikken';
}
} else { // ID niet gevonden in de bieb
echo 'Sorry, maar je staat nog niet ingeschreven bij de bibliotheek';
}
} else { // hij is verkeerd ingelogd oid, er is iniedergeval iets fout met je ledenbestand
echo 'Sorry, maar ik heb je naam niet gevonden in de leden-tabel';
}
?>
<?php
/**
* Ik neem aan dat je een sessie gebruikersnaam hebt gemaakt
* Daarom zal ik zo vrij zijn om deze ook op te halen...
* Heb je een sessie-id dan kan je dit gedeelte weghalen
* Maar ik raad je aan om een sessie aante maken waar het id in staat!!
**/
$sql='SELECT id FROM leden WHERE naam = "'.$_SESSION['gebruikersnaam'].'"';
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
<?php
$gebruikersnaam = $list->gebruikersnaam
$select = "SELECT COUNT(id) AS klik FROM leden_bibliotheek WHERE (gebruikersnaam = '$gebruikersnaam') AND (tijd < NOW() - INTERVAL 24 HOUR) LIMIT 1";
$query = mysql_query($select)or die(mysql_error());
$list = mysql_fetch_object($query);
if ($list->klik == "1") {
echo "Je hebt al geklikt!";
}
else
{
echo "Je mag klikken";
echo "<form method=\"post\">";
echo "<input type=\"hidden\" name=\"gebruikersnaam\" value=\"$gebruikersnaam\">";
echo "<input type=\"submit\" value=\"Ga verder\">";
echo "</form>";
}
// $tijd = date("Y-m-d H:i:s"); <= Dit laten we door MySQL doen! Hier hebben we geen PHP voor nodig :-)
//Onderstaand blokje code hoort hier niet! Als je dan een keertje op refresh drukt mag je zowieso opnieuw klikken :-)
/*if ($tijd >= " $list->tijd ") {
$update = "UPDATE leden_bibliotheek SET klik = '0' WHERE gebruikersnaam = '$gebruikersnaam'";
}*/
if (isset($_POST['gebruikersnaam'])) {
mysql_query('UPDATE leden_bibliotheek SET tijd=NOW() WHERE gebruikersnaam=\''.$list->gebruikersnaam.'\'') or die(mysql_error());
header("Location: http://avickum.nl/pagina/bibliotheek/test.php");
}
?>
<?php
$gebruikersnaam=$list->gebruikersnaam
$select="SELECT COUNT(id) AS klik FROM leden_bibliotheek WHERE (gebruikersnaam = '$gebruikersnaam') AND (tijd < NOW() - INTERVAL 24 HOUR) LIMIT 1";
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Â
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!
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