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
Geweldig, dank je wel, het zit al in mijn lokale proefomgeving.
Ik heb inmiddels via een website alle straten van gemeente Zaanstad in aparte .txt bestanden zitten dus van bijv. Oostzaan, Zaandam, Zaandijk enz enz.
Is het mogelijk om met een bebaalde query al deze straten in één keer in de tabel straten te stoppen?
Dat zou waanzinnig veel typ werk besparen.
Of moet ik een webform maken en alles 1 voor 1 invoeren.
Kan ik dan ook in 1 en het zelfde formpje zowel de tabel gemeente, de tabel straten en de tabel straten_gemeenten in 1 keer vulen?
Nee, uiteraard kun je dat automatiseren! Je kunt het .txt bestand uitlezen en de gegevens met een query in de database zetten...

Ik neem aan dat elke straat in zo'n bestandje op een nieuwe regel staat? Als je een moment je hebt, wil ik wel even een opzetje voor je maken.
Natuurlijk BLanche, momentjes genoeg(is Blanche nu een meisjes naam of..gooi ik nu mijn eigen glazen in voor de hulp die je biedt, ha ha)
Maar op dit moment staan in de aparte tekstbestandjes alle adressen geschijden door een komma en een spatie, maar als dat anders moet is dat makkelijker aan te passen dan alles in typen, het staat nu zo:
1e Harenmakersdwstr, A F d Savornin Lohmanstr, A G Verbeekstraat, enz, enz,
(is Blanche nu een meisjes naam of..gooi ik nu mijn eigen glazen in voor de hulp die je biedt, ha ha)
Mijn nickname heeft een achtergrond, maar ik ben toch echt een man :)

Gescheiden door komma-spatie is geen probleem. Eens even wat maken...

ps. Zoiets zal het worden:
<?php
// Voorbeeld Zaandijk.txt, deze waarde handmatig aanpassen
$sGemeente = 'Zaandijk';

// Eerst gemeente toevoegen
$sql = "
INSERT INTO gemeenten (gemeente)
VALUES ('".$sGemeente."')
";

if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
else
{
$iGemeenteId = mysql_insert_id();
}

// Bestand uitlezen en wegschrijven naar database
$sContent = file_get_contents($sGemeente.'.txt');
$aStraten = explode(', ', $sContent);

foreach($aStraten as $sStraat)
{
$sStraat = mysql_real_escape_string($sStraat);
$sql = "
INSERT INTO straten (straat)
VALUES ('".$sStraat."')
";

if(!$res = mysql_query($sql))
{
if(mysql_errno() == 1062)
{
// Straatnaam bestaat al, selecteer ID
$sql = "
SELECT id
FROM straten
WHERE straat = '".$sStraat."'
";

if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
else
{
$row = mysql_fetch_assoc($res);
$iStraatId = $row['id'];
}
}
else
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
}
else
{
// Invoegen gelukt, selecteer id
$iStraatId = mysql_insert_id();
}

// Record invoegen in koppeltabel
$sql = "
INSERT INTO straten_gemeenten
(
straat_id,
gemeente_id
)
VALUES
{
".$iStraatId.",
".$iGemeenteId."
)";

if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
}
?>
Dit zou natuurlijk een stuk efficienter kunnen met bijvoorbeeld prepared statements. Maar aangezien dit een script is dat je in principe maar een aantal keer uitvoert, is dat geen probleem...

Dit script in dezelfde map plaatsen als de txt bestanden, even nog een database connectie in het script toevoegen en de waarde van de eerste variabele telkens even aanpassen.

Het is uit de losse pols geschreven, dus wellicht dat er nog een paar foutjes in zitten...
Wel is het zo als ik alle straten in 1 textfile stop, ze natuurlijk niet op alfabetische volgorde staan, maar dat is volgens mij niet nodig toch?
Peter Arendse schreef op 24.12.2007 20:22
Wel is het zo als ik alle straten in 1 textfile stop, ze natuurlijk niet op alfabetische volgorde staan, maar dat is volgens mij niet nodig toch?
Nope, dat is zeker niet nodig, sorteren doe je met de database...

Zie mijn vorige post voor een invoegscript ;)
Geweldig, ik ga het meteen poberen(ik zag me al tot diep in de nachten straten en id's in zitten voeren).
Hartelijk dank tot zover Meneer Blanche!
Peter Arendse schreef op 24.12.2007 20:29
ik zag me al tot diep in de nachten straten en id's in zitten voeren
Dat is inderdaad geen doen op kerstavond :)

Succes in ieder geval en ik hoor het wel als er problemen zijn...
Blanche, je script heeft de straten en de gemeente goed ingevord in de DB, alleen krijg ik nu 657 keer de volgende melding:
Notice: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{ 1, 0 )' at line 7
In query: INSERT INTO straten_gemeenten ( straat_id, gemeente_id ) VALUES { 1, 0 ) in D:\wamp\www\werk\invoer_straten.php on line 91

Het script heeft de tabel straten_gemeenten leeg gelaten!
Voor de goede orde en de goede regelvolgorde post ik even het script zoals het er nu uitziet:

<?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");
// Voorbeeld Zaandijk.txt, deze waarde handmatig aanpassen
$sGemeente = 'zaandam';

// Eerst gemeente toevoegen
mysql_connect("$dbhost","$dbuser","$dbpass");
$sql = "
    INSERT INTO gemeenten (gemeente)
    VALUES ('".$sGemeente."')
";

if(!$res = mysql_query($sql))
{
    trigger_error(mysql_error().'<br />In query: '.$sql);
}
else
{
    $iGemeenteId = mysql_insert_id();
}

// Bestand uitlezen en wegschrijven naar database
$sContent = file_get_contents($sGemeente.'.txt');
$aStraten = explode(', ', $sContent);

foreach($aStraten as $sStraat)
{
    $sStraat = mysql_real_escape_string($sStraat);
    $sql = "
        INSERT INTO straten (straat)
        VALUES ('".$sStraat."')
    ";
    
    if(!$res = mysql_query($sql))
    {
        if(mysql_errno() == 1062)
        {
            // Straatnaam bestaat al, selecteer ID
            $sql = "
                SELECT id
                FROM straten
                WHERE straat = '".$sStraat."'
            ";

            if(!$res = mysql_query($sql))
            {
                trigger_error(mysql_error().'<br />In query: '.$sql);
            }
            else
            {
                $row = mysql_fetch_assoc($res);
                $iStraatId = $row['id'];
            }
        }
        else
        {
            trigger_error(mysql_error().'<br />In query: '.$sql);
        }
    }
    else
    {
        // Invoegen gelukt, selecteer id
        $iStraatId = mysql_insert_id();
    }
    
    // Record invoegen in koppeltabel
    $sql = "
        INSERT INTO straten_gemeenten 
        (
            straat_id,
            gemeente_id
        )
        VALUES
        {
            ".$iStraatId.",
            ".$iGemeenteId."
        )";
    
    if(!$res = mysql_query($sql))
    {
        trigger_error(mysql_error().'<br />In query: '.$sql);
    }
}
?> 

Regel 83, de { moet een ( zijn...

ps. Zoals ik zei, er zullen misschien nog wel meer foutjes in zitten. Als je het nu weer probeert, zou het kunnen dat je foutmeldingen krijgt op de gemeenten. Misschien is het slimmer als je je database eerst weer even helemaal leeggooit...

Reageren