Datum naar database

Status
Niet open voor verdere reacties.

turbojohn

Gebruiker
Lid geworden
26 jun 2007
Berichten
262
Hay,

Ik weet dat het al een jaar geleden is dat deze discussie opgezet is.
Maar ik zit met eenzelfde soort probleempje.

Ik heb een agendafunctie waaruit ik een dag, datum en jaar variabele heb.
Die laat ik koppelen via:

PHP:
$datum = $datum1."-".$datum2."-".$datum3;

Deze datumb wordt zelf ingevoerd (is per slot van rekening een agenda).
Alleen als ik deze via de functie INSERT INTO in een database wil laten opslaan als tekst, dan gaat dat dus niet. Dan trekt hij de waardes af.
Eerst dacht ik dat dat aan de phpvariabele $datum lag, maar als ik die vroegtijdig print komt er wel gewoon de goede datum te staan.
Het zou mooi zijn als er kom bijv. 16-10-2009.
De phpcode werkt. Maar hoe moet ik dit precies omzetten om in de mysqldatabase op te slaan?
Bovenstaande verhaal/discussie snap ik niet zo precies.

Nogmaals excuses als het jullie irriteert dat ik het niet begrepen hebt, ik hoop op een goed advies:thumb:
 
Oude vragen laten we altijd me rust, daarom heb ik je een eigen vraag gegeven ;)

Als je een datum naar je database laat sturen is het logischer dat dat veld ook daadwerkelijk van het type DATE(TIME) is en geen VARCHAR.

Hoe ziet je code er volledig uit, dus de koppeling die je al toonde en de verwerking naar de database?
 
hm, oke is goed. Was nog niet gesloten dus ik dacht: anders staan er zometeen 50 open topics met hetzelfde onderwerp. Kan net zo goed in 1 toch?;)

Dit is een gedeelte van mijn code:

PHP:
/* ophalen datum door gebruiker ingevoerd */
$knop			=	$_POST["knop"];
$titel			=	$_POST["titel"];
$omschrijving		=	$_POST["omschrijving"];
$datum1			=	$_POST["datum1"];
$datum2			=	$_POST["datum2"];
$datum3			=	$_POST["datum3"];

$datum=date("Y-m-d");  //?? Zo moet het komen zegmaar....
$datum = $datum1."-".$datum2."-".$datum3;
if ($knop && $titel && $omschrijving && $datum1 && datum2 && datum3) { // bericht ingevoerd?
$sql = "INSERT INTO Agenda (titel, omschrijving, datum) VALUES ('$titel', '$omschrijving', $datum)";

if (!mysql_query($sql)) { // voer SQL code uit
echo "Toevoegen agenda-item mislukt!";
		exit;
} 

echo "OK, uw agenda-item $titel is toegevoegd.";
} else {	
?>
<p><div class="big">Bericht</div><br>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"] ?>">

Titel Agenda-item: <input type="text" name="titel" value="<?php $titel ?>"><br>
Datum: <input type="text" name="datum1" value="<?php $datum1 ?>" width="20px">-<input type="text" name="datum2" value="<?php $datum2 ?>" width="20px">-<input type="text" name="datum3" value="<?php $datum3 ?>" width="20px"><br/>
Agendapunt-omschrijving:<br/><input type="<textarea rows="10" cols="40" name="omschrijving" value="<?php $omschrijving ?>" style="width: 400px; height: 200px;"></textarea><br>
<input type="submit" name="knop" value="toevoegen">
</form>
<?php
}

Mijn manier is hartstikke fout;) Maar hoe moet het wel?
 
Laatst bewerkt:
PHP:
/* Controleren of formulier is verzonden */
if($_SERVER['REQUEST_METHOD'] == 'POST') {
  if(isset($_POST['titel'], $_POST['omschrijving'], $_POST['datum1'], $_POST['datum2'], $_POST['datum3']) {
    $datum = $_POST['datum1'] .'-'. $_POST['datum2'] .'-'. $_POST['datum3']
    $agendaQuery = "INSERT INTO agenda (titel, omschrijving, datum) VALUES ('". $_POST['titel'] ."', '". $_POST['omschrijving'] ."', '". $datum ."')";
    $agendaResult = mysql_query($agendaQuery);
    if($agendaResult) {
      echo 'Er is een fout opgetreden! MySQL zegt: '. mysql_error();
    } else {
      echo 'Agenda-item &quot;'. $_POST['titel'] .'&quot; toegevoegd!';
    }
  } else {
    echo 'Een of meerdere velden zijn leeg!';
  }
} else {	
?>
<p><div class="big">Bericht</div><br>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"] ?>">

Titel Agenda-item: <input type="text" name="titel" value="<?php $titel ?>"><br>
Datum: <input type="text" name="datum1" value="<?php $datum1 ?>" width="20px">-<input type="text" name="datum2" value="<?php $datum2 ?>" width="20px">-<input type="text" name="datum3" value="<?php $datum3 ?>" width="20px"><br/>
Agendapunt-omschrijving:<br/><input type="<textarea rows="10" cols="40" name="omschrijving" value="<?php $omschrijving ?>" style="width: 400px; height: 200px;"></textarea><br>
<input type="submit" name="knop" value="toevoegen">
</form>
<?php
}
Zoiets?

Je zult nu ook een fatsoenlijk melding krijgen wanneer het met je query fout gaat.
 
Thnx voor je reactie!

Ja maar het probleem is juist dat de datum 'leeg' in de database aankomt.
$datum is gevuld, maar bij het doorvoeren naar de database komt er in mijn rijen 00-00-00 0000 te staan. (Als ik DATETIME) kiest.

Hoe is dát op te lossen?
 
Dan zet je op bovenstaande code regel 6 toch dit:
PHP:
echo $agendaQuery;
Dan weet je wat er naar de database toe gaat.

Als $datum echt leeg is zal je daar aan het eind twee '' zien.
 
Als ik kies voor echo $datum, dan komt er mooi de datum te staan.
Zogauw ik dit via insert into agenda naar de dabase kopieer, dan komt er niks in te staan.

Als ik het veld op varchar zet, en ik voer 06-05-2009 in, dan komt er -2008 in de database.
Dus na wat googlen begreep ik dat de database op DATETIME moest staan.

Maar dan komt er 00-00-00 in te staan.

Hoe moet ik datum vullen?
 
DATETIME verwacht ook een tijd, aangezien ik niet zie dat je dit wilt hebben kun je net zo goed DATE gebruiken.

Let wel op dat een DATE(TIME)-type altijd in dit formaat is: YYYY-MM-DD (HH:MM:SS)
 
Datum in database zetten :


<input name="datum" type="text" id=datum" size="10" maxlength="10" />
op je formulier in laten vullen in formaat dd-mm-jjjj


dit NIET gebruiken: $datum = $_POST['datum1'] .'-'. $_POST['datum2'] .'-'. $_POST['datum3']
want het plakt alleen maar stukjes tekst achter elkaar tot een grotere tekst, en dat wil je niet. Je wilt een datum-formaat.

In plaats hiervan kun je gebruiken:
INSERT INTO agenda (titel, omschrijving, datum) VALUES ('". $_POST['titel'] ."', '". $_POST['omschrijving'] ."', '". date("Y-m-d",strtotime($datum)) ."')

Suc6 er mee.
 
Zo te lezen is het formulier opgedeeld in drie velden om je datum in te vullen.
Een dag, een maand en een jaartal.

Waarom zou je eerst DD-MM-JJJJ doen om vervolgens (geheel nutteloos) een strtotime() doen naar JJJJ-MM-DD?

Een datum-formaat via date() is ook gewoon een string, dus het achter elkaar zetten kan prima en levert hetzelfde resultaat op.
string date ( string $format [, int $timestamp ] )

Returns a string formatted according to the given format string using the given integer timestamp or the current time if no timestamp is given. In other words, timestamp is optional and defaults to the value of time().
Bron: http://nl.php.net/manual/en/function.date.php
 
Blijkbaar (schijnbaar?) werkt het bij turbojohn toch niet zoals hij zou willen. Het ontbreken van de tijd levert toch niet een juiste datum op. Het is natuurlijk wel zaak dat het veld in de database als datumveld is gedefiniëerd. En date("Y-m-d",strtotime($datum)) is een prima manier om dd-mm-jjjj om te vormen tot een datum-formaat wat correct in een tabel kan worden opgeslagen.
Als je het -later- uit de database wilt lezen en aan de gebruiker presenteren in een leesbaar formaat, kun je dat met
SELECT ... date_format(datum,'%%d-%%m-%%Y') as formatted_datum, ..... FROM agenda
als $formatted_datum makkelijk doen.
 
Het lag aan een ' die verkeerd stond...:p
Thnx voor iedereen die heeft geholpen.
Mijn datum werd als string $datum doorgestuurd naar de database en dat pikte de database niet.
Door netjes ('".$datum." en nog wat') te gebruiken, werkt het nu wel!

Toppie.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan