Toon posts:

[php+mysql] strtotime update werkt niet?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste Developers,

Ik zit met hetvolgende, hier gelijk even een var_dump.

PHP:
1
2
3
4
5
6
7
8
9
10
11
array (size=10)
  'id' => string '336' (length=3)
  'user_id' => string '111' (length=3)
  'plans_id' => string '4' (length=1)
  'deposit' => string '5255.00' (length=7)
  'daily' => string '210.20' (length=6)
  'endrate' => string '0.00' (length=4)
  'startdate' => string '2016-12-02 13:12:23' (length=19)
  'enddate' => string '13:12' (length=5)
  'active' => string '1' (length=1)
  'next_update' => string '2016-12-21 13:12' (length=16)


De functie dient de next_update te updaten naar de volgende dag, de functie is alsvolgt:

PHP:
1
2
3
4
5
6
7
$next_update = date('Y-m-d H:i:s', strtotime('+1 day', $data['next_update']));
                        $sql = 'UPDATE `plans_users` SET `next_update` = :next_update  WHERE `id` = :plan_id';
                        $STH = $DBH->prepare($sql);
                        $STH->setFetchMode(PDO::FETCH_ASSOC);
                        $STH->bindParam(':plan_id', $data['id']);
                        $STH->bindParam(':next_update', $next_update);
                        $STH->execute();


Echter krijg ik gewoon een non well formed numeric value? De output na bovenstaande functie is een datum van 1970-01-02 01:33:36. Het lijkt erop dat er iets niet goed gaat met de next_update.

Hieronder de output:


( ! ) Notice: A non well formed numeric value encountered in /var/www/update.earnings.php on line 81
Call Stack
# Time Memory Function Location
1 0.0007 358816 {main}( ) .../update.earnings.php:0
2 0.0040 382576 Tools::update_plans( ) .../update.earnings.php:100
3 1.1134 5444776 strtotime ( ) .../update.earnings.php:81


User: 111 geupdate naar: 1970-01-02 01:33:36

Acties:
  • 0 Henk 'm!

  • EnnaN
  • Registratie: September 2002
  • Laatst online: 13:23

EnnaN

Toys in the attic

wat is regel 81?

sig


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
regel 81 is deze:

PHP:
1
$next_update = date('Y-m-d H:i:s', strtotime('+1 day', $data['next_update']));

Acties:
  • +2 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 08-10 23:48

Ventieldopje

I'm not your pal, mate!

PHP:
1
'next_update' => string '2016-12-21 13:12'


Een string dus ... terwijl het 2e argument van strtotime een int (timestamp) moet zijn.

Het zou dus moeten zijn (al vind ik het erg omslachtig):

PHP:
1
$next_update = date('Y-m-d H:i:s', strtotime('+1 day', strtotime($data['next_update'])));


Zelf zou ik kijken om DateTime object oriented te gebruiken in plaats van procedural. Je zou dan zoiets krijgen:

PHP:
1
$next_update = new DateTime($data['next_update'])->add(new DateInterval('P1D'))->format('Y-m-d H:i:s');


of gebruik Carbon:

PHP:
1
$next_update = new Carbon($data['next_update'])->addDay()->format('Y-m-d H:i:s');

[ Voor 38% gewijzigd door Ventieldopje op 21-12-2016 20:11 ]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Bee.nl
  • Registratie: November 2002
  • Niet online

Bee.nl

zoemt

Kwestie van de PHP manual erop na slaan ;)

int strtotime ( string $time [, int $now = time() ] )
- time: A date/time string. Valid formats are explained in Date and Time Formats.
- now: The timestamp which is used as a base for the calculation of relative dates.

In je code staat het volgende:
PHP:
1
'next_update' => string '2016-12-21 13:12' (length=16)


De foutmelding 'A non well formed numeric value encountered' hint dat het een numerieke waarde verwacht, maar iets anders binnen krijgt (een datum-tijd string).

-edit- Spuit11, ik was net te laat :P
Ventieldopje schreef op woensdag 21 december 2016 @ 20:05:
Het zou dus moeten zijn (al vind ik het erg omslachtig):

PHP:
1
$next_update = date('Y-m-d H:i:s', strtotime('+1 day', strtotime($data['next_update'])));
Ik werk daarom ook liever met DateTime als het even kan. Veel eleganter en je kunt met tijdzones stoeien.
PHP:
1
2
3
$date = new DateTime($data['next_update']);
$date->modify('+1 day');
echo $date->format('Y-m-d H:i:s');

[ Voor 33% gewijzigd door Bee.nl op 21-12-2016 20:10 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Jullie zijn helden ;-)

Kan ik jullie ook inhuren, mocht ik tegen een aantal 'issues' aanlopen?

Acties:
  • +1 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 08-10 23:48

Ventieldopje

I'm not your pal, mate!

Verwijderd schreef op woensdag 21 december 2016 @ 20:36:
Jullie zijn helden ;-)

Kan ik jullie ook inhuren, mocht ik tegen een aantal 'issues' aanlopen?
Sure, maar dan wel via V&A ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op woensdag 21 december 2016 @ 20:36:

Kan ik jullie ook inhuren, mocht ik tegen een aantal 'issues' aanlopen?
Zie Devschuurder werven? Gebruik Vraag & Aanbod! en Kan iemand even...? ;)

[ Voor 16% gewijzigd door RobIII op 21-12-2016 20:38 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1