Probleem met datum en tijd in gevonden script.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Innovatieve, nauwkeurige Senior PHP Developer voor

Eind jaren ’90 is dit bedrijf opgericht. Ze hebben zich altijd beziggehouden met het ontwikkelen van software voor overheidsinstanties. Dit zijn instanties waaronder bijvoorbeeld ook onder andere : de belastingdienst, burgerszaken, verschillende bedrijven, notarissen, incassobureau’s en ook nog bewindvoerders. Momenteel tellen ze 20 medewerkers, waarvan 2/3 deel allemaal developers zijn. Doordat ze de enigste aanbieder van dit soort software op de markt zijn, groeien ze erg hard. Door de enorme groei, hebben ze dan ook concrete groeiplannen in het verschiet. Functie-omschrijving Het bedrijf wordt door allerlei instanties ingeschakeld. Tegenwoordig wordt alles digitaal geregeld en gezien de essentie van dit soort

Bekijk vacature »

Pascal Schuffelers

Pascal Schuffelers

07/11/2018 20:25:38
Quote Anchor link
Ik heb eindelijk een scriptje gevonden die mijn voldoening geeft kwa werking wat ik wil.
Alleen nu heb ik een datum en tijd erbij gezet , maar hij slaat mij deze op in allemaal nullen.
Dus in de database slaat hij mij dit zo op.: 0000-00-00 00:00:00

De code die hiervoor zorgt is de volgende.:
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
16
17
18
19
20
21
22
23
24
25
26
if(isset($_POST["action"]))
 {
      $output = '';
      $connect = mysqli_connect("localhost", "root", "xxx", "xxxxx");
      if($_POST["action"] =="Add")
      {
           $DatumTijdRegP1 = mysqli_real_escape_string($connect, $_POST["DatumTijdRegP1"]);
           $StartTijd = mysqli_real_escape_string($connect, $_POST["StartTijd"]);
           $EindTijd = mysqli_real_escape_string($connect, $_POST["EindTijd"]);
           $Opmerking = mysqli_real_escape_string($connect, $_POST["Opmerking"]);
           $procedure = "
                CREATE PROCEDURE insertUser(IN DatumTijdRegP1 datetime, StartTijd varchar(250), EindTijd varchar(250), Opmerking varchar(250))
                BEGIN
                INSERT INTO Prep1Opm(DatumTijdRegP1, StartTijd,EindTijd,Opmerking) VALUES (DatumTijdRegP1, StartTijd,EindTijd,Opmerking);
                END;
           ";
           if(mysqli_query($connect, "DROP PROCEDURE IF EXISTS insertUser"))
           {
                if(mysqli_query($connect, $procedure))
                {
                     $query = "CALL insertUser('".$DatumTijdRegP1."', '".$StartTijd."', '".$EindTijd."', '".$Opmerking."')";
                     mysqli_query($connect, $query);
                     echo 'Data Inserted';
                }
           }
      }


Ik vermoed zelf dat het in dit stukje zou kunnen zitten.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$DatumTijdRegP1 = mysqli_real_escape_string($connect, $_POST["DatumTijdRegP1"]);

Maar ik kan natuurlijk ook fout zitten.

Kan mij iemand helpen waarom hij dit niet in datum en tijd zet, de Type staat op datetime in de database.
Gewijzigd op 07/11/2018 20:25:58 door Pascal Schuffelers
 
PHP hulp

PHP hulp

14/11/2018 02:38:59
 
Adoptive Solution

Adoptive Solution

07/11/2018 20:40:23
 
Pascal Schuffelers

Pascal Schuffelers

07/11/2018 20:52:13
Quote Anchor link
Oke heb dat voorbeeld geprobeerd en staat zo in mijn code nu.:
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
16
17
18
19
20
21
22
if($_POST["action"] =="Add")
      {
          $datetime = date('Y-m-d H:i:s',$_POST["DatumTijdRegP1"]);
            $DatumTijdRegP1 = mysqli_real_escape_string($connect,$datetime);
           $StartTijd = mysqli_real_escape_string($connect, $_POST["StartTijd"]);
           $EindTijd = mysqli_real_escape_string($connect, $_POST["EindTijd"]);
           $Opmerking = mysqli_real_escape_string($connect, $_POST["Opmerking"]);
           $procedure = "
                CREATE PROCEDURE insertUser(IN DatumTijdRegP1 datetime, StartTijd varchar(250), EindTijd varchar(250), Opmerking varchar(250))
                BEGIN
                INSERT INTO Prep1Opm(DatumTijdRegP1, StartTijd,EindTijd,Opmerking) VALUES (DatumTijdRegP1, StartTijd,EindTijd,Opmerking);
                END;
           ";
           if(mysqli_query($connect, "DROP PROCEDURE IF EXISTS insertUser"))
           {
                if(mysqli_query($connect, $procedure))
                {
                     $query = "CALL insertUser('".$DatumTijdRegP1."', '".$StartTijd."', '".$EindTijd."', '".$Opmerking."')";
                     mysqli_query($connect, $query);
                     echo 'Data Inserted';
                }
           }


Alleen de datum klopt van geen meter, hij geeft niet de datum en tijd van invullen in maar dit.: 1970-01-01 01:00:00
Gewijzigd op 07/11/2018 20:52:30 door Pascal Schuffelers
 
Dennis WhoCares

Dennis WhoCares

07/11/2018 20:56:01
Quote Anchor link
Weet je zeker dat het formulier dat je gebruikt DatumTijdRegP1 de datum wel ontvangt als: yyyy-mm-dd hh:mm:ss ?
 
Pascal Schuffelers

Pascal Schuffelers

07/11/2018 20:57:52
Quote Anchor link
Het heb ik hem in mijn script staan om het te tonen op het invul veld.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input  size="20" type="text" name="DatumTijdRegP1" value="<?php echo date('Y-m-d H:i:s'); ?>"
 
Dennis WhoCares

Dennis WhoCares

07/11/2018 21:07:18
Quote Anchor link
Ikzelf doe weleens, eigenlijk wel.. heel vaak beide variables echo'en om te kijken of het wel veranderd of wat ik er eigenlijk ook mee doe.

Zou je het eens willen proberen?
de $_POST["DatumTijdRegP1"] en $DatumTijdRegP1, kijken wat er gebeurt is :)
Wellicht heb je wel een foutmelding, error_reporting(E_ALL); kun je altijd tijdens development even bovenaan je script zetten.

Probeer trouwens maar gewoon
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$DatumTijdRegP1 = mysqli_real_escape_string($connect, $_POST["DatumTijdRegP1"]); //ff cleanen
$DatumTijdRegP1 = strtotime($DatumTijdRegP1); // omzetten naar timestamp
$DatumTijdRegP1 = date('Y-m-d H:i:s',$DatumTijdRegP1); // timestamp omzetten naar string in gewenste format Y-m-d H:i:s

Van php.net "string date ( string $format [, int $timestamp = time() ] )"
Gewijzigd op 07/11/2018 21:37:53 door Dennis WhoCares
 
Jan te Pas

Jan te Pas

08/11/2018 12:01:32
Quote Anchor link
Ik voeg dit voor het wegscrhijven toe:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
date_default_timezone_set("Europe/Amsterdam");

Dat zet de klok van de server op de gebruikte tijd.
 
- Ariën -
Beheerder

- Ariën -

08/11/2018 12:09:43
Quote Anchor link
De uitvoer van de tijd zet je dan op de juiste tijdzone. De servertijd verander je er niet mee.
 
Thomas van den Heuvel

Thomas van den Heuvel

08/11/2018 14:30:06
Quote Anchor link
Jan te Pas op 08/11/2018 12:01:32:
Ik voeg dit voor het wegscrhijven toe:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
date_default_timezone_set("Europe/Amsterdam");

Dat zet de klok van de server op de gebruikte tijd.

Dat lijkt mij niet erg handig, want een heleboel functionaliteit voor het formatteren van datums en tijden gaat uit van UTC. Het lijkt mij beter om alles op te slaan in UTC, en naar behoefte deze tijden te converteren naar de juiste tijszone bij weergeven.

Ontopic: maar ja, als er 0000-00-00 00:00:00 in je database belandt (en vervolgens 1 januari 1970 weergegeven wordt), grote kans dat er onderweg ergens iets misgaat met de datums. Deze hebben dan een zodanig formaat wat niet geldig is om in een DATETIME kolom opgeslagen te worden, dus dan wordt de default genomen.
Gewijzigd op 08/11/2018 14:51:17 door Thomas van den Heuvel
 
Pascal Schuffelers

Pascal Schuffelers

08/11/2018 17:53:42
Quote Anchor link
Hallo mensen,

Mijn excuses voor het late antwoord , maar door alle problemen op het werk heb ik geen tijd eerder gevonden om een reactie te plaatsen.

Met de code van @dennis gaat het niet goed.
Dan plaats hij weer allemaal nullen.
Als tijdelijke oplossing heb ik in dat stukje voor het wegschrijven dezelfde php code gebruikt in de command en dan gaat het wel goed.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$query = "CALL updateUser('".$_POST["id"]."', '".date('Y-m-d H:i:s')."', '".$StartTijd."', '".$EindTijd."', '".$Opmerking."')";    

Ik ga nog straks even kijken waar het precies dan nu misgaat.
 
Thomas van den Heuvel

Thomas van den Heuvel

08/11/2018 19:20:34
Quote Anchor link
Waarom zou je hier trouwens een procedure van maken die je continu DROPped? Dit lijkt mij onnodig complex en inefficiënt?
 
Pascal Schuffelers

Pascal Schuffelers

08/11/2018 19:32:11
Quote Anchor link
Geen stond zo in het scriptje.

Ik hou mijn volgend vraagje ook even hier aangezien we het toch over tijd hebben.
Ik probeer en scriptje te schrijven die eerst kijkt wat de huidige tijd is.
Dan heb ik 3 diensten dd, md en nd met de begin tijden.

Nu moet het scriptje kijken in welke dienst de huidige tijd valt, alleen hij werkt niet hoe het moet zijn.
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
$now = date('H:i:s');
$DD = new DateTime('07:00:00');
$MD = new DateTime('15:00:00');
$ND = new DateTime('23:00:00');

if($DD >=$now && $DD <$MD){
 echo "Dagdienst";
}
if($MD >=$now and $MD <$ND){
 echo "Middagdienst";
}
if($ND >=$now and $ND <$VD){
 echo "Nachtdagdienst";
}


Toevoeging op 08/11/2018 19:56:14:

Of hebben jullie een andere manier om dit goed te laten werken?
 
- Ariën -
Beheerder

- Ariën -

08/11/2018 20:09:01
Quote Anchor link
Je moet het nog omzetten naar een timestamp zodat je er makkelijker mee kan rekenen.
http://php.net/manual/en/datetime.gettimestamp.php

En $VD bestaat trouwens niet
(net als het warenhuis ;-) )
Gewijzigd op 08/11/2018 20:10:05 door - Ariën -
 
Adoptive Solution

Adoptive Solution

08/11/2018 20:12:45
Quote Anchor link
Kont dit dichter bij het gewenste resultaat ?

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
16
17
18
19
<?php

$now
= date('H:i:s');
// $now = '06:59:59'; // om te oefenen
$DD = '07:00:00';
$MD = '15:00:00';
$ND = '23:00:00';

echo '<p>$now = ' . $now . '</p>';

if ( $now >= $ND || $now < $DD ) {
    echo '<p>nachtdienst</p>';
}
elseif ( $now >= $MD ) {
    echo '<p>middagdienst</p>';
}
elseif ( $now >= $DD) {
    echo '<p>dagdienst</p>';
}


?>


De laatste ifelse kan een else worden omdat het de overgebleven dienst is.
Gewijzigd op 08/11/2018 20:17:30 door Adoptive Solution
 
Pascal Schuffelers

Pascal Schuffelers

09/11/2018 06:25:31
Quote Anchor link
Ik zal het in de loop van de dag eens testen.
Alvast super bedankt mensen.

Toevoeging op 09/11/2018 19:05:26:

Update.

Het doet zoals ik graag wilde, super bedankt @Adoptive.
 
- Ariën -
Beheerder

- Ariën -

09/11/2018 19:07:02
Quote Anchor link
Fijn dat het werkt. :-)
 



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.