Beste allemaal,

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.

mvg

Peter Arendse
Aha, en is dit dan voor mij van toepassing Blanche?
Want wij hebben het vorige gedeelte gedaan.



<?php
    include("db_werk.php");
	$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
    if (isset ($_GET['plaats'])) {
	    mysql_connect("$dbhost","$dbuser","$dbpass");
        $sql = "
            SELECT DISTINCT straat
            FROM straten
            WHERE straat LIKE '%" . mysql_real_escape_string ($_GET['straat']) . "%'
            ORDER BY straat ASC
            ";
        if ($res = mysql_query ($sql)) {
            if (mysql_num_rows ($res) > 0) {
                while ($row = mysql_fetch_assoc ($res)) {
                    echo '<p onclick="document.getElementById (\'straat\').value = this.innerHTML; document.getElementById (\'lijst\').innerHTML = \'\'">' . $row['straat'] . '</p>';
                }
            }
        }
    }
?> 


Ik snap eigenlijk geen hout van waar ik mee bezig ben, we moeten dit maar samen oplossen hoor!
Dat is zeker van toepassen. Alleen regel 4 moet $_GET['plaats'] wel $_GET['straat'] worden. Verder moet je ook dat onclick attribuut nog even uit de <p> tag halen. Dat zal nog niet werken in jouw situatie en kunnen we altijd later weer toevoegen...

Tenslotte is het een beetje overbodig om 2x een databaseverbinding te maken met mysql_connect().

Je zou je scriptje natuurlijk even kunnen testen door het eens aan te roepen. Dus bijvoorbeeld iets als

jouwsite.nl/stratenscriptje.php?straat=dorpsstraat
is dit niet wat je zoekt?
Pepin, dat lijkt er ook op, en volgens mij moet het ook zo iets worden he Blanche?
Het super mooiste zou nog zijn dat de sugestie van de gezochte straatnaam niet onder het invoerveld zou staan maar er in!
Maar laat ik eerst maar eens kijken of ik het scriptje hierboven aan de gang kan krijgen, want ik moet m uit de P tag halen, en het is al meteen weer een drama bij mij, zie:

Warning: Unexpected character in input: ''' (ASCII=39) state=1 in D:\wamp\www\werk\ajax_straatnamen.php on line 16

Parse error: syntax error, unexpected ';' in D:\wamp\www\werk\ajax_straatnamen.php on line 16



<?php
    include("db_werk.php");
	$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
    if (isset ($_GET['straat'])) {
	    mysql_connect("$dbhost","$dbuser","$dbpass");
        $sql = "
            SELECT DISTINCT straat
            FROM straten
            WHERE straat LIKE '%" . mysql_real_escape_string ($_GET['straat']) . "%'
            ORDER BY straat ASC
            ";
        if ($res = mysql_query ($sql)) {
            if (mysql_num_rows ($res) > 0) {
                while ($row = mysql_fetch_assoc ($res)) {
                    echo 'onclick="document.getElementById (\'straat\').value = this.innerHTML; document.getElementById (\'lijst\').innerHTML = \'\'' . $row['straat'] .';
                }
            }
        }
    }
?> 
Je hebt op regel 15 nu precies hetgeen laten staan dat je moest verwijderen :D

Daar wil je gewoon hebben
<?php
echo '<p>'.$row['straat'].'</p>';
?>
Gedaan, geen fout, maar ook geen straat in beeld, ik heb nu:

test_straat.php



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>AJAX suggest script</title>
    <script type="text/javascript">
    function ajaxFunction ()
    {
        var xmlHttp;
        var lijst = document.getElementById ('lijst');

        try
        {
            // Firefox, Opera 8.0+, Safari
            xmlHttp=new XMLHttpRequest ();
        }
        catch (e)
        {
            // Internet Explorer
            try
            {
            xmlHttp=new ActiveXObject ("Msxml2.XMLHTTP");
            }
            catch (e)
            {
                try
                {
                xmlHttp=new ActiveXObject ("Microsoft.XMLHTTP");
                }
                catch (e)
                {
                alert ("Your browser does not support AJAX!");
                return false;
                }
            }
        }
        xmlHttp.onreadystatechange=function ()
        {
        if (xmlHttp.readyState == 4)
        {
            lijst.display = '';
            lijst.innerHTML = xmlHttp.responseText;
        }
        }
        var get = document.getElementById ('straat').value;
        if (get.length > 0) {
            xmlHttp.open ("GET", "ajax_straatnamen.php?straat=" + get, true);
            xmlHttp.send (null);
        }
        else {
            lijst.display = 'none';
            lijst.innerHTML = '';
        }
    }
    </script>
    
    <style type="text/css">
        h1 {
            font: bold 14px verdana;
            color: #369;
        }
        p, input {
            font: 12px verdana;
            color: #639;
            padding: 3px;
            margin: 3px;
        }
        #form {
            position: relative;
        }
        #lijst {
            /*display: none;*/
            position: absolute;
            border: 1px solid #99f;
            left: 48px;
            background: white;
            z-index: 1000;
        }
        #lijst p {
            margin: 0px;
            padding: 2px;
            cursor: pointer;
        }
        #lijst p:hover {
            background: #ccf;
        }
        pre {
            margin: 20px;
            padding: 20px;
            border: 2px solid red;
        }
    </style>
</head>
<body>
    <h1>Plaatsnaam suggest</h1>
    <p>Typ de eerste paar letters van een plaatsnaam in Noord-Holland.</p>
    <p>Het script moet suggesties geven over plaatsnamen waarin de letters voorkomen.</p>
    <div id="form">
        <form name="myForm" action="#" method="post">
        <p>
            <label for="straat">plaats:</label>
            <input id="straat" name="straat" type="text" onkeyup="ajaxFunction ();">
            <input type="submit" value="verzenden">
        </p>
        </form>
        <div id="lijst">
        </div>
    </div>
    
    <?php
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            echo '<pre>';
            print_r ($_POST);
            echo '</pre>';
        }
    ?>

</body>
</html> 


en ajax_straatnamen.php



<?php
    include("db_werk.php");
    if (isset ($_GET['straat'])) {
	    mysql_connect("$dbhost","$dbuser","$dbpass");
        $sql = "
            SELECT DISTINCT straat
            FROM straten
            WHERE straat LIKE '%" . mysql_real_escape_string ($_GET['straat']) . "%'
            ORDER BY straat ASC
            ";
        if ($res = mysql_query ($sql)) {
            if (mysql_num_rows ($res) > 0) {
                while ($row = mysql_fetch_assoc ($res)) {
                   echo '<p>'.$row['straat'].'</p>';

                }
            }
        }
    }
?> 


en als ik in de browser invoer:
http://localhost/werk/ajax_straatnamen.php?straat=dorpsstraat

geen fouten, maar verder een leeg scherm!
Je controleert wel of je query gelukt is, maar je geeft nergens een foutmelding als de query mislukt. Voeg dus eens wat foutafhandeling toe aan dat scriptje dat de straten ophaalt...
@ Peter,

In het stukje code van ajax_straatnamen.php zie ik dat je wel connectie maakt met de DB maar geen tabel selecteerd?

Mis dus nog [php]mysql_select_db()[/php]
Inderdaad, krijg nu deze fout:

het ging fout bij het uitvoeren van SELECT DISTINCT straat FROM straten WHERE straat LIKE '%dorpsstraat%' ORDER BY straat ASC het script genereerde No database selected
Zoals Thijs al zei en ik wel een beetje verwachtte: 'No database selected'.

Kortom, nog even mysql_select_db() gebruiken om de juiste database te selecteren...

Tip: je include db_werk.php. Maak in dat bestandje dan ook alvast de verbinding en selecteer alvast de database. Dan hoef je dat niet in elk script te doen.

Reageren