Beste mensen,
Reeds ben ik begonnen met php en mysql (dit wil zeggen dus zelf iets in elkaar zetten, was wel al enigsinds bekent) maar goed. Ik ben nu zover dat mensen afbericht kunnen doen voor een bepaalde datum door hun naam in te voeren in een formulier en een datum te selecteren via een dropdown menu. Deze gegevens worden keurig in de database toegevoegd en worden later ook keurig getoond op de betreffende pagina.
Nu het probleem, de datum wordt nu gewoon als 'tekst' ingevoerd in de database. Op zich is dit geen probleem is het niet dat de pagina alleen de afberichten moet weergeven van de data's die nog moeten komen en niet de data's die al geweest zijn.... Als ik het allemaal goed begrepen heb moet ik deze dus invoeren als een 'echte' datum en niet als tekst...toch? Mijn vraag is dan ook hoe ik dat doe (via een dropdown menu...)
Een datum sla je altijd op als een datum en niet als tekst, integer of wat voor onzin dan ook. Dit kan dus uitsluitend in het ISO-formaat yyyy-mm-dd (en evt. tijd, een DATETIME). Hoe jij de invoer op jouw html-pagina ook regelt, de database moet altijd iets van 2007-09-16 ontvangen. En deze waarde moet je ook nog eens hebben gecontroleerd op geldigheid, voor MySQL is een pannekoek nog een geldige datum.
En hoe jij een dropdown menu maakt en de boel m.b.v. PHP gaat omzetten naar het juiste ISO-formaat, daar zijn duizenden oplossingen voor te bedenken. Het controleren van een datum in PHP doe je met checkdate().
Je zou in elk geval 3 menuutjes kunnen maken (jaartal, maand en dag) en daar de juiste values (getallen) in zetten. Vervolgens met checkdate() controleren of de datum wel een geldige datum is, dan in de juiste volgorde zetten en de database inslingeren.
Super dat je zo snel reageerd...maar sorry dat ik het moet zeggen maar hier kom ik niet echt veel verder mee...Wel heb ik even mijn database aangepast door datum te veranderen in type 'date' maar nu geeft hij de waard 0000-00-00....Dit probleem kreeg ik dus eerder en heb het daarom maar veranderd naar tekst. Ik wist dat dit niet helemaal de bedoeling zou zijn maar het werkte.
Maar hier even een stukje hoe ik alles op dit moment heb opgezet...
===========
verwerk.php
===========
<?
// formulier POST variabelen ophalen
$naam = $_POST['naam'];
$datum = $_POST['datum'];
// sql insert die je in de database gaat doen
$sql ="INSERT INTO afbericht(naam, datum)
VALUES ('".$naam."', '".$datum."')";
//uitvoeren van de query :
if (!($temp = mysql_query($sql,$connection)))
showerror();
?>
En waar controleer jij of de datum wel een geldige datum is? Een option-value is met wat handigheidjes eenvoudig aan te passen...
Maar echo de query eens, dan krijg je te zien wat er nu daadwerkelijk naar de database wordt gestuurd.
Ps. De waarde 0000-00-00 wordt door MySQL verzonnen op het moment dat de bekende pannekoek weer eens voor een datum wordt aangezien. Hier hoor je een foutmelding op te krijgen, maar dat is niet het sterkste punt van MySQL. Om even een understatement te gebruiken.
Pps. Vergeet niet om wat aan beveiliging te doen, mysql_real_escape_string() schittert door afwezigheid! SQL-injection ligt op de loer.
Het is gelukt, hij geeft de waarde nu goed weer! (klein stom foutje van mij)
Het controleren of de datum wel klopt vind ik eigenlijk niet zo nodig in dit geval. De data's kunnen namelijk alleen gekozen worden uit een dropdown menu waarin vooraf al data's door mijzelf zijn ingevoerd. Hierbij ga ik er dus automatisch van uit dat het hier geldige data's bevat.
Wat betreft mysql_real_escape_string()... ik eigenlijk nog vrij noob maar heb even gezocht naar de functie. Ik begreep het ongeveer als volgt
<?
// sql insert die je in de database gaat doen
Het controleren of de datum wel klopt vind ik eigenlijk niet zo nodig in dit geval. De data's kunnen namelijk alleen gekozen worden uit een dropdown menu waarin vooraf al data's door mijzelf zijn ingevoerd. Hierbij ga ik er dus automatisch van uit dat het hier geldige data's bevat.
Dom.
Dat is het enige dat ik er over kan zeggen. Heb je wel eens bedacht dat iemand deze waardes eenvoudig kan veranderen in de html-code? Voor FireFox zijn hele handige tooltjes beschikbaar die dit in een handomdraai doen.
Oke dat was duidelijk, hier had ik eerlijk gezegd helemaal niet bij stil gestaan maar goed heb inmiddels het een en ander aangepast zodat de datum gecontroleerd word. Dit was voor mij nog een heel gedoe maar google was weer eens mijn reddende engel! Dit werkt inmiddels naar behoren!
<?
// formulier POST variabelen ophalen
$dag = $_POST['dag'];
$maand = $_POST['maand'];
$jaar = $_POST['jaar'];
if ( checkdate ( $maand, $dag, $jaar ) == true )
{ $datum = $jaar .'-'. $maand .'-'. $dag;
// sql insert die je in de database gaat doen
$sql ="INSERT INTO afbericht(naam, datum)
VALUES ('".$naam."', '".$datum."')";
}
else {
echo "<p>Je hebt een ongeldige datum ingevoerd, <A HREF=\"javascript:javascript:history.go(-1)\">voer een correcte datum in!</A></p>";
return FALSE;
}
//uitvoeren van de query :
if (!($temp = mysql_query($sql,$connection)))
showerror();
?>
Enkel puntje dat dan nog overblijft is het mysql_real_escape_string() verhaal, zie voorbeeld zoals eerder gepost in een bericht hierboven zoals ik begreep hoe het moest. Dit zal echter niet kloppen want op die manier werkt mijn script niet meer.... Hier loop ik dus nog een beetje op vast....
Help...?
Zo moeilijk is het niet:
<?
$sql ="
INSERT INTO
afbericht(
naam,
datum
)
VALUES (
'".mysql_real_escape_string($naam)."',
'".mysql_real_escape_string($datum)."'
)";
?>