Ik ben bezig met een zoekfunctie maar er komt steeds geen resultaat terwijl er wel meer dan 50 records in de database staan. Ik krijg ook geen foutmelding.
Wie ziet wat ik fout doe in onderstaande code?
<?php
if(isset($_POST['searchBtn'])) {
$zoekwoord = $_POST['zoekterm'];
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".$zoekwoord."%' ORDER BY datum DESC";
$res = mysql_query($sql);
if (mysql_num_rows($res) >= 1)
{
while ($row = mysql_fetch_array($res))
{
?>
<a href="<?php echo "?p=empty&s=blog&id=$row[id]"; ?>"><b><?php echo "$row[titel]"; ?></a></b><br />
<?php echo "$row[samenvatting]";
echo '<p>';
}}}
else
{
echo "<p>Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.</b></p>";
}
?>
@Danny: Gezooi met trigger_error()? Nee, maak gewoon een mooie if-constructie waarin je de $res controleert. Indien deze mislukt is, weergeef je een error ;-).
@TS: Een formulier controle voeren we uit met:
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
?>
We controleren dus niet of een submit-button meegestuurd is, want dat gebeurt niet altijd.
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".$_POST['zoekterm']."%' ORDER BY datum DESC";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.';
}
else
{
while($row = mysql_fetch_assoc($res))
{
echo "<a href=\"?p=empty&s=blog&id=".$row[titel]."\"><b>".$row[titel]."</a></b><br />".$row[samenvatting]."<p>";
}}}
?>
Het script wat ik hierboven gebruikte is het enige script op PHPhulp en al zeker 3 jaar oud. Dus misschien moet ik deze maar plaatsen (als deze beter is).
Ik heb het nog niet getest. Dat ga ik nu even doen.
EDIT: toch nog een foutje ontdekt en eruit gehaald. Dit script werkt ook sneller voor mijn gevoel...
Regel 20 zal 4 fouten geven.
Script is lek => SQL-Injection.
Edit: Nu nog 3.
en bij de error laat je je SQL-query zien. Dat icm met SQL-injection mogelijkheid is dat zeer gevaarlijk.
<?php
if (isset($_POST['searchBtn' ]))
{
$sql = "hier je query";
if ($res = mysql_query($sql))
{
// ga verder
} else {
error_log(mysql_error());
print mysql_errno().": Er is een fout opgetreden.";
}
} else {
// Formulier is niet gepost
}
?>
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".mysql_real_escape_string($zoekwoord)."%' ORDER BY datum DESC";
if ($res = mysql_query($sql) && mysql_num_rows($res) >= 1)
{
while ($row = mysql_fetch_array($res))
{
?><a href="<?php echo "?p=empty&s=blog&id=".$row['id']; ?>"><b><?php echo $row['titel']; ?></a>
</b>
<br />
<?php echo $row['samenvatting']; ?>
<p>
<?php
}
}
}
else {
?><p>Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.</b></p><?php
}
?>
Haha,
wat een puinhoop wordt het hé als je html en php door elkaar heen gebruikt!!
<?php
if(isset($_POST['searchBtn']))
{
$zoekwoord = $_POST['zoekterm'];
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".mysql_real_escape_string($zoekwoord)."%' ORDER BY datum DESC";
if ($res = mysql_query($sql) && mysql_num_rows($res) >= 1)
{
while ($row = mysql_fetch_array($res))
{
?><a href="<?php echo "?p=empty&s=blog&id=".$row['id']; ?>"><b><?php echo $row['titel']; ?></a>
</b>
<br />
<?php echo $row['samenvatting']; ?>
<p>
<?php
}
}
}
else {
?><p>Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.</b></p><?php
}
?>
Waarom zou je zo moeilijk doen? Of denk ik te makkelijk?
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
$zoekterm = mysql_real_escape_string($_POST['zoekterm']);
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".$zoekterm."%' ORDER BY datum DESC";
if(!$res = mysql_query($sql))
{
error_log(mysql_error());
print mysql_errno().": Er is iets fout gegaan.";
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.';
}
else
{
while($row = mysql_fetch_assoc($res))
{
echo "<a href=\"?p=empty&s=blog&id=".$row[id]."\"><b>".$row[titel]."</a></b><br />".$row[samenvatting]."<p>";
}}}
?>