Datum niet goed verzonden

Status
Niet open voor verdere reacties.

meddiecap

Gebruiker
Lid geworden
5 jun 2009
Berichten
5
Hallo,

Ik zit met het volgende.
Ik laat dynamisch met php een datum formuliertje genereren als volgt:
PHP:
<form name="eennaam">
      <select name="geboorte_datum_dag">
      	<option>dd</option>
        <?php
        for($i = 1; $i <= 31; $i++)
        { echo '<option value='.$i.'>'.$i.'</option>'; }
        ?>
      </select>
      <select name="geboorte_datum_maand">
      	<option>mm</option>
        <?php
        for($i = 1; $i <= 12; $i++)
        { echo '<option value='.$i.'>'.$i.'</option>'; }
        ?>
      </select>
      <select name="geboorte_datum_jaar">
      	<option>yyyy</option>
        <?php
        for($i = date('Y'); $i >= (date('Y') - 110); $i--)
        { echo '<option value='.$i.'>'.$i.'</option>'; }
        ?>
      </select>
<input type="button" name="button" onclick="add_patient(this.form);" class="opslaan_knop" value=""/>
</form>

In de javascript functie 'add_patient' gebeurt het volgende:
Code:
function createObject() 
{
	var request_type;
	var browser = navigator.appName;
	if(browser == "Microsoft Internet Explorer")
	{
		request_type = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else
	{
		request_type = new XMLHttpRequest();
	}
	return request_type;
}

var http = createObject();

var nocache = 0;

function add_patient(oForm) 
{	

var geboorte_datum_dag = oForm.geboorte_datum_dag.value;
var geboorte_datum_maand = oForm.geboorte_datum_maand.value;
var geboorte_datum_jaar = oForm.geboorte_datum_jaar.value;
	
var locatie = 'assets/query/add_patient_gegevens.php';
var querystring = 'geboorte_datum_jaar='+geboorte_datum_jaar+'&geboorte_datum_maand='+geboorte_datum_maand+'&geboorte_datum_dag='+geboorte_datum_dag;
	
http.open('POST', locatie, true);
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
http.onreadystatechange = insertSucces;
http.send(querystring);

Middels POST word dit verzonden naar een php pagina waar dit in de database wordt gezet. Ik vraag mij af of het bovenstaande juist is. Meestal komt een datum niet juist in de database, andere keren, komt er niets in (dus 00-00-0000).
De php-query pagina is als volgt:

PHP:
$geboorte_datum = $_POST['geboorte_datum_jaar'].''.$_POST['geboorte_datum_maand'].''.$_POST['geboorte_datum_dag'];

$sql = "INSERT INTO tabel (geboorte_datum) VALUES ('".$geboorte_datum."')";
		
// Query uitvoeren
$result = mysql_query($sql) or die ("FOUT: " . mysql_error());

Wat ik wil weten is waar het fout gaat, en waarom?

BvD
 
Het onderste stukje klopt niet helemaal:

dit:
PHP:
http.open('POST', locatie, true);
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
http.onreadystatechange = insertSucces;
http.send(querystring);
moet geloof ik zoiets zijn:
PHP:
   objXml.open('POST',locatie,true);
      objXml.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      objXml.setRequestHeader("Content-length", querystring.length);
      objXml.setRequestHeader("Connection", "close");

http.onreadystatechange = insertSucces;

      objXml.send(querystring);
:thumb:

Also, als je Q-string niet te lang is, zou je ook gewoon een GET kunnen uitvoeren. Geloof ik. Dan wordt het wat makkelijker, zoiets:
PHP:
   objXml.open('GET',locatie + querystring,true);
      objXml.send(null);
oid. :thumb:
 
De querystring wordt uiteindelijk best wel lang, ik ga meer gegevens verzenden nmlk. POST is ook veiliger.

In principe moet het werken, want als ik een datum invoer zonder die option-tags maar manueel bijv 12-12-2008 in een input veld, dat doet hij het wel.
 
Mag je spaties als limiters gebruiken in een het datum datatype van mysql?

Volgens mij heb je nu de volgende SQL statement

PHP:
INSERT INTO tabel (geboorte_datum) VALUES ('1982 6 26');
 
Dit bevat lege strings, zonder spaties:
PHP:
$geboorte_datum = $_POST['geboorte_datum_jaar'].''.$_POST['geboorte_datum_maand'].''.$_POST['geboorte_datum_dag'];

Ik heb overigens dit ook al geprobeerd zonder resultaat, dus zonder lege strings ertussen:
PHP:
$geboorte_datum = $_POST['geboorte_datum_jaar'].$_POST['geboorte_datum_maand'].$_POST['geboorte_datum_dag'];
 
En
PHP:
$geboorte_datum = $_POST['geboorte_datum_jaar'].'-'.$_POST['geboorte_datum_maand'].'-'.$_POST['geboorte_datum_dag'];

werkt ook niet?
 
Nee want als ik naar de database wil schrijven moet dat zonder die - of / tekens zijn.

Datums moeten als yyyymmdd, bijv 20090605 worden weggeschreven.
 
Zou het er niet door kunnen komen doordat je code niet 20090605 output, maar 200965 . Geen geldige datum dus.

Wellicht kun je dit oplossen door ipv:

PHP:
echo '<option value='.$i.'>'.$i.'</option>';

het volgende te gebruiken:

PHP:
echo '<option value="' . str_pad ( $i, 2, '0', STR_PADLEFT ) . '">'.$i.'</option>';

EDIT: overigens alleen voor de dag en de maand. Ik weet niet precies wat de output van date('Y') is. Of dat 2 of vier letters is.
 
Laatst bewerkt:
Dat is een hele goeie, daar had ik nog niet aan gedacht.

Ik ga hem spoedig proberen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan