Gastenboek
ik hen in php een simpel gastenboek aan het ontwerpen nu alles werkt(denk ik). maar het script geeft 1 fout weer:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in
en had deze code:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
mysql_connect("", "", "");
mysql_select_db("");
$query= "SELECT naam, bericht, tijdstip FROM berichten ORDER BY tijdstip DESC";
$resultaat = mysql_query($query);
$rij = mysql_fetch_array($resultaat);
while ($rij) {
$datum= date ("d F Y - h:i:s", $rij["tijdstip"]);
?>
mysql_connect("", "", "");
mysql_select_db("");
$query= "SELECT naam, bericht, tijdstip FROM berichten ORDER BY tijdstip DESC";
$resultaat = mysql_query($query);
$rij = mysql_fetch_array($resultaat);
while ($rij) {
$datum= date ("d F Y - h:i:s", $rij["tijdstip"]);
?>
alvast bedankt.
Volgende keer even je databasegegevens uit je topic halen, of wil je ongewenste gasten in je database?[/modedit]
Gewijzigd op 15/07/2012 11:39:45 door Roel -
Quote:
mysql_fetch_array() verwacht dat de parameter een query resource is, maar het is een boolean
Eerst wat begrippen: Parameter = variabele die je aan een functie meegeeft; Resource = iets wat mysql_query terug geeft wat we moeten fetchen; Boolean = waarde om aan te geven of iets goed is (true) of fout (false).
We verwachten dus dat mysql_query een resource teruggeeft, maar dat geeft hij niet. Hoe kan dat? Laten we even in de documentatie kijken wat zegt die over return values (waarde die teruggegeven worden)?
Quote:
For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.
(...)
mysql_query() will also fail and return FALSE if the user does not have permission to access the table(s) referenced by the query.
(...)
mysql_query() will also fail and return FALSE if the user does not have permission to access the table(s) referenced by the query.
(even een irrelevant stukje weggelaten)
Hmm, hij geeft dus een resource (resultset) terug als het goed is gegaan en false (een boolean) als het fout is gegaan. Er gaat dus waarschijnlijk iets fout met de query.
Maar wat? Tja, daar kunnen we alleen achter komen door verder te debuggen. En dat mag jij doen :) Stappen:
- Bouw foutafhandeling in (dit hoort de fundering van je script te zijn). Een goed voorbeeld vind je hier: http://github.com/WouterJ/sql-boilerplate/tree/mysql
- Vertaal de error die je krijgt en kijk wat er mis is met je query
- Voer je query uit in PHPMyAdmin
- Minimaliseer je query en bouw hem opnieuw op, waar gaat het mis?
En haal je database-gegevens even uit je post....
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
//$rij = mysql_fetch_array($resultaat); deze lijn weg..
while( $rij = mysql_fetch_assoc( $resultaat ) ) {
$datum= date ("d F Y - h:i:s", $rij['tijdstip']);
}
?>
//$rij = mysql_fetch_array($resultaat); deze lijn weg..
while( $rij = mysql_fetch_assoc( $resultaat ) ) {
$datum= date ("d F Y - h:i:s", $rij['tijdstip']);
}
?>
Gewijzigd op 10/07/2012 11:07:22 door Bart V B
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
if ($_POST["naam"] == "") $naam = "Anoniem";
else $naam = $_POST["naam"];
if ($_POST["bericht"] == "") {
header("Location: gastenboek.php");
exit(0);
}
$bericht = $_POST["bericht"];
$tijdstip = time();
$query = "INSERT INTO berichten (naam, bericht, tijdstip) VALUES ('" . $naam . "', '" . $bericht . "', " . $tijdstip . ")";
mysql_connect("localhost", "naam", "wachtwoord");
mysql_select_db("webleren");
mysql_query($query);
header("Location: gastenboek.php");
exit(0);
?>
if ($_POST["naam"] == "") $naam = "Anoniem";
else $naam = $_POST["naam"];
if ($_POST["bericht"] == "") {
header("Location: gastenboek.php");
exit(0);
}
$bericht = $_POST["bericht"];
$tijdstip = time();
$query = "INSERT INTO berichten (naam, bericht, tijdstip) VALUES ('" . $naam . "', '" . $bericht . "', " . $tijdstip . ")";
mysql_connect("localhost", "naam", "wachtwoord");
mysql_select_db("webleren");
mysql_query($query);
header("Location: gastenboek.php");
exit(0);
?>
alvast bedankt.
Ik heb het ook een beetje handiger in elkaar gezet, alstu:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
$host = 'localhost';
$db_user = 'user';
$db_pass = 'pass';
$database = 'webleren';
function _insert($str) {
return mysql_real_escape_string($str);
}
if($_SERVER['REQUEST_METHOD']=="POST") {
if(!isset($_POST['naam']))
$naam = 'Anoniem';
else
$naam = htmlspecialchars($_POST['naam']);
if(empty($_POST['bericht']))
header('Location: gastenboek.php');
$bericht = $_POST['bericht'];
$query = "INSERT INTO `berichten` (`naam`, `bericht`, `tijdstip`) VALUES ('"._insert($naam)."','"._insert($bericht)."', CURTIME())";
mysql_connect($host, $db_user, $db_pass);
mysql_select_db($database);
mysql_query($query);
header('Location: gastenboek.php');
}
?>
$host = 'localhost';
$db_user = 'user';
$db_pass = 'pass';
$database = 'webleren';
function _insert($str) {
return mysql_real_escape_string($str);
}
if($_SERVER['REQUEST_METHOD']=="POST") {
if(!isset($_POST['naam']))
$naam = 'Anoniem';
else
$naam = htmlspecialchars($_POST['naam']);
if(empty($_POST['bericht']))
header('Location: gastenboek.php');
$bericht = $_POST['bericht'];
$query = "INSERT INTO `berichten` (`naam`, `bericht`, `tijdstip`) VALUES ('"._insert($naam)."','"._insert($bericht)."', CURTIME())";
mysql_connect($host, $db_user, $db_pass);
mysql_select_db($database);
mysql_query($query);
header('Location: gastenboek.php');
}
?>
Edit: puntkomma vergeten.
Gewijzigd op 14/07/2012 22:14:07 door Kumkwat Trender
dankje wel alles werkt nu zoals het zou moeten. bedankt
In het script van Kumkwat:
waarom op regel 22 variabele kopiëren?
In een query beter geen ` gebruiken; gebruik geldige namen voor tabel/velden en je hebt ze niet nodig. Had TS overigens ook niet in zijn code staan.
Mis foutafhandeling van de query.
Quote:
Waarom gebruik je exit? Is nergens voor nodig als je header location ervoor gebruikt.
Omdat je dan zeker ervan bent dat het script echt niet meer verder loopt.
Die exit hoeft niet perse, maar is wel netter. :)
www.dinotales.be
het gastenboek werkt probeer maar uit.
http://www.dinotales.net78.net/gastenboek.php
hier even het script dat ik heb gemaakt voor het gastenboek werkt probeer maar uit.
http://www.dinotales.net78.net/gastenboek.php