Avatar billede Jesperlu Praktikant
20. april 2018 - 10:43 Der er 6 kommentarer

Script til pris via postnummer???

Hej

Jeg bruger 'wordpress' til min hjemmeside. Jeg yder en service, hvor jeg kører i hele landet og vil gerne have mine kunder til at kunne se en pris afhængigt af hvilket postnummer de bor i. Jeg vil derfor gerne oprette et felt, hvor der sker følgende: når man indtaster postnummer, kommer der automatisk by og pris frem. Har kæmpet en del med koder, og søgt plug-ins til wordpress, men kan ikke finde noget - er der hjælp at hente her?
Avatar billede claes57 Ekspert
20. april 2018 - 13:16 #1
hvis du kan nøjes med en grovopdeling, så kan et lille javascript rumme det - en opdeling som fx
x<3000    storkøbenhavn
3000<x<3700    nordsjælland
3700<x<3800    bornholm
3800<x<4000    færørerne og grønland
4000<x<4800    sjælland
4800<x<5000    lolland/falster
5000<x<6000    fyn
6000<x<7000    sønderjylland
7000<x<7500    midtjylland
7500<x<8000    vestjylland
8000<x<9000    østjylland
9000<x    nordjylland
evt med ekstra undtagelser: 9940 læsø, 8592 anholt, 8305 samsø, 79xx mors, og 77xx hører mere til nordjylland
Avatar billede olsensweb.dk Ekspert
20. april 2018 - 18:16 #2
>når man indtaster postnummer, kommer der automatisk by og pris frem.
du kan finde bynavnet via AJAX der forespørger data på en server på postnummeret.

hvis du selv hoster serveren kan du hente data fra postnord
https://www.postnord.dk/kundeservice/postnummerkort
under download klik på Download postnummerfil (xls)
henter filen fra https://www.postnord.dk/globalassets/danmark/.excel-docs/postnummerfil-til-download-01-2018.xlsx


du kan også hente bynavnet via et online API hos aws.dk, så slipper de for selv at opdaterer databasen, men der kan så være noget performance der spiller ind
http://dawa.aws.dk/dok/api/postnummer
eks http://dawa.aws.dk/postnumre/2000


endelig kan du have "basen" i javascript se https://www.computerworld.dk/eksperten/spm/951295?k=7869181



afstanden mellem 2 postnummer kræver du har deres Latitude og Longitude
hvilke kan hentes via https://www.gps-coordinates.org/
indtast feks "danmark postnummer 2000"

alternativt
http://latitudelongitude.org/dk/


kunne også være via gmaps
https://developers.google.com/maps/
https://www.labnol.org/internet/tools/measure-distance-between-cities-locations-google-maps/2220/


se også
https://stackoverflow.com/questions/27928/calculate-distance-between-two-latitude-longitude-points-haversine-formula



prisen kan være lidt vansklig at beregne:
lad og antage der 200 km mellem 2 postnummer, kunne der være bro / færge afgifter der også spiller ind ??,
eller regner du offentlig transport ??
Avatar billede Jesperlu Praktikant
20. april 2018 - 19:35 #3
Kanon begge to, tak for det.

Jeg havde tænkt, at jeg kunne knytte en pris op på postnummeret, altså at jeg selv i forvejen har udregnet prisen i det enkelte postnummer, som så viser sig når postnummeret indtastes, skal der fx så ligge en fil bagved, Excel eller noget?
Avatar billede claes57 Ekspert
20. april 2018 - 20:20 #4
I script bare en simpel tabel. Men husk at tage højde for ukendte postnumre så brugere ikke får en vild pris hvis nummer ikke er i tabellen. Og mht ikke brofaste øer, så bare sæt en fast tekst 'ikke brofaste øer tillægges færgepriser t/r'
Mht priser, så kan du fx tage 'hovedby' i de enkelte postnumre og med google maps finde km til dig (igen t/r) og sætte takst. Du kan have km-pris som en variabel, og have km i tabellen - så er det enkelt at justere priser.
Avatar billede olsensweb.dk Ekspert
20. april 2018 - 23:17 #5
>skal der fx så ligge en fil bagved, Excel eller noget?
jeg vil forslå du ligger det ind i en database.
jeg har downloadet  postnummerfil (xls) fra postnord se link i #2, og lagt den i en tabel, og tilføjet et felt mere der hedder pris, og fjernet ca 1450 postnummer for eks skyld


kig på nedenstående code, og lad dig inspirere

test tabel
CREATE TABLE `tbl_postnummer` (
  `postnr` varchar(4) DEFAULT NULL,
  `bynavn` varchar(25) DEFAULT NULL,
  `gade` varchar(33) DEFAULT NULL,
  `firma` varchar(58) DEFAULT NULL,
  `provins` varchar(6) DEFAULT NULL,
  `land` int(1) DEFAULT NULL,
  `pris` int(11) NOT NULL COMMENT 'angives i øre, alternativt brug decimal format'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `tbl_postnummer` (`postnr`, `bynavn`, `gade`, `firma`, `provins`, `land`, `pris`) VALUES
('0800', 'Høje Taastrup', 'Girostrøget 1', 'BG-Bank A/S', 'True', 1, 20000),
('0877', 'København C', 'Havneholmen 33', 'Aller Press (konkurrencer)', 'False', 1, 15000),
('1001', 'København K', 'Postboks', NULL, 'False', 1, 17000),
('1002', 'København K', 'Postboks', NULL, 'False', 1, 0),
('970', 'Sumba', NULL, NULL, 'False', 3, 0);


request.php
<?php
function GetCityName($conn, $id){
    $row = array("bynavn"=>"unknown", "pris"=>"kan ikke beregnes", "status" => 0 ) ;
    $sql = "select * from tbl_postnummer where postnr = $id and land = 1";     
    $rs = $conn->query($sql);
    if( $rs->num_rows>0){
        $row = $rs->fetch_assoc();               
        $row['status']=1;
        $rs->free();
    }       
    return $row;
}

$conn = new mysqli("localhost", "root", "", "test");
if (!$conn) {
        echo 'Der opstod en fejl.';
        exit();
}
$conn->set_charset("utf8");


$id = $_GET['id'];   
header("Content-type: text/html; charset=utf-8");
echo json_encode(GetCityName($conn, $id));
?>


html fil
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script type="text/javascript">
$( document ).ready(function() {
    function GetAjaxData(Val, OutputId){
        var url = "request.php";
        var params = "id=" + Val;
        $.ajax({
            type: "GET",
            url: url,
            data: params
        }).done(function (msg) {
            var ar = jQuery.parseJSON(msg);                               
            if(ar['status']==1){                   
                ar['pris']=ar['pris']/100;
            }
            txt = ar['bynavn'] + " koster " + ar['pris'];           
            $('#'+OutputId).html(txt);           
        });
    }       

   
    $('#postnumber').blur(function() {
        GetAjaxData(this.value, 'box2');
    });
});   
</script>
</head>
<body>
<form name="form1" action="#">
  <span id="box1">
  <input id = "postnumber" type="text">
</span>
</form>
<span id="box2">
<!-- place holder ajax data kommer her -->
</span>
</body>
</html>
Avatar billede Jesperlu Praktikant
21. april 2018 - 12:05 #6
Alletiders - tusind tak for input. Jeg prøver mig lidt frem med jeres forslag :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester