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
Heb hem leeg gegooid en het veranderd, maar krijg nu 658 keer de volgende melding:
Notice: Cannot add or update a child row: a foreign key constraint fails (`taxikalf/straten_gemeenten`, CONSTRAINT `straten_gemeenten_ibfk_2` FOREIGN KEY (`gemeente_id`) REFERENCES `straten_gemeenten` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
In query: INSERT INTO straten_gemeenten ( straat_id, gemeente_id ) VALUES ( 2, 0 ) in D:\wamp\www\werk\invoer_straten.php on line 90

Volgens mij blijft de tabel straten_gemeenten leeg, want als ik over verkennen ga in phpmyadmin krijg ik een rode kruis te zien.
(maar ik ben superblij met je hulp hoor!!!)

EDIT: wat mij wel opviel is dat in de tabel gemeenten, de eerste id 0 is, en in straten de eerste id 2 is?
Heb je anders eens zo'n bestandje met straten? Dan zal ik eens kijken...

ps. Ik zie nu dat in mijn SQL dump er geen auto_increment op gemeenten.id staat, die moet je nog even toevoegen.

pps. Heb het even getest, en dan moet het script inderdaad werken...
Blanche, het heeft gewerkt, alle straten zitten nu in mijn test omgeving.
Nu komt denk ik het moeilijkste punt, hoe gaan we het nu werkend maken in bijv. mijninvoer.php.
Zodat wanneer ik dus een A in typ, ook werkelijk alle straatnamen met de A naar boven komen.
Dit is natuurlijk het uiterste, want normaal gesproken zal ik 2 o f 3 letters in typen om de juistenaam naar boven te krijgen om het aantal records aanzienlijk te verkleinen.
Ik post even mijn invoer.php.

<?php
require_once "prepend.php";
if ($_SESSION['user'] == null) {
 require "form.php";
} else {
    $user = $_SESSION['user'];
  	 
}
if (!check_auth_user($user,'expert')) return;	
include("header.html");
include("db_werk.php");
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
if(isset($_POST['invoeren'])) {
$datum= sprintf (
        '%02d-%02d-%02d %02d:%02d:00',
        $_POST['jaar'],
        $_POST['maand'],
        $_POST['dag'],
        $_POST['uur'],
        $_POST['min']
        );
$nacht=$_POST[nacht];
$soort=$_POST[soort];
$dag =  $_POST['dag']; 
$maand =  $_POST['maand'];
$jaar =  $_POST['jaar'];
$uur = $_POST['uur'];
$min = $_POST['min'];
$tijd = $uur .':'. $min;
$van = $_POST[van];
$naar = $_POST[naar];
$naam = $_POST[naam];
$aantal = $_POST[aantal];
$bedrag = $_POST[bedrag];
$telefoonnummer = $_POST[telefoonnummer];
$vluchtnummer = $_POST[vluchtnummer];
$opmerking = $_POST[opmerking];
$sql=" INSERT into werk (datum,nacht,soort,van,naar,naam,aantal,bedrag,telefoonnummer,vluchtnummer,opmerking,user) VALUES ('$datum','$nacht','$soort','$van','$naar','$naam','$aantal','$bedrag','$telefoonnummer','$vluchtnummer','$opmerking','$user')";
$res=mysql_db_query("$db","$sql",$mysql_id);

$recipient="[email protected],[email protected],[email protected],[email protected]";
       $subject="Invoer Database Zaanlandgroep";
		   $header="From: " . $user . "\r\n";
       $mail_body ="Deze ritopdracht of Schipholreservering is op " . date("d-m-Y") . " om " . date("H:i") . " uur ingevoerd door " . $user ."\n\n";
       $mail_body.="Datum: " . $dag ."-".$maand."-".$jaar."\n";
       $mail_body.="Tijd: " . $tijd . "\n";
       $mail_body.="Nacht: " . $nacht . "\n";
       $mail_body.="Soort: " . $soort . "\n";
	   $mail_body.="Van: " . $van . "\n";
	   $mail_body.="Naar: " . $naar . "\n";
	   $mail_body.="Naam: " . $naam . "\n";
	   $mail_body.="Aantal: " . $aantal . "\n";
	   $mail_body.="Bedrag: " . $bedrag . "\n";
	   $mail_body.="Telefoonnummer: " . $telefoonnummer . "\n";
	   $mail_body.="Vluchtnummer: " . $vluchtnummer . "\n";
       $mail_body.="Opmerking: " . $opmerking . "\n\n ---- Einde Schipholreservering ----";
	   
mail($recipient,$subject,$mail_body,$header);

$relative_url = 'index.php';
header("Location: http://".$_SERVER['HTTP_HOST']
                          .dirname($_SERVER['PHP_SELF'])
                          ."/".$relative_url);

}
else {
ob_end_flush(); 

?>
<center>
<form action="<?php echo $_SERVER[PHP_SELF];?>" method='post'>
<div align="left">
<table border="1" cellspacing="1" style="border-collapse: collapse" bordercolor="#000066" width="100%" cellpadding="5">
<tr>
<td colspan="3" bgcolor="#B5CBEF" height="17" width="100%" bordercolor="#FFFFFF" background="tile_back.gif">
<font face="Verdana" size="2" color="#FFFFFF"><img border="0" src="nav_m.gif" width="8" height="8">
<font face='Verdana' size=2 color='#FFFFFF'><b>
<!- You can add a form title here -->
&nbsp;</font><font face="Verdana" size="2" color="#000066">Voer hier de reserveringen in:</font>
<p align="left/><font face="Verdana" size="2" color="#FFFFFF"></td>
</tr><tr><td height="30" width="55" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<img border="0" src="bc_new.gif" width="28" height="28"></td>
  <td height="30" width="189" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana" size="2"><span class="style1">Datum:</span></td><td height="30" width="189" bgcolor="#EFF3F7" bordercolor="#FFFFFF" class="split-date-wrap" >
<input type="text" class="w2em" id="date-1-dd" name="dag" value="" maxlength="2" size="2"/><label for="date-1-dd"></label>
<input type="text" class="w2em" id="date-1-mm" name="maand" value="" maxlength="2" size="2"/><label for="date-1-mm"></label>
<input type="text" class="w4em split-date" id="date-1" name="jaar" value="" maxlength="4" size="4"/><label for="date-1"></label></class>
</td>                
</tr><tr><td height="30" width="55" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<img border="0" src="bc_new.gif" width="28" height="28"></td>
  <td height="30" width="189" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana" size="2"><span class="style1">Tijd:</span></td>
  <td height="30" width="469" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana"><input name='uur' type=text size=2 maxlength="2">:<input type=text name='min' size=2 maxlength="2"></td></tr><tr><td height="30" width="55" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<img border="0" src="bc_new.gif" width="28" height="28"></td>
  <td height="30" width="189" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana" size="2"><span class="style1">D/N:</span></td>
  <td height="30" width="469" bgcolor="#EFF3F7" bordercolor="#FFFFFF"><font face="Verdana">
      <select name='nacht'><option value='n.v.t.'>n.v.t.<option value='nacht ma/di'>nacht ma/di<option value='nacht di/wo'>nacht di/wo<option value='nacht wo/do'>nacht wo/do<option value='nacht do/vrij'>nacht do/vrij<option value='nacht vrij/zat'>nacht vrij/zat<option value='nacht zat/zon'>nacht zat/zon<option value='nacht zon/ma'>nacht zon/ma</select> </tr><tr><td height="30" width="55" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<img border="0" src="bc_new.gif" width="28" height="28"></td>
  <td height="30" width="189" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana" size="2"><span class="style1">Soort:</span></td>
  <td bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana">
 <select name='soort'>
      <option value='Ritopdracht'>Ritopdracht</option>
      <option value='Schipholreservering'>Schipholreservering</option>
      <option value='Mededeling'>Mededeling</option>
    </select></td></tr><tr><td height="30" width="55" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<img border="0" src="bc_new.gif" width="28" height="28"></td>
  <td height="30" width="189" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana" size="2"><span class="style1">Van:</span></td>
  <td height="30" width="469" bgcolor="#EFF3F7" bordercolor="#FFFFFF"><font face="Verdana">
    <label>
    <input type="text" size= "50"name="van" />
    </label></td>
    </tr>
<tr><td height="30" width="55" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<img border="0" src="bc_new.gif" width="28" height="28"></td>
  <td height="30" width="189" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana" size="2"><span class="style1">Naar:</span></td>
  <td height="30" width="469" bgcolor="#EFF3F7" bordercolor="#FFFFFF"><font face="Verdana">
    <label>
    <input type="text" size= "50"name="naar" />
    </label></td>
    </tr>
	<tr><td height="30" width="55" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<img border="0" src="bc_new.gif" width="28" height="28"></td>
  <td height="30" width="189" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana" size="2"><span class="style1">Naam:</span></td>
  <td height="30" width="469" bgcolor="#EFF3F7" bordercolor="#FFFFFF"><font face="Verdana">
    <label>
    <input type="text" size= "50"name="naam" />
    </label></td>
    </tr>
	<tr><td height="30" width="55" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<img border="0" src="bc_new.gif" width="28" height="28"></td>
  <td height="30" width="189" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana" size="2"><span class="style1">Aantal personen:</span></td>
  <td bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana">
 <select name='aantal'>
   <option value="n.v.t.">n.v.t.</option>
   <option value="1 pers.">1 pers.</option>
   <option value="2 pers.">2 pers.</option>
   <option value="3 pers.">3 pers. </option>
   <option value="4 pers.">4 pers.</option>
    </select></td></tr>
	<tr><td height="30" width="55" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<img border="0" src="bc_new.gif" width="28" height="28"></td>
  <td height="30" width="189" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana" size="2"><span class="style1">Bedrag:</span></td>
  <td bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana">
 <input name="bedrag" type="text" size="7" maxlength="7"></td></tr>
 	<tr><td height="30" width="55" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<img border="0" src="bc_new.gif" width="28" height="28"></td>
  <td height="30" width="189" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana" size="2"><span class="style1">Telefoonnummer:</span></td>
  <td bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana">
 <input name="telefoonnummer" type="text" size="30" maxlength="30"></td></tr>		
	<tr><td height="30" width="55" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<img border="0" src="bc_new.gif" width="28" height="28"></td>
  <td height="30" width="189" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana" size="2"><span class="style1">Vluchtnummer:</span></td>
  <td bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana">
 <input name="vluchtnummer" type="text" size="8" maxlength="8" ></td></tr>		
	<tr><td height="30" width="55" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<img border="0" src="bc_new.gif" width="28" height="28"></td>
  <td height="30" width="189" bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana" size="2"><span class="style1">Opmerking:</span></td>
  <td bgcolor="#EFF3F7" bordercolor="#FFFFFF">
<font face="Verdana">
 <input name="opmerking" type="text" size="50" ></td></tr>	
<tr><td colspan="3" bgcolor="#B5CBEF" height="25" width="737" background="tile_sub.gif"><p align="center"><font face="Verdana" size="2"><input type=submit name= 'invoeren'value='bevestigen'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type=reset value='reset'></font></td></tr>
</table>
</div>
</form> 
</center>
<?php
}
include("footer.html");
?>


Ik zal je even uitleggen hoe ik werk.
Bij het invoeren van een taxirit in de DB, stuurt het script ook een mail naar mij en mijn collega's wat en wanneer er iets is ingevoerd, dit is een extra controlle op ons zelf om iedereen te laten weten dat er een bepaalde rit op een bepaaldedatum en tijd is bijgekomen.
Dit zelfde doe ik bij het bewerken van een een reeds bestaande rit, en het verwijderen van een bepaalde rit(alhoewel dat nog niet perfect is omdat ik niet voor elkaar krijg welke rit wn met welke gegevens er dan wel verwijderd is omdat ik niets post, en het email-gedeelte de variabelen overneemt als er daadwerkelijk iets gepost word, maar dat voor later zorg)
De eerste stap van het ontwikkelen van deze functionaliteit is het aanmaken van de pagina die de request naar de database verzorgt en de namen teruggeeft...

Het scriptje zal dus een input parameter moeten accepteren, hier kiezen we een GET variabele voor die in de url zetten. Vervolgens zal het scriptje een query uitvoeren aan de hand van deze variabele, de gegevens uitlezen en teruggeven. Dat teruggeven doe je dmv een simpele echo, deze response vang je namelijk straks op met je AJAX request.

De output die je wilt krijgen kun je bijvoorbeeld in het volgende formaat zetten:

<p>Straatnaam1</p>
<p>Straatnaam2</p>
<p>Straatnaam3</p>

ps. Misschien overbodig, maar even voor de duidelijkheid: dit scriptje draait dus in een heel ander bestand dan waar je bovenstaande code in hebt staan.
Hey Blanche,

Is het mogelijk om deze fuctionaliteit in te passen in de bovenstaande code?
Daar zit nl. het invoerveld in van het ophaaladres en het bestemmingsadres.
Of werkt dit systeem net als het kalendertje bij een datepicker?
Peter Arendse schreef op 25.12.2007 13:35
Is het mogelijk om deze fuctionaliteit in te passen in de bovenstaande code?
Dat is de tweede stap. Maar daarvoor heb je eerst een aparte pagina nodig die de juiste output bij een bepaalde input genereert.

Input: deel van een straatnaam
Output: alle mogelijke straten

In de tweede stap ga je met je AJAX request de input namelijk aan deze pagina geven en de output van die pagina opvangen en verwerken...
Ah, ik dacht dat er iets mogelijk was dat wanneer je een letter intikt, dat dat het sein naar de database kon zijn om de desbetreffende gegevens al op te halen.
Over Ajax weet ik helemaal niets, ja dat dat mijn club is die schandalig de boot in is gegaan tegen Excelcior.
IK heb een boekje over mysql gehad gisteren, misschien vind ik daar iets over wat jij beschrijft.
Peter Arendse schreef op 25.12.2007 14:33
Ah, ik dacht dat er iets mogelijk was dat wanneer je een letter intikt, dat dat het sein naar de database kon zijn om de desbetreffende gegevens al op te halen.


Dat is inderdaad mogelijk met AJAX.
Jan Koehooorn had een tijdje geleden dit gepost:


<!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 ('plaats').value;
        if (get.length > 0) {
            xmlHttp.open ("GET", "ajax_plaatsnamen.php?plaats=" + 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="plaats">plaats:</label>
            <input id="plaats" name="plaats" 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> 




<?php
    require 'db_config.php';
    if (isset ($_GET['plaats'])) {
        $sql = "
            SELECT DISTINCT plaats
            FROM ckvwijzer_instellingen
            WHERE plaats LIKE '%" . mysql_real_escape_string ($_GET['plaats']) . "%'
            ORDER BY plaats ASC
            ";
        if ($res = mysql_query ($sql)) {
            if (mysql_num_rows ($res) > 0) {
                while ($row = mysql_fetch_assoc ($res)) {
                    echo '<p onclick="document.getElementById (\'plaats\').value = this.innerHTML; document.getElementById (\'lijst\').innerHTML = \'\'">' . $row['plaats'] . '</p>';
                }
            }
        }
    }
?> 


Ik snap dat ik iets moet maken om de gegevens van de straten uit de db te halen wat lijkt op dat onderste stuk code, toch Thijs en Blanche?
Je, dat is inderdaad die code.

Reageren