Limiet
Hallo allemaal,
Ik hoop dat iemand mij kan helpen ik heb een request systeem gemaakt alleen nu wil ik dat als iets al is aangevraagd dat die dan in 60 minuten nite meer aangevraagd kan worden.
Ik hoop dat iemand mij hiermee kan helpen.
Alvast bedankt
Ik hoop dat iemand mij kan helpen ik heb een request systeem gemaakt alleen nu wil ik dat als iets al is aangevraagd dat die dan in 60 minuten nite meer aangevraagd kan worden.
Ik hoop dat iemand mij hiermee kan helpen.
Alvast bedankt
Opslaan in de database met de huidige datum en tijd uit NOW().
En dan kan je met deze query kijken of deze binnen een uur valt.
Gaat dat lukken, denk je?
En dan kan je met deze query kijken of deze binnen een uur valt.
Gaat dat lukken, denk je?
Ik ga t proberen bedankt alvast als het niet lukt laat ik wat weten
Toevoeging op 14/09/2022 20:18:31:
ik heb nu dit maar dat lukt niet:
$records = mysqli_query($db,"select artiest from verzoeken WHERE tijd + INTERVAL 1 HOUR > NOW()"); // fetch data from database
while($data = mysqli_fetch_array($records))
{
?>
<META HTTP-EQUIV="refresh" CONTENT="0;URL=../geblokt/gebruiker-geblokt.html">
Toevoeging op 14/09/2022 20:18:31:
ik heb nu dit maar dat lukt niet:
$records = mysqli_query($db,"select artiest from verzoeken WHERE tijd + INTERVAL 1 HOUR > NOW()"); // fetch data from database
while($data = mysqli_fetch_array($records))
{
?>
<META HTTP-EQUIV="refresh" CONTENT="0;URL=../geblokt/gebruiker-geblokt.html">
Je moet juist tellen of het aantal groter is dan 0. Nu haal je alles op, wat totaal wat anders is.
Gewijzigd op 14/09/2022 20:25:10 door - Ariën -
Heeft u toevallig een voorbeeld
mysqli_num_rows en een if-constructie.
Ik heb hem nu zo.
<META HTTP-EQUIV="refresh" CONTENT="0;URL=limit1.php">
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
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
<?php
include '';
$id = $_GET['id']; // get id through query string
$artiest = mysqli_real_escape_string($conn, $_REQUEST['artiest']);
if ($conn->connect_error) {
//breek de code hier af als de verbinding mislukt
die("Verbinding met de databank is mislukt: " . $conn->connect_error);
}
//selecteer alle rijen van de tabel 'articles'
$sql = "select artiest='$artiest' from verzoeken WHERE tijd + INTERVAL 1 HOUR > NOW()";
//bewaar het resultaat van de zoekopdracht
$result = $conn->query($sql);
//als het aantal rijen groter is dan 0, zet de rijen dan om in HTML
if ($result->num_rows > 0) {
// maak een "loop" door alle rijen
while($row = $result->fetch_assoc()) {
?>
include '';
$id = $_GET['id']; // get id through query string
$artiest = mysqli_real_escape_string($conn, $_REQUEST['artiest']);
if ($conn->connect_error) {
//breek de code hier af als de verbinding mislukt
die("Verbinding met de databank is mislukt: " . $conn->connect_error);
}
//selecteer alle rijen van de tabel 'articles'
$sql = "select artiest='$artiest' from verzoeken WHERE tijd + INTERVAL 1 HOUR > NOW()";
//bewaar het resultaat van de zoekopdracht
$result = $conn->query($sql);
//als het aantal rijen groter is dan 0, zet de rijen dan om in HTML
if ($result->num_rows > 0) {
// maak een "loop" door alle rijen
while($row = $result->fetch_assoc()) {
?>
<META HTTP-EQUIV="refresh" CONTENT="0;URL=limit1.php">
Waarom nog een loop? Je wilt enkel tellen.
Niet tig meta-tags plaatsen.
Niet tig meta-tags plaatsen.
Gewijzigd op 14/09/2022 21:23:05 door - Ariën -
Even los van het probleem zelf: stel dat je 15000 records in je lijst hebt staan.
Dan zegt de voorgestelde query:
WHERE tijd + INTERVAL 1 HOUR > NOW()
dus pak voor elk record het veld "tijd" en tel daar 1 uur bij op. Vergelijk dat met de huidige tijd.
Dat zijn dus 15000 berekeningen voor je database.
Draaien we het om:
WHERE tijd > NOW() - INTERVAL 1 HOUR
Dan is het 1 berekening, namelijk huidige tijd - 1 uur en de uitkomst van deze ene berekening kan vervolgens tegen de 15000 waarden aan gehouden worden om te vergelijken.
Als je dan ook nog eens een index op die kolom hebt, wordt het nog eenvoudiger voor je database.
Alternatief zou nog zijn om de kolom niet te vullen met het tijdstip "opgevraagd" maar met "geblokt tot" en dan direct bij opslaan de huidige tijd + 1 uur op te slaan.
Toevoeging op 15/09/2022 09:47:29:
Over het probleem zelf:
Je vraagt nu alle records op die geblokt zijn.
stel hij was opgevraagd 15 minuten geleden. Dus WHERE 9:30 + 1 UUR > 9:45
Dat zijn volgens mij nu net de records die je _niet_ wilde hebben.
Dan zegt de voorgestelde query:
WHERE tijd + INTERVAL 1 HOUR > NOW()
dus pak voor elk record het veld "tijd" en tel daar 1 uur bij op. Vergelijk dat met de huidige tijd.
Dat zijn dus 15000 berekeningen voor je database.
Draaien we het om:
WHERE tijd > NOW() - INTERVAL 1 HOUR
Dan is het 1 berekening, namelijk huidige tijd - 1 uur en de uitkomst van deze ene berekening kan vervolgens tegen de 15000 waarden aan gehouden worden om te vergelijken.
Als je dan ook nog eens een index op die kolom hebt, wordt het nog eenvoudiger voor je database.
Alternatief zou nog zijn om de kolom niet te vullen met het tijdstip "opgevraagd" maar met "geblokt tot" en dan direct bij opslaan de huidige tijd + 1 uur op te slaan.
Toevoeging op 15/09/2022 09:47:29:
Over het probleem zelf:
Je vraagt nu alle records op die geblokt zijn.
stel hij was opgevraagd 15 minuten geleden. Dus WHERE 9:30 + 1 UUR > 9:45
Dat zijn volgens mij nu net de records die je _niet_ wilde hebben.
Ivo is goed wakker :-) * thumbs up *
Dan zou de query volgens mij dus zo moeten worden.
WHERE tijd < NOW() - INTERVAL 1 HOUR
Dan zou de query volgens mij dus zo moeten worden.
WHERE tijd < NOW() - INTERVAL 1 HOUR
Het ging overigens niet om het ophalen, maar om te kijken of er wel (geblokte items) of geen records zijn.
Een whileloop om steeds een redirect te herhalen is overigens vreemd, en ook onnodig.
Aan de hand van het aantal gevonden items, kan je dus prima een foutmelding aangeven met dat een item al op de lijst staat en dus geblokkeerd is. Maar die query optimalisatie is wel weer beter. :-)
Een whileloop om steeds een redirect te herhalen is overigens vreemd, en ook onnodig.
Aan de hand van het aantal gevonden items, kan je dus prima een foutmelding aangeven met dat een item al op de lijst staat en dus geblokkeerd is. Maar die query optimalisatie is wel weer beter. :-)
Gewijzigd op 15/09/2022 12:01:26 door - Ariën -
- Ariën - op 15/09/2022 12:00:32:
Het ging overigens niet om het ophalen, maar om te kijken of er wel (geblokte items) of geen records zijn.
"... nu wil ik dat als iets al is aangevraagd dat die dan in 60 minuten nite meer aangevraagd kan worden."
Ik vermoed dat hij uitsluitend de items wil tonen die niet geblokkeerd zijn, en die dus nog geselecteerd kunnen worden.
Ik kan in zijn reactie niet echt opmerken dat hij iets wilt tonen uit de database.
Het enig wat ik Marcel zie doen is dit:
Maar dat is niet meer dan het doorsturen naar een andere pagina. Iets wat je niet via een loop hoeft te doen.
Het komt meer over als een denkfoutje.
Het enig wat ik Marcel zie doen is dit:
Maar dat is niet meer dan het doorsturen naar een andere pagina. Iets wat je niet via een loop hoeft te doen.
Het komt meer over als een denkfoutje.
Gewijzigd op 15/09/2022 13:14:21 door - Ariën -
Ik denk een beetje onduidelijk ik zal het uitleggen (tevens die blok hoort er niet bij. Hij gaat doorsturen naar een andere pagina.
Wat ik dus wil is.
Een luisteraar vraag een verzoek aan met een artiest als die artiest is aangevraagd mag hij het komende uur niet meer worden aangevraagd. Tevens wil ik dat de dj zelf de tijd kan invullen hoe lang het moet duren dat het weer mag dus kan ook 2 uur zijn Ik hoop dat het nu wat duidelijker is.
Wat ik dus wil is.
Een luisteraar vraag een verzoek aan met een artiest als die artiest is aangevraagd mag hij het komende uur niet meer worden aangevraagd. Tevens wil ik dat de dj zelf de tijd kan invullen hoe lang het moet duren dat het weer mag dus kan ook 2 uur zijn Ik hoop dat het nu wat duidelijker is.
Gewijzigd op 15/09/2022 13:35:53 door Marcel Veenendaal
Die loop heb je echt niet nodig. Volgens Ivo moet je de query aanpassen naar.
Kijk hier eerst eens naar door droog te testen in phpMyAdmin of waar je jouw database maar mee beheert.
Kijk hier eerst eens naar door droog te testen in phpMyAdmin of waar je jouw database maar mee beheert.
SELECT * FROM verzoeken WHERE artiest='$artiest' And tijd >= NOW() - INTERVAL 1 HOUR
deze werkt in phpmyadmin
Maar nu wil ik als die uur nog niet om is dat de pagina word doorgelinkt
deze werkt in phpmyadmin
Maar nu wil ik als die uur nog niet om is dat de pagina word doorgelinkt
Gewijzigd op 15/09/2022 15:04:51 door Marcel Veenendaal
Kijk eens naar je resultaat. Je ziet dus alles wat niet ouder is dan een uur.
Aan de hand daarvan kan je dus bepalen met mysqli_num_rows() dan als het aantal groter is dan 0, dat het om een item gaat die al aangevraagd is.
En waarom zou je willen doorsturen, en niet gewoon netjes een foutmelding geven op dezelfde pagina?
Aan de hand daarvan kan je dus bepalen met mysqli_num_rows() dan als het aantal groter is dan 0, dat het om een item gaat die al aangevraagd is.
En waarom zou je willen doorsturen, en niet gewoon netjes een foutmelding geven op dezelfde pagina?
Gewijzigd op 15/09/2022 15:10:41 door - Ariën -
ja dat is wel slimmer idd foutmelding geven
Vooral vanwege de F5'ers die anders op de errorpagina blijven hangen.
Bedankt het werkt ik heb nu dit:
select * from verzoeken WHERE artiest='$artiest' and tijd >= NOW() - INTERVAL 1 HOUR
nu wil ik alleen nog dat hij het uur ophaalt uit een andere database genaamd aantal, dat lukt nog niet echt
select * from verzoeken WHERE artiest='$artiest' and tijd >= NOW() - INTERVAL 1 HOUR
nu wil ik alleen nog dat hij het uur ophaalt uit een andere database genaamd aantal, dat lukt nog niet echt
Hoezo een andere database?
Ik denk dan eerder na dat je dit beter in PHP kan afhandelen met strtotime() in plaats van deze query.
Ik denk dan eerder na dat je dit beter in PHP kan afhandelen met strtotime() in plaats van deze query.




