Voor een script waar ik aan werk heb ik het nodig dat als iemand aan een product werkt deze tijdelijk word weggezet in de db als zijnde parkeerstand.

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();
}
Om te beginnen, gebruik die idiote 0000-00-00 00:00:00 niet, gebruik gewoon NULL, omdat je dat hier bedoelt.
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.
Goed, dan ga ik het even laten zien.
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"){
Hoi Ben,

Dank je voor je antwoord, ik heb het aangepast.
Echter blijft het script niet de artikelen terug zetten na de opgegeven tijd.

vanaf Elseif
In je elseif moet je een < gebruiken in plaats van een > omdat je nu de update alleen uitvoert wanneer $old_data NIET ouder is dan 5 minuten. En het zal niet helpen dat er nog een los quote'je in je query staat. ;-)

Maar waarom laat je die datumberekeningen niet helemaal over aan MySQL? Dan zou je iets krijgen als dit:
<?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();
}
}
?>
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:
<?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
}
?>
Willem super bedankt voor je reactie, ik leer elke dag weer bij, en ben zeer blij met je antwoord op mijn vraag.

Ik ga ermee aan de slag dank je wel.

Reageren