datums staan niet goed

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Niek Kasius

Niek Kasius

26/02/2014 15:13:05
Quote Anchor link
De datums die in de database wel goed staan, maar in het script niet. Ik heb 9 wedstrijden op een datum en dat dat tot nog toe drie keer, Dus 18-08-2013/14:30, 25-08-2013/14;30 en 01-09-2013/14:30 en nu staat
25-08-2013/14:30
18-08-2013/14;30
01-09-2013/14:30

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
if ($action = "show"){
$sql = "SELECT datum, thuis, uit, carambolesthuis, carambolesuit, puntenthuis, puntenuit FROM wedstrijden ORDER BY datum DESC";
$resultaat = mysql_query($sql);
if ($resultaat == false)
    {
        echo "Query mislukt. Foutmelding: " . mysql_error();
    }
    else
    {
   while($show = mysql_fetch_array($resultaat))
{
?>


En als ik ORDER BY ASC doe staat het precies andersom. wat is er fout
 
PHP hulp

PHP hulp

16/04/2024 10:09:22
 
Michael -

Michael -

26/02/2014 15:15:25
Quote Anchor link
Hoe komt je bij een formaat als 01-09-2013/14:30 ? Dit is geen datum! Gebruik een datetime veld in je database. Dan heb je het juiste formaat 2013-09-01 14:30
 
Niek Kasius

Niek Kasius

26/02/2014 16:25:51
Quote Anchor link
Dat wil ik ook wel, Maar dat werkt niet met DATETIME, want dan moet ik NOW() gebruiker bij het posten, en dan kan ik geen datum, van morgen of een andere dag invoeren.
 
- Ariën  -
Beheerder

- Ariën -

26/02/2014 16:33:24
Quote Anchor link
Hoe kom je daarbij? Ik kan gewoon een datum invullen, als het maar in de juiste notatie is:
'2014-05-15 23:59:59' als voorbeeld, die kan je gewoon invoeren in een INSERT of een UPDATE.
Gewijzigd op 26/02/2014 16:33:55 door - Ariën -
 
Michael -

Michael -

26/02/2014 16:34:59
Quote Anchor link
Misschien moet je je dan eens verdiepen in DATETIME. Als je je datum opslaat in een datetime veld kun je er in principe alles mee. Dus werkt een stuk eenvoudiger dan een zelf bedacht formaat.
Om een de datum van morgen in te voegen: NOW() + INTERVAL 1 DAY
Om een andere datum in te voeren gebruik je het formaat 2014-02-28
 
Niek Kasius

Niek Kasius

26/02/2014 17:05:04
Quote Anchor link
Ik heb dit in posten.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
mysql_query("INSERT INTO wedstrijden (id, datetime, thuis, uit)
        VALUES ('',
                '".mysql_real_escape_string($_POST['datetime'])."',
                '".mysql_real_escape_string($_POST['thuis'])."',
            '".mysql_real_escape_string($_POST['uit'])."',
                NOW()");

En het type op datetime gezet in de database maar als ik nou iets invoer krijg ik geen resultaat
Gewijzigd op 26/02/2014 17:08:14 door Niek Kasius
 
- Ariën  -
Beheerder

- Ariën -

26/02/2014 17:10:47
Quote Anchor link
Wat staat er in $_POST['datetime']?

En zorg ook voor goede foutafhandeling.
Gewijzigd op 26/02/2014 17:17:38 door - Ariën -
 
Obelix Idefix

Obelix Idefix

26/02/2014 17:42:43
Quote Anchor link
Niek Kasius op 26/02/2014 17:05:04:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
mysql_query("INSERT INTO wedstrijden (id, datetime, thuis, uit)
        VALUES ('',
                '".mysql_real_escape_string($_POST['datetime'])."',
                '".mysql_real_escape_string($_POST['thuis'])."',
            '".mysql_real_escape_string($_POST['uit'])."',
                NOW()");

En het type op datetime gezet in de database maar als ik nou iets invoer krijg ik geen resultaat

Je krijgt ook geen foutmelding (error-reporting aan staan?)?
Wat als je de query echoot naar het scherm? Klopt dat dan met wat je verwacht?
Je hebt overigens vier velden en 5 values.
 
Niek Kasius

Niek Kasius

27/02/2014 02:57:27
Quote Anchor link
Ik heb het wel weer terug gezet zoals ik het had, Maar heb het datum type wel op DATETIME gezet.
Nu kan ik wel invoeren maar alleen met het jaartal eerst.
EN als ik in het resultaat dan dit zet: DATE_FORMAT(datum, '%d-%m-%Y %H-%i') AS datum.
Krijg ik weer de datum in een fouten volgorde.
En alleen als ik ORDER BY id doe krijg ik goed
Gewijzigd op 27/02/2014 02:59:20 door Niek Kasius
 
Milo S

Milo S

27/02/2014 08:30:04
Quote Anchor link
Wellicht ben je een komma vergeten? En ik weet niet of je query het leuk vind om een key te plaatsen aan DATE_FORMAT die gelijk is aan een van je tabelvelden. Onderstaande zou het moeten doen.
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
= "
SELECT
    DATE_FORMAT(datum, '%d-%m-%Y %H-%i') AS nieuweDatum,
    thuis,
    uit,
    carambolesthuis,
    carambolesuit,
    puntenthuis,
    puntenuit
FROM
    wedstrijden
ORDER BY
    datum DESC"
;
?>


Je bent allereerst goed op weg als je bij je INSERT de NOW() functie zet, punt is alleen jij wilt graag zelf je datum invullen. Dan is wellicht NOW() niet zo handig, maar een gewoon input ook niet. Je moet dan inderdaad een datum invullen als yyyy-mm-dd H:i anders krijg je 0000-00-00 00:00:00. Wat je hiertegen zou kunnen doen is losse inputs maken en deze aan elkaar knopen. Vervolgens controleer je met checkdate of de datum wel echt klopt en je kunt hem posten.

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
<?php
$date
= $year.'-'.$month.'-'.$day;
if( checkdate ( int $month , int $day , int $year ) )
{

    $aError = 'De opgegeven datum is incorrect.';
}


if( empty( $aError ) )
{

    $sql = "
    INSERT INTO wedstrijden
        (
            datum,
            thuis,
            uit
        )
    VALUES
        (
            '"
.mysql_real_escape_string( $date )."',
            '"
.mysql_real_escape_string( $_POST['thuis'] )."',
            '"
.mysql_real_escape_string( $_POST['uit'] )."'
        )
    "
;
}

?>


De variabelen $month, $day, $year zou je natuurlijk kunnen vervangen voor $_POST['month'] etc.
Vergeet dan alleen niet te controleren of het wel echt ingevoerd is.
Mocht je graag alles in 1 input veld willen typen, kan dat ook.

input: 27-02-2014 08:23

explode op spatie
explode op -
en je hebt alles apart, waardoor je het in je checkdate weer kan controleren.


Zoals je ziet mogelijkheden zat.
Gewijzigd op 27/02/2014 08:34:00 door Milo S
 
Michael -

Michael -

27/02/2014 08:30:06
Quote Anchor link
INSERT INTO wedstrijden (id, datetime, thuis, uit)

DATE_FORMAT(datum, '%d-%m-%Y %H-%i') AS datum.

die twee komen niet overeen. Let wel op dat je de goede velden gebruikt.
Ook kun je de tabel met verkeerde datum notaties niet even veranderen naar DATETIME maar je moet je datum formaat ook goed zetten. 01-09-2013/14:30 aanpassen naar 2013-09-01 14:30 dus.
 
Wouter J

Wouter J

27/02/2014 10:29:16
Quote Anchor link
Ook mag je datetime niet als tabelnaam gebruiken, dat is namelijk een reserved word. Maar goed, dit had je allemaal zelf kunnen ontdekken door wat error afhandeling in te bouwen. Doe dat eerst, ga dan pas verder.
 
Ivo P

Ivo P

27/02/2014 10:35:53
Quote Anchor link
http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

datetime staat niet in de lijst, maar het is wel verstandig om dergelijke termen niet als kolom- of tabelnaam te gebruiken
 
Niek Kasius

Niek Kasius

28/02/2014 01:33:36
Quote Anchor link
Ik had dat om te proberen zo gezet maar dat werkt ook niet. Daarom heb ik alles weer terug gezet, En nu werkt het wel alleen moet ik de datum met het jaartal eerst invoeren.
Ik heb onderstaand hiervoor in gebruik.
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
ini_set('display_errors',1); // 1 == aan , 0 == uit
    error_reporting(E_ALL | E_STRICT);
//include("../includes/header.php");
include("../includes/connect.php");
include("../includes/verwerk.php");

if(!isset($_GET['wedstrijdtoevoegen']))
{

    echo 'Deze actie is niet toegestaan keer terug naar waar je vandaan kwam.';
}
else{

     if(!is_numeric($_GET['wedstrijdtoevoegen'])){
        echo 'dit is een ongeldig id';
    }
else{

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{

    if($_POST['datum'] != "" || $_POST['thuis'] != "" || $_POST['uit'] != ""){

mysql_query("INSERT INTO wedstrijden (id, datum, thuis, uit)
        VALUES ('',
                '"
.mysql_real_escape_string($_POST['datum'])."',
                '"
.mysql_real_escape_string($_POST['thuis'])."',
            '"
.mysql_real_escape_string($_POST['uit'])."')
                "
);

        echo'<h4>De wedstrijd is toegevoegt.</h4>Klik <a href="index1.php">Hier</a> om terug te gaan';
    }

    else{
        echo'<H1>Error!!!!!</H!><H4>Je moet wel alle velden invullen.</H4>';
    }
}
else{
?>

<!--<div id="content">-->
<center>
<table width="550px" border="1" cellspacing="2" cellpadding="2">
  <form name="form" method="post" action="">
    <tr>
      <td align="left">Wedstrijd Datum</td>
      <td align="left"><input type="text" size="20" maxlength="30" name="datum"></td>
    </tr>
    <tr>
      <td align="left">Thuis</td><td align="left">
        <input type="text" size="34" maxlength="30" name="thuis"></td>
    </tr>
    <tr>
      <td align="left">Uit</td><td align="left">  
        <input type="text" size="34" maxlength="30" name="uit"></td>
    </tr>
    <td colspan="2" align="left">
      <input type="submit"  name="submit" value="Updaten">&nbsp;&nbsp;
      <input type="reset" name="Reset" value="Resetten">
      </td>
    </tr>
  </form>
</table>
<?php
}
mysql_close();
}
}

?>

Dus zonder NOW() anders werkt het niet.
En in het resultaat staat 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
<?php

$uitslag_mysql
= "SELECT id, DATE_FORMAT(datum, '%d-%m-%Y %H:%i') AS datum, thuis, uit, carambolesthuis, carambolesuit, puntenthuis, puntenuit FROM wedstrijden ORDER BY id ASC";
$uitslag_resultaat = mysql_query($uitslag_mysql);
if ($uitslag_resultaat == false)
    {

        echo "Query mislukt. Foutmelding: " . mysql_error();
    }

    else
    {
    while($uitslag = mysql_fetch_array($uitslag_resultaat))
{

?>

En dat werkt prima zo, ik moet alleen even bovenaan het formulier vermelden dat ze de datum dus 2014-09-09 14:30 zo moeten invoeren als voorbeeld.
 
Michael -

Michael -

28/02/2014 07:58:04
Quote Anchor link
De invoer is niet belangrijk. Je kunt dit doen door losse input velden die je daarna in de goede volgorde aan elkaar plakt, of door de datum met explode uit elkaar te halen en vervolgens weer goed te plakken. of met new datetime/createfromformat het formaat aanpassen.

Voorbeeldje
Aangepast na opmerking van Ivo P
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
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    $dateFormatFailed = 'Het formaat van de datum is leeg of onjuist';
    
    if(isset($_POST['datumtijd'])) { // && strlen($_POST['datumtijd']) == 16) {
    
        try {
            $oDate = new datetime($_POST['datumtijd']);
            echo $oDate->format('Y-m-d H:i');
        }
catch (Exception $e) {
            echo $dateFormatFailed; // $e->getMessage();
        }
    }
else {
        echo $dateFormatFailed;
    }
}


echo '<form method="POST">'
.'<label>Datum tijd</label>'
.'<input type="text" name="datumtijd" /> <small>e.g. 28-02-2014 08:30</small>'
.'<br /><button>OK</button>'
.'</form>';
?>
Gewijzigd op 28/02/2014 09:59:07 door Michael -
 
Ivo P

Ivo P

28/02/2014 09:20:22
Quote Anchor link
ik raad aan om ipv zelf met explode te werken, gewoon php's datetime te gebruiken:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if(isset($_POST['datumtijd']) && strlen($_POST['datumtijd']) == 16) {
    $oDate = new datetime($_POST['datumtijd']);

    echo $oDate->format('Y-m-d H:i');
?>


datetime() herkent de meeste formaten zelf wel.
Heb je toch een of ander obscure formaat, dan kan dat met iets als

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $oDate datetime::createfromformat('H:i Y-d/m', $_POST['datetime']); ?>
 
Michael -

Michael -

28/02/2014 09:22:38
Quote Anchor link
Dat is gelijk een stuk korter. Alleen heb je nu geen controle of op de invoer meer, maar verder inderdaad een betere en makkelijkere oplossing.
 
Ivo P

Ivo P

28/02/2014 09:29:37
Quote Anchor link
in zo verre: createfromformat geeft false bij een foutieve invoer.

new datetime('2014-02-29') zal trouwens opgevat worden als de dag na 28 feb, dus 1 maart
 
Michael -

Michael -

28/02/2014 09:42:33
Quote Anchor link
Bedankt voor je toelichting.
edit: new datetime kan als controle opgevangen worden met een exception.
Gewijzigd op 28/02/2014 09:56:01 door Michael -
 



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.