Ha allemaal. Geen terras weer dus nu maar weer druk met php bezig.

Oke, ik ben bezig met mijn gastenboek scriptje. Ik had 't werkend totdat ik de tutorial van Jan op mijn scriptje ging uitproberen, met de bedoeling om de datum met een nederlandse tekst weer te geven.

Ik heb nu het volgende.

<?php
$weekdagnamen = array (zondag, maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag);
$maandnamen = array (1 => januari, februari, maart, april, mei, juni, juli, augustus, september, oktober, november, december);

$sql = "SELECT
DATE_FORMAT(datum, '%w') AS dag,
DATE_FORMAT(datum, '%d') AS datum,
DATE_FORMAT(datum, '%c') AS maand,
DATE_FORMAT(datum, '%Y') AS jaar,
naam,
email,
bericht,
website,
ip

FROM prikbord ORDER BY datum DESC";
$res = mysql_query($sql) or die (mysql_error ());;

if (mysql_num_rows($res) >= 1)
{

while ($row = mysql_fetch_object ($res))
{
$color ^= 1;
echo "<div id=\"subtitel\">$row[naam]</div>";
echo '<div id="datum'.$color.'">';
echo '<p>' . $weekdagnamen[$row->dag] . ' ' . $row->datum . ' ' . $maandnamen[$row->maand] . ' ' . $row->jaar . '</div>';
echo '<div id="reactie'.$color.'">';
$row['bericht'] = ubb($row['bericht']);
echo "<p>$row[bericht]</p>";

echo "<a href=\"$row[website]\">Website</a> | <a href=\"mailto:$row[email]\">Email</a>";
echo "</div>";

}
}
else
{
echo '<div id="reactie0">Er staan nog geen berichten op het Prikbord.</div>';
}
?>

Ik krijg dus de volgende foutmelding:

Warning: Cannot use a scalar value as an array in /var/www/v/vervandekade.nl/HTML/inhoud/prikbord.php on line 134


Regel 134 is in dit script het deel van

<?php
$row['bericht'] = ubb($row['bericht']);
?>

Heel raar want hij deed 't dus zonder die datum functie wel. Wat loopt hier nu mis?

Groet! Cris!
Dit verdient geen schoonheidsprijs:
<?php
while ($row = mysql_fetch_object ($res))
{
$color ^= 1;
echo "<div id=\"subtitel\">$row[naam]</div>";
echo '<div id="datum'.$color.'">';
echo '<p>' . $weekdagnamen[$row->dag] . ' ' . $row->datum . ' ' . $maandnamen[$row->maand] . ' ' . $row->jaar . '</div>';
echo '<div id="reactie'.$color.'">';
$row['bericht'] = ubb($row['bericht']);
echo "<p>$row[bericht]</p>";

echo "<a href=\"$row[website]\">Website</a> | <a href=\"mailto:$row[email]\">Email</a>";
echo "</div>";

}
?>
Waarom de ene keer dubbele quotes en dan weer enkele quotes? Verder hebben de sleutels in de array's helemaal geen quotes. Dit is vragen om problemen.

- Gebruik bij een echo enkele quotes, dan hoef je geen dubbele quotes in de html te escapen.
- Een sleutel in een array hoort voorzien te zijn van quotes: $row['bericht'] is goed, $row[bericht] is fout...
- Met print_r($row); had je al kunnen achterhalen dat het niets met de datumfuncties te maken heeft. Die staan zowieso niet in je php-code, maar in je SQL. Dus waarom je daar een verband mee legt, is mij onduidelijk

Succes met debuggen.
Ik was nog van plan de boel op te schonen. Ik zal het meteen even doen Frank. Had niet verwacht dat dit problemen zou opleveren.

Ik ga het even proberen!
Oke, ik heb de boel even opgeschoont en tijdelijk maar even die ubb functie uitgeschakeld.

Er zijn geen foutmeldingen meer.

Wat ik net ook al dacht te zien maar nu vastgesteld heb is dat alleen de datum wordt opgehaald met de query die ik nu gebruik. Maar ik heb wel alle velden aangeroepen. Deze komen 100% overeen, en werkten voor de datum functie wel.

Hoe kan dit nu? Wie kan me nog een tip geven?

Groetjes, Cris
En welke query gebruik je nu?
Jan, het gaat om de volgende query:


$sql = "SELECT 
naam,
email,
bericht,
website,
ip,

DATE_FORMAT(datum, '%w') AS dag,

DATE_FORMAT(datum, '%d') AS datum,

DATE_FORMAT(datum, '%c') AS maand,

DATE_FORMAT(datum, '%Y') AS jaar 

FROM prikbord ORDER BY datum DESC";
                $res = mysql_query($sql) or die (mysql_error ());;


Zit ik nu te lang achter de computer of klopt deze gewoon en is er iets raars aan de hand?

Groetjes Cris
Ik heb nu voor de zekerheid ook nog eens deze query door phpmyadmin gehaald en dat gaat gewoon goed.

verder op in het script doe ik

<?php
if (mysql_num_rows($res) >= 1)
{

while ($row = mysql_fetch_object ($res))
{
$color ^= 1;
echo "<div id=\"subtitel\">$row[naam]</div>";
echo "<div id=\"datum$color\">";
echo "" . $weekdagnamen[$row->dag] . " " . $row->datum . " " . $maandnamen[$row->maand] . " " . $row->jaar . "</div>";
echo "<div id=\"reactie$color\">";
//$row[bericht] = ubb($row[bericht]);
echo "<p>$row[bericht]</p>";
//echo $sql;
echo "<a href=\"$row[website]\">Website</a> | <a href=\"mailto:$row[email]\">Email</a>";
echo "</div>";

}
}
else
{
echo '<div id="reactie0">Er staan nog geen berichten op het Prikbord.</div>';
}
?>

met de $row pakt hij dus wel de datum maar niet de andere gegevens.

Wie kan me dit uitleggen? Ik wordt steeds nieuwsgieriger!

Groet! Cris
<?php

// Object
$row = mysql_fetch_object($res);
echo $row->bericht;

// Array
$row = mysql_fetch_array($res);
echo $row['bericht'];

// Assoc
$row = mysql_fetch_assoc($res);
echo $row['bericht'];

?>

jij doet
$row = mysql_fetch_object ($res);
en dan doe je
$row['bericht']

dat moet dus zijn
$row->bericht
Ik wist helemaal niet dat dat ook kon! Super bedankt Jordy. Hij doet het nu!
Heb je weer wat geleert :-)
mysql_fetch_object() is de langzaamste van de 3 fetch-functies. Persoonlijk zou ik de snelste nemen, mysql_fetch_assoc() en dan uiteraard de notatie $row['bericht'] hanteren.

Reageren