Ik ben bezig met een online shop en daarbij is de levering prijs afhankelijk van de postcode waarin geleverd word.

Het probleem is dat ze hier ook postcodes willen kunnen ingeven als 9***.

Dus als je dan een bestelling plaatst voor postcode 9000 moet hij de leveringsprijs van 9*** krijgen.

Maar het is ook mogelijk dat volgende in db staat:
9***=5euro
9100=4euro

Als er dan een levering op postcode 9100 gevraagd wordt moet leveringprijs van 9100 gegeven worden en niet van 9***.

Iemand enig idee hoe je hier kan aan beginnen?

Ik veronderstel met substrings werken.
Met postcodes werken is niet simpel, als waarschuwing vooraf.

Meestal werken postcode's met regio's. Zie:
http://www.tpgpost.nl/voorthuis/post_versturen/postcodes/streekpost.jsp
Ik stel voor dat je deze overneemt, en per regio een tarief instelt.

Met als tabel:

create table pc (
pc_start int(4),
pc_eind int(4),
pc_regionaam varchar(20),
pc_prijs float(4,2)
);

waarbij je pc_start, pc_eind en pc_regionaam uit de tabel van tpg overneemt. Vervolgens kan je per regio de prijs bepalen.

Vervolgens extraheer je de eerste 4 cijfers van de postcode:
select * from pc where pc_start > $eersteviercijfers AND pc_eind < $eersteviercijfers

Als je de tabel goed hebt ingevuld leverd dit 1 resultaat.

Grtz.

Arend
Dat zou ook een manier zijn geweest maar ik heb toch zelf een scriptje geschreven dat mij in staat steld om de postcode te gaan controleren met de postcodes in database. Dit houd ook rekening met * notatie.
<?
function checkMailCode2($mailcode)
{
$check=0;
$count=strlen($mailcode); //aantal tekens van postcode
$count2=0;
//Loop die zo vaak als het aantal tekens word overlopen
while($count2<$count)
{
//postcode gaan opsplitsen naar de count van de loop om zo stuk per stuk de postcodes te gaan elimeneren
$mailcode2=substr($mailcode,0,$count2+1);
//tellen hoeveel postcodes er zijn die beginnen met $mailcode2
$sql="select count(*) as aantal from Config_mail_codes where config_mc_mail_code LIKE '".$mailcode2."%'";
$mcs=mysql_fetch_assoc(mysql_query($sql));
if($mcs["aantal"]>1)
{
//meer dan één over dus dieper gaan
$count2++;
}elseif($mcs["aantal"]==1)
{
//één waarde dus niet dieper gaan dit klopt
$sql="select * from Config_mail_codes where config_mc_mail_code LIKE '".$mailcode2."%'";
$mc= mysql_fetch_assoc(mysql_query($sql));
return $mc;
$count2=$count;
}
else
{
//0 waardes dus klopt niet meer dus vorig nemen
//vorig kan meer dan 1 zijn geweest dus postcode met * gaan uitzoeken
//aantal * kes gaan tellen
$mailcode2=substr($mailcode,0,$count2);
$test=strlen($mailcode)-strlen($mailcode2);
$count3=0;
while($count3<$test)
{
$stars.="*";
$count3++;
}
$sql="select * from Config_mail_codes where config_mc_mail_code='".$mailcode2.$stars."'";
//$sql="select * from Config_mail_codes where config_mc_mail_code LIKE '".$mailcode2."%'";
$mc= mysql_fetch_assoc(mysql_query($sql));
return $mc;
$count2=$count;
}

}
return false;

}
?>

Het is misschien wat omslachtig maar het werkt ;)

Reageren