datums staan niet goed
25-08-2013/14:30
18-08-2013/14;30
01-09-2013/14:30
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
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))
{
?>
$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
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
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.
'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 -
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
Code (php)
1
2
3
4
5
6
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()");
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
Niek Kasius op 26/02/2014 17:05:04:
En het type op datetime gezet in de database maar als ik nou iets invoer krijg ik geen resultaat
Code (php)
1
2
3
4
5
6
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()");
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.
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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";
?>
$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)
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
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'] )."'
)
";
}
?>
$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
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.
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.
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
datetime staat niet in de lijst, maar het is wel verstandig om dergelijke termen niet als kolom- of tabelnaam te gebruiken
Ik heb onderstaand hiervoor in gebruik.
Code (php)
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
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">
<input type="reset" name="Reset" value="Resetten">
</td>
</tr>
</form>
</table>
<?php
}
mysql_close();
}
}
?>
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">
<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)
1
2
3
4
5
6
7
8
9
10
11
12
13
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))
{
?>
$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.
Voorbeeldje
Aangepast na opmerking van Ivo P
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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>';
?>
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 -
Code (php)
datetime() herkent de meeste formaten zelf wel.
Heb je toch een of ander obscure formaat, dan kan dat met iets als
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.
new datetime('2014-02-29') zal trouwens opgevat worden als de dag na 28 feb, dus 1 maart
edit: new datetime kan als controle opgevangen worden met een exception.
Gewijzigd op 28/02/2014 09:56:01 door Michael -