Wie heeft of kent een goed werkend stratenherkenninsscript dat ik kan gebruiken voor mijn agenda om taxiritten in te voeren.
IK deel online een agenda met 4 collega's en wij voeren met z'n allen veel reserveringen in.
Dit vergt in de regel allemaal veel tijd en niet iedereen voert de straatnamen soms goed in.
Ik ben op zoek naar een soort systeem dat wanneer ik bijvoorbeeld bij het invoerveld "adres" de letter D invul, ik automatisch kan kiezen uit een lijst met alle straten in Zaanstad beginnende met een D.
Vul ik Do in, dat dan de mogelijkheden automatisch minder worden en het systeem alle straten laat zien beginnende met Do, om vervolgens uit de lijst die verschijnt, Dorpsstraat te kunnen selecteren en dat dat dan in het veld adres terecht komt.
Ik stel me zo voor dat ik in de database en paar tabellen erbij moet maken, en daar alle straten van Zaanstad moet invoeren.
Nu is het geval dat Zaanstad bestaat uit een aantal samengevoegde gemeenten en dat de Dorpstraat dus wel 3 keer voor kan komen.
Ik stel me zo voor dat ik dan een aparte tabel per deelgemeente moet maken enz enz.
Is er iemand van jullie dat ooit eens zo'n script ontwikkelt heeft, kent, of wil helpen(heel veel wil helpen om dit te realiseren.
Als 'do' de eerste letters van de straat moeten zijn, moet je je query iets aanpassen.
WHERE straat LIKE '%" . mysql_real_escape_string ($_GET['straat']) . "%'
wordt dan:
WHERE straat LIKE '" . mysql_real_escape_string ($_GET['straat']) . "%'
Als je verder dat klikken erin wilt en je letterlijk het scriptje zoals hierboven staat gebruikt, kun je dat onclick event, dat je eerder eruit gehaald had, er weer inzetten. Dat is namelijk toegepast op bovenstaand scriptje...
ps. Als je dit alles in je eigen script wilt inbouwen, dan moet je even op een andere toer gaan. Dan moet je namelijk eerst in je eigen script zorgen dat de AJAX request goed verloopt.
var xmlHttp;
function GetXmlHttpObject( handler ) {
var objXmlHttp = null;
if (navigator.userAgent.indexOf("Opera") >= 0) {
alert ("Opera is not supported i guess... use FF");
return;
}
if (navigator.userAgent.indexOf("MSIE") >= 0) {
var strName = "Msxml2.XMLHTTP"
if (navigator.appVersion.indexOf("MSIE 5.5") >= 0) {
strName = "Microsoft.XMLHTTP";
}
try {
objXmlHttp = new ActiveXObject(strName)
objXmlHttp.onreadystatechange = handler;
return objXmlHttp;
} catch(e) {
alert("Error. Scripting for ActiveX might be disabled");
return;
}
}
if (navigator.userAgent.indexOf("Mozilla") >= 0 ) {
objXmlHttp = new XMLHttpRequest();
objXmlHttp.onload = handler;
objXmlHttp.onerror = handler;
return objXmlHttp;
}
}
opsla als ajax.js en in de head van de pagina:
<script type = "text/javascript" src = "ajax.js"></script>
dan moet het lukken?
Oh Blanche,
IK vend het geweldig hoever we al gekomen zijn, maar ik mis nog iets.
Als ik de Dorpsstraat zoek, komt er 1 naam naar boven in het script.
Eigenlijk vind ik het handiger, als er achter de naam Dorpsstraat tevens tussen haakjes (Assendelft) of (Wormer) of (Oostknollendam) zou komen te staan, want om 05:00 uur ergens op het verkeerde adres voordtaan is geen feestje!
Al ik dit reeds achter de straatnaam in de tabel "straten" zet, en ik zoek op Dorpsstraat, komt hij dan met 2 verschillende opties of raakt het script dan in de war.
Of kan ik met een bepaalde code dit zowiezo al doen, dat alle gemeentenamen er tussenhaakjes achter staan?
Dit ga je inderdaad niet achter de straatnaam in de stratentabel zetten. Door middel van de koppeltabel kun je deze informatie namelijk uit de tabel gemeenten halen.
De query komt er dan zo uit te zien:
<?php
$sql = "
SELECT
s.straat
g.gemeente
FROM
straten AS s,
gemeenten AS g,
straten_gemeenten AS sg
WHERE
g.id = sg.gemeente_id
AND
sg.straat_id = s.id
AND
s.straat LIKE '".mysql_real_escape_string($_POST['straat']).'%'
";
?>
Vervolgens kun je na het fetchen de data bijvoorbeeld weergeven als:
<?php
echo '<p>'.$row['straat'].' ('.$row['gemeente'].')</p>';
?>
Wat betreft het afhandelen van AJAX requests: ik gebruik daar zelf het MooTools Framework voor. De code voor het afhandelen van een request wordt daarmee een stuk korter...
Het was inderdaad GET en een ' moest een " zijn:
<?php
include("db_werk.php");
if (isset ($_GET['straat'])) {
mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error());
mysql_select_db($db) or die(mysql_error());
$sql = "
SELECT
s.straat
g.gemeente
FROM
straten AS s,
gemeenten AS g,
straten_gemeenten AS sg
WHERE
g.id = sg.gemeente_id
AND
sg.straat_id = s.id
AND
s.straat LIKE '".mysql_real_escape_string($_GET['straat'])."%'
";
if ($res = mysql_query ($sql)) {
if (mysql_num_rows ($res) > 0) {
while ($row = mysql_fetch_assoc ($res)) {
echo '<p>'.$row['straat'].' ('.$row['gemeente'].')</p>';
Maak van die laatste regels eens dit:
<?php
if ($res = mysql_query ($sql)) {
if (mysql_num_rows ($res) > 0) {
while ($row = mysql_fetch_assoc ($res)) {
echo '<p>'.$row['straat'].' ('.$row['gemeente'].')</p>';
}
}
}
else
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
?>
dan wordt er tenminste een foutmelding gegeven als de query mislukt...