DB timestamp kleiner als
Echter als na verloop van tijd het product niet is bewerkt dan moet het worden terug gezet in de overzicht lijst.
Ik wil dit doen doormiddel van een timestamp, deze word nu zodra er op het artikel word geklikt neergezet.
Nu wilde ik het met onderstaande script checken en aanpassen als na 5 minuten nog steeds het product niet is verwerkt, echter werkt dit niet en plaatst hij na de 5 minuten die zijn verstreken het artikel niet terug in mijn overzicht.
Wat doe ik fout, buiten dan de niet nette form van scripten.
$sql = $pdo->prepare("SELECT * FROM artikelen WHERE ebay='2'");
$sql->execute();
while($row = $sql->fetch())
$old_data = $row['parkeerbezig'];
if ($old_data = "0000-00-00 00:00:00"){
}
elseif (strtotime($old_data) > strtotime("-5 minutes"))
{
$sqli = "UPDATE artikelen SET ebay='0', parkeerbezig='0000-00-00 00:00:00' WHERE ebay='2''";
$result1 = $pdo->prepare($sqli);
$result1->execute();
}
Daarnaast, kijk eens heel goed naar je if ($old_data... Wat klopt hier niet?
Ik heb nu inderdaad er NULL gezet, echter kijk ik denk ik met mijn rechter oog in mijn linker broekzak, aangezien ik niet zie wat je voor de rest bedoeld.
Wat je doet is een toewijzing:
if ($old_data = "0000-00-00 00:00:00"){
Je zegt hier: $old_data = "0000-00-00 00:00:00" en kijkt of de uitkomst daarvan niet false is. De string 0000-00-00 00:00:00 is uiteraard niet false.
Wat je moet hebben is dit:
if ($old_data == "0000-00-00 00:00:00"){
Dank je voor je antwoord, ik heb het aangepast.
Echter blijft het script niet de artikelen terug zetten na de opgegeven tijd.
vanaf Elseif
Maar waarom laat je die datumberekeningen niet helemaal over aan MySQL? Dan zou je iets krijgen als dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$sql = $pdo->prepare("SELECT * FROM artikelen WHERE ebay='2'");
$sql->execute();
while($row = $sql->fetch()) {
if ($row['parkeerbezig']){
// doe er iets mee
}
else {
$sqli = "UPDATE artikelen SET ebay='0', parkeerbezig=NULL
WHERE ebay='2' AND parkeerbezig < NOW() - INTERVAL 5 MINUTE";
$result1 = $pdo->prepare($sqli);
$result1->execute();
}
}
?>
$sql = $pdo->prepare("SELECT * FROM artikelen WHERE ebay='2'");
$sql->execute();
while($row = $sql->fetch()) {
if ($row['parkeerbezig']){
// doe er iets mee
}
else {
$sqli = "UPDATE artikelen SET ebay='0', parkeerbezig=NULL
WHERE ebay='2' AND parkeerbezig < NOW() - INTERVAL 5 MINUTE";
$result1 = $pdo->prepare($sqli);
$result1->execute();
}
}
?>
En zoals de code nu is zit je in PHP eigenlijk dingen te doen die je aan SQL over zou moeten laten. Je haalt alle records op en verwerkt die alleen wanneer parkeerbezig niet NULL is. Het is veel efficiënter om dan alleen de juiste records op te halen. Verder heeft het geen nut (en is het slecht voor je performance) om de update-query binnen je while-loop (dus voor elk opgehaald record) uit te voeren. Hij kan zowel ervoor als erna, maar ik zou denk ik de update ervoor doen, zodat je in je select-query niet meteen al oude gegevens ophaalt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$sqli = "UPDATE artikelen SET ebay='0', parkeerbezig=NULL
WHERE ebay='2' AND parkeerbezig < NOW() - INTERVAL 5 MINUTE";
$result1 = $pdo->prepare($sqli);
$result1->execute();
$sql = $pdo->prepare("SELECT * FROM artikelen WHERE ebay='2' AND parkeerbezig IS NOT NULL");
$sql->execute();
while($row = $sql->fetch()) {
// doe iets met de gegevens
}
?>
$sqli = "UPDATE artikelen SET ebay='0', parkeerbezig=NULL
WHERE ebay='2' AND parkeerbezig < NOW() - INTERVAL 5 MINUTE";
$result1 = $pdo->prepare($sqli);
$result1->execute();
$sql = $pdo->prepare("SELECT * FROM artikelen WHERE ebay='2' AND parkeerbezig IS NOT NULL");
$sql->execute();
while($row = $sql->fetch()) {
// doe iets met de gegevens
}
?>
Ik ga ermee aan de slag dank je wel.