datum blijft op 0000 staan in gastenboek

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Marianne M

Marianne M

29/12/2012 22:01:50
Quote Anchor link
Dus begonnen met een (schriftelijke) cursus PHP&MySQL omdat ik wat verder wilde dan HTML en CSS.
Bij de eerste "echte" opdracht loop ik nu tegen een probleem aan wat ik niet uitgevogeld krijg.
De opdracht is om een gastenboek te maken met een pagina voor de berichten en een pagina voor de invoer.
Tabel is aangemaakt en er moet een veld: datum inkomen met het type date.
Voor de pagina's heb ik gebruik gemaakt van een voorbeeld wat ik ergens vond (
Als ik nu een bericht schrijf krijg ik allemaal nullen inplaats van de datum.
Wijzig ik het type in text, dan krijg ik wel de juiste datum en tijd te zien.
Ik heb al van alles geprobeerd en ben al 3 dagen aan het Googlen, ook op NOW(), ook hier gezocht, maar kom er niet uit.
Dit zijn mijn codes:
gastenboek.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Gastenboek boodschappen</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<style>
<!--
a{text-decoration:none}
//-->
</style>
</head>
<body bgcolor="#FFFFFF">

<table width="90%" border="0" cellspacing="0" cellpadding="3" align="center">
<tr>
<td>
<strong>Druk op onderstaande knop om een boodschap achter te laten. </strong><br><br>
<a href="invoer.php"><input type="button" value="Boodschap"></a> <br><br>
</td>
</tr>
<tr>
<td >
<strong>Eerder geschreven berichten in het gastenboek. </strong><br>
</td>
</tr>
</table>

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
<?php
mysql_connect("","","");
mysql_select_db("");

$query = "SELECT * FROM gastenboek ORDER BY id DESC";
$sql=mysql_query($query) or die (mysql_error());
  if($query > 0)
        {

        // hier de boodschappen
        }
    else
        {
        echo "Er is nog niet in het gastenboek geschreven";
        }

while ($obj=mysql_fetch_object($sql)) {
    $naam = $obj->naam;
    $datum = $obj->datum;
    $boodschap = $obj->boodschap;
    ?>


<br>

<table width="90%" border="0" cellspacing="0" cellpadding="3" align="center">
<tr>
<td >
<strong>Geschreven door
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $naam; ?>
</strong>
op
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $datum ?>

</td>
</tr>
<tr>
<td >
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $boodschap; ?>

</td>
</tr>
</table>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<?php }
?>


invoer.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Gastenboek invoerpagina</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<style>
<!--
a{text-decoration:none}
//-->
</style>
</head>
<body bgcolor="#FFFFFF">
<form action="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php print $_SERVER['PHP_SELF'] ?>
" method="post" >
<br><table width="90%" border="0" cellspacing="0" cellpadding="3" align="center">
<tr>
<td>
<strong>Naam </strong><br />
<input value="" type="text" name="naam">
</td>
</tr>
<tr>
<td>
<strong>Boodschap </strong><br />
<textarea name="boodschap" rows="8" cols="50"></textarea><br>
<input type="submit" value="Verstuur">
</td>
</tr>
</table>
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
<?php
mysql_connect("","","");
mysql_select_db("");
if(isset($_POST['naam']) and isset($_POST['boodschap']) and $_POST['naam']!='naam' and $_POST['boodschap']!='boodschap' ) {
    $boodschap = $_POST['boodschap'];
    $naam = $_POST['naam'];
    $datum = date("d-m-Y | H:i", time());
    $boodschap = str_replace("\n", "<br>", $boodschap);

    $query = "INSERT INTO gastenboek(boodschap, naam , datum) VALUES ('".$boodschap."', '".$naam."', '".$datum."')";
      $sql=mysql_query($query) or die (mysql_error());
}


?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?PHP
if($_SERVER['REQUEST_METHOD'] == 'POST')
{

header("Location: gastenboek.php");}
?>

</body>
</html>

Ik heb geprobeerd om bovenstaande op de juiste manier te plaatsen, maar heb geen idee hoe ik op dit forum de code kan "inpakken".

Toevoeging op 29/12/2012 22:02:33:

Gaat vanzelf zie ik ;-)
Gewijzigd op 29/12/2012 22:07:11 door Marianne M
 
PHP hulp

PHP hulp

26/11/2024 04:55:36
 
- Ariën  -
Beheerder

- Ariën -

29/12/2012 22:14:34
Quote Anchor link
Niet helemaal, daarom zijn er ook [code][/code] tags op het forum om je relevante code (t/m 20 regels) te kunnen plaatsen.

Over je probleem... Gebruik de MySQL NOW() functie en maak het veld een DATETIME type.
 
Php knipper

php knipper

29/12/2012 22:16:00
Quote Anchor link
$datum = date("d-m-Y | H:i", time()); die time() is niet nodig
gewoon even naar de functie date() kijken op de php website ;)

wat is de waarde va de tabel in de database (int, text, date, datetime, timestamp,...)

ps. je sql wordt niet gecontroleerd op fouten (toch niet op de juiste manier )
zoek eens op phphulp op sql gebruikershandleiding (gebruik ik ook nog regelmatig )
 
- Ariën  -
Beheerder

- Ariën -

29/12/2012 22:24:15
Quote Anchor link
Je hebt als je het goed wilt doen, de date() functie niet eens nodig.
 
Php knipper

php knipper

29/12/2012 22:34:41
Quote Anchor link
aja now() is gemakkelijker.

maar waarop is date() niet goed? dat werkt toch ook?
 
- Ariën  -
Beheerder

- Ariën -

29/12/2012 22:53:51
Quote Anchor link
Omdat NOW() in MySQL al de juiste waarde geeft, met date() sta je deze opnieuw te construeren.
 
Php knipper

php knipper

29/12/2012 23:03:42
Quote Anchor link
azo bedankt
 
Wouter J

Wouter J

29/12/2012 23:05:52
Quote Anchor link
En omdat je dingen in queries het beste met SQL kunt oplossen ipv PHP, PHP developers hebben weinig kennis van SQL en gaan daardoor veel te veel in PHP oplossen (dit is geen verwijt, hier doe ik zelf ook heel hard aan mee).

Marianne, als ik je code zie staat hij bomvol met fouten en maakt het me 1 ding duidelijk: Jou cursus is eigenlijk te oud om nu nog te gebruiken.
 
Erwin H

Erwin H

29/12/2012 23:16:58
Quote Anchor link
- Aar - op 29/12/2012 22:14:34:
Niet helemaal, daarom zijn er ook [code][/code] tags op het forum om je relevante code (t/m 20 regels) te kunnen plaatsen.

Over je probleem... Gebruik de MySQL NOW() functie en maak het veld een DATETIME type.

Misschien goed om dan het volledige antwoord te geven. De functie NOW() geeft de huidige datum en tijd van de server. CURDATE() geeft de huidige datum van de server. Gezien de opdracht zou dat dus de juiste zijn. Verder is het van belang om te weten hoe een datum wordt opgeslagen in MySQL, want dat is waar het hier fout gaat. Een datum staat in de database als '2012-12-29'. Jaar, maand, dag dus en als je het invoert doe je dat als string en heb je dus ook de quotes eromheen nodig.
 
Joop Slabbekoorn

Joop Slabbekoorn

30/12/2012 01:37:50
Quote Anchor link
je kan toch ook gewoon net als phpknipper zegt:
$datum = date("d-m-Y | H:i", time());
vervangen door:
$date = date ('d-m-y');

om het even makkelijk te houden zegmaar?
 
Erwin H

Erwin H

30/12/2012 12:22:09
Quote Anchor link
Nee Joop. Ten eerste zit je dan nog steeds met de verkeerde dateformat, ten tweede ben je dan dingen in php aan het doen die je in de database kunt afhandelen.
 
Joop Slabbekoorn

Joop Slabbekoorn

30/12/2012 14:03:40
Quote Anchor link
Okeeee hah dan doe ik het ook altijd fout
Heb wel gewoon datum erin staan en tijd ook
En hij print het ook weer goed terug op de website
Ma zal is gaan kijken naar de now() functie
Interessant
 
Wouter J

Wouter J

30/12/2012 14:18:38
Quote Anchor link
Jooop, leuke tutorial voor je± http://phptuts.nl/view/1/
 
Joop Slabbekoorn

Joop Slabbekoorn

30/12/2012 14:35:22
Quote Anchor link
Wouter J op 30/12/2012 14:18:38:
Jooop, leuke tutorial voor je± http://phptuts.nl/view/1/


Jaja geweldig!!! Ga ik helemaal uitpluizen en toepassen
Haha @ het kan altijd beter!!!
 
Marianne M

Marianne M

30/12/2012 17:26:22
Quote Anchor link
Die NOW() functie ben ik juist al dagen op aan het zoeken geweest om die gedaan te krijgen. Het moet waarschijnlijk ergens in deze regel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$query = "INSERT INTO gastenboek(boodschap, naam , datum) VALUES ('".$boodschap."', '".$naam."', '".$datum."')";

Ik had hieronder al deze regel toegevoegd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$query = "INSERT INTO gastenboek (datum) VALUES (NOW())";

Nu krijg ik wel een datum, maar geen naam of bericht meer.

@Erwin H, Inderdaad is de opdracht om gebruik te maken van DATE, dus CURDATE() zou beter zijn dan NOW?
Waar en hoe moet ik het schrijven? Heeft iemand een voorbeeld?
En je schrijft: Verder is het van belang om te weten hoe een datum wordt opgeslagen in MySQL, want dat is waar het hier fout gaat.
Kun je dit wat uitleggen?

@Wouter J, Ik was er na de eerste paar lessen al achter dat dit een cursus van niks is. De cursus bestaat uit: lees die en die paragrafen van het boek (PHP5 en MySQL, het complete handboek) en vervolgens een opdracht om iets te maken wat niet eens, of heel summier is beschreven. Na een heel hoofdstuk met voornamelijk code voor het inrichten van een uitgebreid formulier met radiobuttens, checkboxes en textvelden moet je dan een gastenboek met twee pagina's kunnen maken.
De code heb ik dan ook van http://www.sitemasters.be/scripts/1/6/507/PHP/Een_eenvoudig_gastenboek
Deze heb ik omgebouwd tot de twee pagina's zoals in de opdracht staat.
 
Wouter J

Wouter J

30/12/2012 17:41:51
Quote Anchor link
Oké, laten we even rustig bij het begin beginnen. Kun jij me uitleggen wat de eerste regel code doet, die je hiervoor gegeven hebt? Mocht je dat niet kunnen dan raad ik je aan eerst wat tutorials rustig door te lezen en over een week of 2 à 3 weer terug te komen, deze tutorials heten PHP beginnershandleiding en SQL handleiding.

En nog een tip: Kopieer nooit code! Doe op zijn minst 2 dingen:
1) Typ de code over, de code gaat dan via je hersenen en daardoor leer je er ook nog echt wat van;
2) Leg per regel aan jezelf uit wat er gebeurd en vooral waarom het gebeurd.
 
Marianne M

Marianne M

30/12/2012 17:47:35
Quote Anchor link
De eerste regel stopt de ingetypte naam en boodschap in de tabel in de database. Alleen waar haalt de database de datum vandaan? Daar kom ik dus niet uit.
Als ik DATE verander in TEXT gaat het wel goed, maar dat is niet de bedoeling.
Gewijzigd op 30/12/2012 17:48:46 door Marianne M
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

30/12/2012 18:22:08
Quote Anchor link
NOW() en CURDATE() zijn ingebouwde mysql functies en de datum en/of tijd is zoals die is ingesteld op het systeem waar mysql op draait.
 
Erwin H

Erwin H

30/12/2012 18:42:06
Quote Anchor link
Marianne M op 30/12/2012 17:26:22:
@Erwin H, Inderdaad is de opdracht om gebruik te maken van DATE, dus CURDATE() zou beter zijn dan NOW?
Waar en hoe moet ik het schrijven? Heeft iemand een voorbeeld?
En je schrijft: Verder is het van belang om te weten hoe een datum wordt opgeslagen in MySQL, want dat is waar het hier fout gaat.
Kun je dit wat uitleggen?

Datums worden op vele manier geschreven.
30 december 2012
30-12-2012
30-12-12
12-30-2012
2012-30-12
Betekenen allemaal hetzelfde. In veel gevallen kunnen die verschillende schrijfwijze echter verwarrend zijn. Denk maar aan 9/11. Voor de Amerikanen is dat 11 september, voor ons Hollanders en Belgen is dat eigenlijk 9 november.
Voor programmeurs is dit een bekend en vervelend probleem, waardoor er eigenlijk altijd wordt gezocht naar standaarden. De standaard schrijfwijze die MySQL aanhoudt voor datums is dus 2012-30-12 (yyyy-mm-dd). Het formaat dat jij nu gebruikt in je voorbeeld zal een datum echter weergeven als dd-mm-yyyy. Dat is een formaat dat MySQL dus niet kent en dus zal je de datum niet verwerkt krijgen.

Wat betreft CURDATE() en NOW() klopt het zoals hierboven al vermeld. CURDATE geeft alleen datum, NOW geeft datum en tijd. Heb je alleen datum veld dan kan je overigens wel NOW() gebruiken, echter je krijgt dan wel een warning van de database server dat je input waarde is afgebroken (truncated). Dit stopt je script niet, maar uiteraard is het altijd beter om dit soort warnings te voorkomen daar waar mogelijk is.
 
Obelix Idefix

Obelix Idefix

30/12/2012 18:45:38
Quote Anchor link
Marianne M op 30/12/2012 17:47:35:
Alleen waar haalt de database de datum vandaan?

De database? Jij geeft in je query $datum mee. Die bepaal je zelf in je code.

Marianne M op 30/12/2012 17:47:35:
Als ik DATE verander in TEXT gaat het wel goed, maar dat is niet de bedoeling.

De opmaak van een datumveld in een database is YYYY-MM-DD
Jouw opmaak van $datum is date("d-m-Y | H:i", time());
Zie verschil in opmaak.
Daarom accepteert de database het niet (wel als je het als TEXT-veld markeert, maar dan staat er (dus) tekst en geen datum (al zou je dat misschien vermoeden).
Je zult in je query dus $datum moeten vervangen door CURDATE()

Verder nog een aantal opmerkingen:
Gebruik aub code-tags, zodat duidelijk is wat bij wat hoort en het script als zodanig herkenbaar is.

In een script: eerst PHP (controle, verwerking), dan HTML.
Bouw controles in. Je controleert nergens of de verbinding met de database is gelukt en of er een tabel geselecteerd is. Or die, bij je query, is geen (nette) foutafhandeling.
Selecteren in een query van 1 of meer velden doe je door ze te benoemen, niet door * te gebruiken.

$_SERVER['PHP_SELF'] wordt als onveilig gezien; kwaadwillende zouden je formulier/site kunnen misbruiken. Laat liever leeg.

Een formulier hoor je eigenlijk niet met een table op te maken, maar met css.

Je controle of een formulier verzonden is, doe je met if($_SERVER['REQUEST_METHOD'] == 'POST') en daarna controleer je of ook alle (vereiste) velden een waarde hebben.

Het aanmaken van $naam en $boodschap is zinloos; die waarden zitten al in $_POST.

Je INSERT-query is 'lek'; mensen kunnen nu ook bv javascript in je database zetten. Iets wat je zult moeten controleren / beveiligen (mysql_real_escape_string).

Dit is wat Wouter bedoelt met verouderd cursusmateriaal.
Gewijzigd op 30/12/2012 18:47:10 door Obelix Idefix
 
Marianne M

Marianne M

30/12/2012 21:00:21
Quote Anchor link
Voor zover al (even vluchtig doorgelezen) een stuk duidelijker voor mij.
("d-m-Y | H:i", time()); had ik al gewijzigd in ('d-m-y'); maar dan werkte het nog niet, denk dat ik nu snap waarom.
Morgen om 5 uur op (werken), maar daarna ga ik bovenstaande verder bestuderen en zien toe te passen.

En 1 van de dingen waar ik me bij deze cursus en het bijbehorende boek inderdaad aan stoor is, behalve de taalfouten en fouten in codes (als je al in 2006 in een les durft te schrijven dat x de operator is voor vermenigvuldigen en dit in 2012 nog steeds beweert, ik bedoel maar), het gebruik van tabellen om een pagina op te maken + het overvloedige gebruik van hoofdletters en verouderde html.
Als je al een paar jaar gewend bent om alles te doen in xhtml en de opmaak in stylesheets, is dit gewoon tenenkrommend. Maar ja, zo te zien is deze cursus dus ontwikkeld in 2006 en daarna nooit meer gewijzigd. Nou ja, ontwikkeld, lesmateriaal is er niet, slechts opdrachten om delen van het boek te lezen en dan iets in elkaar zien te draaien.
Ik zal hem echter toch helemaal moeten doorlopen om aan het eind een certificaat te kunnen bemachtigen (waar ik in de praktijk denk ik niet veel aan zal hebben), maar voor mezelf gewoon een stukje "ergens aan beginnen en het dan ook af maken".
 

Pagina: 1 2 volgende »



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.