Mijn eigen gastenboek
Dit is een flink project voor mij. Ik ben eigenlijk pas 3 weken bezig en niet eens fulltime om deze code te krijgen. Ik blijf tegen dingen aanlopen en wil graag wat advies.
In de volgende code heb ik mijn eigen gastenboek gemaakt. Dit wordt met 2 bestanden gedaan. Dit bestand verwerkt het gastenboek. Ik heb tot nu toe 2 velden. 1 voor de naam en de andere voor het bericht. Daaronder heb ik dan een overzicht wat mensen plaatsen. In dit bestand wil ik ook de datum van wanneer het gepost is in de database plaatsen. Ik krijg de tijd en datum perfect op de site te zien, maar ik krijg het niet in de database. Heeft iemand tips?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$adatum = date('D d/m/Y - H:i', +strtotime('2 hours'));
$naam = mysql_real_escape_string (htmlentities($_POST['naam']));
$bericht = mysql_real_escape_string (htmlentities($_POST['bericht']));
$count = mysql_query("SELECT COUNT(1) FROM `temp` WHERE `naam` = '{$naam}' AND `bericht` = '{$bericht}'");
$count = mysql_result($count,0);
if ( $count >= '1' ) {
echo "Error dit bericht is al lang hier op gezet.";
}
else {
mysql_query ("INSERT INTO `temp` (`naam`,`bericht`,'adatum') VALUES ('{$naam}','{$bericht}','{$adatum}')");
echo "Je bericht is geplaatst op $adatum";
}
?>
$adatum = date('D d/m/Y - H:i', +strtotime('2 hours'));
$naam = mysql_real_escape_string (htmlentities($_POST['naam']));
$bericht = mysql_real_escape_string (htmlentities($_POST['bericht']));
$count = mysql_query("SELECT COUNT(1) FROM `temp` WHERE `naam` = '{$naam}' AND `bericht` = '{$bericht}'");
$count = mysql_result($count,0);
if ( $count >= '1' ) {
echo "Error dit bericht is al lang hier op gezet.";
}
else {
mysql_query ("INSERT INTO `temp` (`naam`,`bericht`,'adatum') VALUES ('{$naam}','{$bericht}','{$adatum}')");
echo "Je bericht is geplaatst op $adatum";
}
?>
Gewijzigd op 01/06/2011 07:44:52 door Sven b
Bij datetime velden kun je de mysql functie NOW() gebruiken voor het inserten.
Je moet trouwens even een tutorial opzoeken over foutafhandeling, veel eventuele fouten doe je nu namelijk niets mee. Het tellen van resultaten kan overigens met mysql_num_rows(). Die returnt een integer, dus dan moet je het resultaat vergelijken met 1 en niet met '1'.
Gewijzigd op 01/06/2011 08:19:00 door Erik van de Locht
Daarnaast moet je ook altijd variabelen buiten de quotes halen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$adatum = date('D d/m/Y - H:i', +strtotime('2 hours'));
$naam = mysql_real_escape_string (htmlentities($_POST['naam']));
$bericht = mysql_real_escape_string (htmlentities($_POST['bericht']));
$count = mysql_query("SELECT COUNT(1) FROM `temp` WHERE `naam` = '{$naam}' AND `bericht` = '{$bericht}'");
$count = mysql_result($count,0);
if ( $count >= 1 ) {
echo "Error dit bericht is al lang hier op gezet.";
}
else {
mysql_query ("INSERT INTO `temp` (`naam`,`bericht`,'adatum') VALUES ('{$naam}','{$bericht}','{$adatum}')");
echo 'Je bericht is geplaatst op' .$adatum;
}
?>
$adatum = date('D d/m/Y - H:i', +strtotime('2 hours'));
$naam = mysql_real_escape_string (htmlentities($_POST['naam']));
$bericht = mysql_real_escape_string (htmlentities($_POST['bericht']));
$count = mysql_query("SELECT COUNT(1) FROM `temp` WHERE `naam` = '{$naam}' AND `bericht` = '{$bericht}'");
$count = mysql_result($count,0);
if ( $count >= 1 ) {
echo "Error dit bericht is al lang hier op gezet.";
}
else {
mysql_query ("INSERT INTO `temp` (`naam`,`bericht`,'adatum') VALUES ('{$naam}','{$bericht}','{$adatum}')");
echo 'Je bericht is geplaatst op' .$adatum;
}
?>
Wat bedoel je precies met backtricks?
Wat als ik nu wil zeggen: Hallo $naam, is te gek!
$deel1 = 'Hallo,';
$deel2 = 'is te gek!';
echo $deel1.''.$naam,.''.$deel2; ? Ik neem aan wanneer je variabelen buiten je quotes zet dat dit sneller werkt?
Ik heb een timestamp in mijn table gebruikt. Dit kan niet werken of moet ik het dan anders aanpakken? Ik kan wel die msql functie NOW toepassen, maar ik moet er wel 2 uur aan toevoegen, omdat de tijd die ik bij default krijg te zien 2 uur achterloopt. Hier heb ik al eerder mee lopen rotzooien en dit heb ik tot nu toe gefixed, maar ik moet het nu dus allemaal omgooien? Ik zou $adatum toch wel in mijn database moeten krijgen? Hij staat precies goed. d/m/Y en H:i.
Groetjes Sven
Als ik het verander in date verander in datetime en een timestamp in mijn db heb dan zou het dus wel moeten werken?
Erik van de Locht op 01/06/2011 08:14:56:
Is je datum-kolom in de database een datetime veld?
Bij datetime velden kun je de mysql functie NOW() gebruiken voor het inserten.
Bij datetime velden kun je de mysql functie NOW() gebruiken voor het inserten.
Ik kan een tijd in mijn database krijgen. Ik kan dit zelfs door mijn php database laten doen, maar zoals ik al zei ik moet er 2 uur aan toevoegen. Dus NOW is niet wat ik wil. Ik kan het ook niet oproepen.
Ja, ik heb het wel geprobeerd:
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
$adatum = datetime('D d/m/Y - H:i:s'); //* dit werkt ook niet..
$testdatum = SELECT NOW ('d/m/Y - H:i:s'); //* ik heb ook zonder SELECT geprobeerd, maar dat helpt niet.
$naam = mysql_real_escape_string (htmlentities($_POST['naam']));
$bericht = mysql_real_escape_string (htmlentities($_POST['bericht']));
$count = mysql_query("SELECT COUNT(1) FROM `temp` WHERE `naam` = '{$naam}' AND `bericht` = '{$bericht}'");
$count = mysql_result($count,0);
if ( $count >= 1 ) {
echo "Error dit bericht is al lang hier op gezet.";
}
else {
mysql_query ("INSERT INTO `temp` (`naam`,`bericht`,'adatum') VALUES ('{$naam}','{$bericht}','{$adatum}')");
echo 'Je bericht is geplaatst op' .$testdatum;
?>
$adatum = datetime('D d/m/Y - H:i:s'); //* dit werkt ook niet..
$testdatum = SELECT NOW ('d/m/Y - H:i:s'); //* ik heb ook zonder SELECT geprobeerd, maar dat helpt niet.
$naam = mysql_real_escape_string (htmlentities($_POST['naam']));
$bericht = mysql_real_escape_string (htmlentities($_POST['bericht']));
$count = mysql_query("SELECT COUNT(1) FROM `temp` WHERE `naam` = '{$naam}' AND `bericht` = '{$bericht}'");
$count = mysql_result($count,0);
if ( $count >= 1 ) {
echo "Error dit bericht is al lang hier op gezet.";
}
else {
mysql_query ("INSERT INTO `temp` (`naam`,`bericht`,'adatum') VALUES ('{$naam}','{$bericht}','{$adatum}')");
echo 'Je bericht is geplaatst op' .$testdatum;
?>
Gewijzigd op 01/06/2011 11:23:02 door Sven b
Sven b op 01/06/2011 11:22:28:
Oke, voor iemand die wel mijn berichten volledig leest.
Nu vallen er veel mensen af.
Succes verder.
Bedankt voor de opbouwende feedback die mij totaal niet verder helpt.
Ik probeerde je de goede richting op te sturen, maar blijkbaar wil jij een kant en klare oplossing. Tja, dan zul je geduld moeten hebben totdat iemand die wil geven. Tip: Google eens op DATE en TIME functies van MySQL.
- SanThe - op 01/06/2011 10:52:52:
Zoals reeds is gezegd, géén date() gebruiken in sql:
Erik van de Locht op 01/06/2011 08:14:56:
Is je datum-kolom in de database een datetime veld?
Bij datetime velden kun je de mysql functie NOW() gebruiken voor het inserten.
Bij datetime velden kun je de mysql functie NOW() gebruiken voor het inserten.
Zoals wat reeds is gezegd is hetgeen wat ik zelf heb gezegd!
Zoals wat Erik Zei is datgeen waar ik al op gereageerd had dat ik niet wist hoe ik het moest inzetten en dat ik er alsnog 2 uur aan toe moet voegen. Dit laat geen enkele tutorial zien.
Dus... graag mijn berichten ook lezen.
Als je in de plaats van:
Code (php)
1
$count = mysql_query("SELECT COUNT(1) FROM `temp` WHERE `naam` = '{$naam}' AND `bericht` = '{$bericht}'");
Dit neer zet:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$result = mysql_query("SELECT COUNT(1) FROM temp WHERE naam = '".$naam."' AND bericht = '".$bericht);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
?>
$result = mysql_query("SELECT COUNT(1) FROM temp WHERE naam = '".$naam."' AND bericht = '".$bericht);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
?>
Dan kun je zien wanneer er een fout zit in je query. Zo kun je gericht zoeken op google als er iets verkeerd gaat.
Het probleem dat de NOW() functie 2 uur verkeerd staat komt denk ik door de tijd van de server. Misschien is deze niet in Nederland gehost.
Ik denk trouwens dat je voor de datum gewoon een TIMESTAMP kunt gebruiken als deze wel de juiste datum meegeeft. Op deze manier hoef je de datum namelijk niet via de query in je database te zetten maar wordt deze aangemaakt als er een nieuwe rij in de database wordt gezet.
Hoop dat je hier wat aan hebt.
Zit je in een andere tijdzone? Kijk dan daar eens naar op php.net.
Dit werkt.. alleen mag ik dus geen date () gebruiken, waarom snap ik niet precies, maar goed.
Dit werkt niet.. waarom snap ik niet, omdat date datetime en timestamp families van elkaar zijn en dus op de zelfde manier inzetbaar zouden moeten zijn. Toch?
Dus ik krijg wel wat op mijn scherm, maar wanneer ik hier 2 uur aan toe wil voegen is dat wat lastiger. Al lukt dat ook..
Code (php)
Dit werkt ook, maar wanneer ik het in de database wil stoppen werkt het niet meer. Dus ik weet wel iets van date en datetime en timestamp, maar ik snap niet hoe ik het moet toepassen. Ik wil niet perse een directe oplossing. Zoals je ziet probeer ik het zelf wel uit en doe ik mijn best om er iets van te maken. Misschien slaat mijn script nergens op, maar ik probeer...
Gewijzigd op 01/06/2011 11:47:20 door Sven b
Rick van Riel op 01/06/2011 11:41:32:
YYYY-MM-DD HH:MM:SS
En het databaseveld moet een DATETIME zijn (of DATE als je geen tijd wilt opslaan).
Nu gebruik ik de NOW functie zoals men mij adviseerd, maar uiteraard werkt dit bij mij niet. Ik doe precies zoals in de tutorial staat omschreven. Uiteraard heeft de hele code zo geen zin, omdat ik er twee uur aan wil toevoegen, omdat dit geen NL tijd is.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$adatum = date("D d-m-Y H:i", +strtotime('2hours'));
$naam = mysql_real_escape_string (htmlentities($_POST['naam']));
$bericht = mysql_real_escape_string (htmlentities($_POST['bericht']));
$count = mysql_query("SELECT COUNT(1) FROM `temp` WHERE `naam` = '{$naam}' AND `bericht` = '{$bericht}'");
$count = mysql_result($count,0);
if ( $count >= 1 ) {
echo "Error dit bericht is al lang hier op gezet.";
}
else {
mysql_query ("INSERT INTO `temp` (`naam`,`bericht`,'adatum') VALUES ('{$naam}','{$bericht}','(NOW())'");
echo 'Je bericht is geplaatst op' .$adatum;
}
?>
$adatum = date("D d-m-Y H:i", +strtotime('2hours'));
$naam = mysql_real_escape_string (htmlentities($_POST['naam']));
$bericht = mysql_real_escape_string (htmlentities($_POST['bericht']));
$count = mysql_query("SELECT COUNT(1) FROM `temp` WHERE `naam` = '{$naam}' AND `bericht` = '{$bericht}'");
$count = mysql_result($count,0);
if ( $count >= 1 ) {
echo "Error dit bericht is al lang hier op gezet.";
}
else {
mysql_query ("INSERT INTO `temp` (`naam`,`bericht`,'adatum') VALUES ('{$naam}','{$bericht}','(NOW())'");
echo 'Je bericht is geplaatst op' .$adatum;
}
?>
Toevoeging op 01/06/2011 15:06:10:
Code (php)
1
2
3
2
3
$tijd = date ('H:i:s', +strtotime('2hours');
$datum = date ('d/m/y');
echo $tijd. $datum;
$datum = date ('d/m/y');
echo $tijd. $datum;
Dit laat precies zien wat ik wil, maar ik kan dit niet zo vastleggen? Dit haal ik rechtstreeks uit een video tutorial. Iemand die 250 tutorials op php gebied heeft geschreven. Zelfs hij behandeld niet de datetime....
Te frustrerend.
Toevoeging op 01/06/2011 15:53:21:
Aangezien niemand me helpt blijf ik wat dingetjes testen, maar tevergeefs...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'true');
$date = $_POST['date'];
$newdate = date("Y-m-d H:i:s", strtotime('$date');
$adatum = date("D d-m-Y H:i", +strtotime('2hours'));
$naam = mysql_real_escape_string (htmlentities($_POST['naam']));
$bericht = mysql_real_escape_string (htmlentities($_POST['bericht']));
$count = mysql_query("SELECT COUNT(1) FROM `temp` WHERE `naam` = '{$naam}' AND `bericht` = '{$bericht}'");
$count = mysql_result($count,0);
if ( $count >= 1 ) {
echo "Error dit bericht is al lang hier op gezet.";
}
else {
mysql_query ("INSERT INTO `temp` (`naam`,`bericht`,'adatum') VALUES ('{$naam}','{$bericht}','{$_POST['date']}')");
echo 'Je bericht is geplaatst op' .$adatum;
}
?>
error_reporting(E_ALL);
ini_set('display_errors', 'true');
$date = $_POST['date'];
$newdate = date("Y-m-d H:i:s", strtotime('$date');
$adatum = date("D d-m-Y H:i", +strtotime('2hours'));
$naam = mysql_real_escape_string (htmlentities($_POST['naam']));
$bericht = mysql_real_escape_string (htmlentities($_POST['bericht']));
$count = mysql_query("SELECT COUNT(1) FROM `temp` WHERE `naam` = '{$naam}' AND `bericht` = '{$bericht}'");
$count = mysql_result($count,0);
if ( $count >= 1 ) {
echo "Error dit bericht is al lang hier op gezet.";
}
else {
mysql_query ("INSERT INTO `temp` (`naam`,`bericht`,'adatum') VALUES ('{$naam}','{$bericht}','{$_POST['date']}')");
echo 'Je bericht is geplaatst op' .$adatum;
}
?>
Toevoeging op 01/06/2011 15:58:54:
Ik ben hier te lang mee bezig... van vanochtend en tot nu en niet alleen vandaag dat die date time en timestamp en datetime me gruwelijk irriteren.
Waarschijnlijk zal het zeer simpel zijn. Zeker zal ik nu beetje irritant overkomen, maar dit geval gaat me echt te ver. Normaal vind ik wel redelijk snel een oplossing en kom ik er wel uit. Normaal zou ik ook suggesties doen hoe ik het zou aanpakken, maar hier heb ik geen idee bij.
Of Deziweb.nl :-)
Begrijp ik dit goed?