Ik heb pas begonnen met php & MySQL en nu stuit ik op een klein probleem. Ik wil met een zoekfunctie leden selecteren met behulp van hun postcode.

Dit is de zoekpagina.

<?
echo "<HTML>\n
<HEAD><TITLE>Zoeken</TITLE></HEAD>
<BODY>

<p><b>Zoek in de database:</b></p>

<p>
<FORM METHOD=\"POST\" ACTION=\"resultaat.php\">
Postcode van: <input type=\"number\" name=\"postcode1\" size=\"6\">
tot: <input type=\"text\" name=\"postcode2\" size=\"6\"><br>
<input type=\"submit\" name=\"submit\" value=\"Zoeken\">
</p>

</BODY>
</HTML>";
?>

Dit is de resultaatpagina.

<?
//-- natuurlijk moet er eerst een connectie met de database worden gemaakt:
if (!@mysql_select_db("joomla", @mysql_connect("localhost", "root", "")))
{
echo "Er kan geen database connectie gemaakt worden.";
exit();
}

//-- $HTTP_POST_VARS[zoekterm] is de naam van het zoekveld in het formulier wat we
//-- hebben gemaakt in het vorige 'hoofdstuk'. Dit is dus de SQL code:
//-- $sql = "SELECT id,name FROM jos_users WHERE name LIKE '%$HTTP_POST_VARS[zoekterm]%'";

$sql = "SELECT Jos_users.name, jos_comprofiler.cb_adres, cb_postcode, jos_comprofiler.cb_plaats FROM jos_comprofiler INNER JOIN Jos_users ON jos_comprofiler.id = Jos_users.id WHERE cb_postcode BETWEEN '%$HTTP_POST_VARS[postcode1]%' AND '%$HTTP_POST_VARS[postcode2]%'";



//-- voer de SQL code uit en zet dit in een variabele zodat we zometeen kunnen
//-- kijken of er een resultaat is
$res = mysql_query($sql);

//-- bekijk nu of er een resultaat is, of het zoekwoord dus gevonden is of niet

{
//-- er is een resultaat gevonden, toon de resultaten via een while () loop
while ($row = mysql_fetch_array($res))
{
echo "<p><b>$row[name]</b><br>";
echo "$row[cb_adres]<br>";
echo "$row[cb_postcode]<br>";
echo "$row[cb_plaats]</p>";

}

echo "<a href=\"zoek.php\" title=\"zoek opnieuw\">zoek opnieuw</a><BR>";

}

?>

Als ik laat zoeken op enkel 1 postcode dan werkt het wel, maar met de functie BETWEEN lukt het niet. Wie kan mij helpen met dit 'waarschijnlijk' makkelijke vraag.
Nog één klein vraagje. Ik heb nu deze code:

<?php

echo "<p><b>$row[name]</b><br>";
echo "$row[cb_inaam]<br>";
echo "$row[cb_iadres]<br>";
echo "$row[cb_ipostcodeplaats]<br>";
echo "$row[cb_itelefoon]<br>";
echo "$row[cb_ifax]<br>";
echo "$row[cb_iemail]<br>";
echo "$row[cb_isite]<br>";
echo "</p>";
?>

In de ledenlijst komen nu lege regels omdat sommigen bijv. geen fax hebben. Bestaat er een soort IsNull functie om <br> niet actief te maken als een veld leeg is?
<?php

print '<p>';
foreach($row as $key => $value) {
print $key.' = '.$value.'<br />';
}
print '</p>';
?>
Deze functie zet nog steeds alle velden weer, ook als deze leeg is.
Ik heb het trouwens zo opgelost.

<?php
if (!empty($row[cb_inaam])) { echo "$row[cb_inaam]<br>";}
?>
<?php

echo '<p>';

foreach($row as $key => $value)
{
if(!empty($value))
{
echo $value.'<br />';
}
}

echo '</p>';
?>
stom, vergat ik helemaal het doel van de aanpassing(A)
Maak van $row[cb_inaam] eens $row['cb_inaam'], dus met quotes om de key. Verder horen variabelen nooit tussen quotes te staan, ook niet bij een echo:
<?php
if (!empty($row['cb_inaam'])) { echo $row['cb_inaam']."<br>";}
?>
Overigens had je een notice moeten krijgen op de key, blijkbaar heb je de error_reporting niet aan staan of op een te laag niveau staan. Pas daar mee op, het maakt debuggen erg lastig.

Reageren