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.
OUTER is in mysql inderdaad optioneel Jan. Ik geloof dat het slagen van een LEFT JOIN ook nog van de gebruikte mysqlversie afhangt
Als ik de query gebruikt om alleen op één postcode te zoeken met het criteria LIKE dan werkt het wel. Het is dus iets met BETWEEN, misschien een ander veldkenmerk ofzo.
@ Klaasjan: tnx.
@ Andre: kun je wel alleen de postcodes uit je tabel laten rollen, dus zonder die JOIN in je query? En let er op dat je bij alle veldnamen even de tabelnaam ervoor zet.
Andre van Wingerden schreef op 27.10.2006 14:13
Als ik de query gebruikt om alleen op één postcode te zoeken met het criteria LIKE dan werkt het wel. Het is dus iets met BETWEEN, misschien een ander veldkenmerk ofzo.

Hoe zit het met spaties in de waarden die in POST zitten? En check ook op hoofd- en kleine letters.
<?php
$sql = "
SELECT
Jos_users.name,
cb_adres,
cb_postcode,
cb_plaats
FROM
jos_comprofiler
LEFT JOIN
Jos_users
ON
jos_comprofiler.id = Jos_users.id
WHERE
LEFT
(cb_postcode,4)
BETWEEN
LEFT('" . $_POST['postcode1'] . "',4)
AND
LEFT('" . $_POST['postcode2'] . "',4);
?>

Enzo?
@ Jan

Ik gebruik nu deze query.

<?php
$sql = "
SELECT jos_comprofiler.cb_adres, jos_comprofiler.cb_postcode, jos_comprofiler.cb_plaats
FROM jos_comprofiler
WHERE jos_comprofiler.cb_postcode BETWEEN '%" . $_POST['postcode1'] . "%' AND '%" . $_POST['postcode2'] . "%'";

?>

Ook dit zonder resultaat. Ik voer de postcodes in zonder spaties e.d. en ik zoek nu alleen op 4 cijfers dus kan geen verschil zitten in hoofd/kleine letters.
@Klaasjan

Met jouw querie werkt het! Bedankt dat jullie met me mee wilde kijken.
Al gebruik ik nu in de tabel ook weer letters bij de postcode blijft het werken.
Yep dat is de bedoeling in je tabal kun je inderdaad gewoon dit invoeren:

0000 AA

Hij vergelijk nu alleen de linkse 4 0000 met de linkse vier uit $_POST

Reageren