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>";
    }
?>


EDIT: foutje eruit gehaald.
Al gekeken of die de searchBtn vind?
Al gekeken of die de query gewoon goed uitvoert?
al echo gedaan van aantal rows?

error meldingen aanstaan in php?
Zet bovenaan je script:

error_reporting(E_ALL);
ini_set('display_errors', 1);


En verander:
$res = mysql_query($sql);

in:
$res = mysql_query($sql) or trigger_error(mysql_error());
@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.
Even stevig aan het knutselen geweest:

<?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.
SanThe schreef op 25.01.2010 21:10
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
}
?>
SanThe schreef op 25.01.2010 21:10
Regel 20 zal 4 fouten geven.
Script is lek => SQL-Injection.

Edit: Nu nog 3.


SanThe, kun je ook zeggen hoe ik aan die fouten moet komen? Het script werkt zonder fouten.

SQL injection en het laten zien van de sql bij een foutmelding verhelpen.
<?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
}
?>

Haha,
wat een puinhoop wordt het hé als je html en php door elkaar heen gebruikt!!
Jim schreef op 25.01.2010 21:30
<?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>";

    }}}
?>

Reageren