DB timestamp kleiner als

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tim B

Tim B

08/09/2016 11:51:50
Quote Anchor link
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();
}
 
PHP hulp

PHP hulp

28/11/2024 18:01:43
 
Ben van Velzen

Ben van Velzen

08/09/2016 11:59:52
Quote Anchor link
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?
 
Tim B

Tim B

08/09/2016 12:13:23
Quote Anchor link
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.
 
Ben van Velzen

Ben van Velzen

08/09/2016 12:28:13
Quote Anchor link
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"){
 
Tim B

Tim B

08/09/2016 12:39:14
Quote Anchor link
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
 
Willem vp

Willem vp

08/09/2016 14:09:19
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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();
   }
}

?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
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
}
?>
 
Tim B

Tim B

08/09/2016 14:12:20
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.