Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  15 2046
Hei.

Jeg holder å lage en side med medlemsregistrering og i den forbindelse ønsker jeg å kunne legge inn informasjon om adresse osv.

Jeg har en database med alle postnummerene og poststedene og jeg ønsker å kunne taste inn postnummeret også oppdaterer poststedet seg automatisk i en form. Har googlet for å prøve og finne en enkel løsning på dette men kommer ingen vei... Noen ideer?
Enten ved bruk av ajax eller php&mysql

Lage variabel, søke opp variabel, hente ut sted, printe sted. Simple as that
Trådstarter
34 0
Da jeg ønsker at dette skal skje idet du tabber deg til neste form må jeg vel nesten bruke ajax? Har googlet og lest guider om ajax men finner ikke noe om hvoradn jeg kan få den til å starte en spørring ved "onchange".. noen som har en kodesnutt ?
Er det ikke noe som heter onBlur eller noe?

Kode

<form id="b">
<input name="postnr" onkeyup="postnr('postnrdiv,b');" />
<div id="postnrdiv"></div>
</form>
javascript:

Kode

	
function postnr(a,b)
{
 var c = document.getElementById(a);
 var d=document.forms['vis'][b];
 var xmlHttp;
 try {
  xmlHttp=new XMLHttpRequest();
 } catch (e) {
  try {
   xmlHttp=new ActiveXObject("Msxm12.XMLHTTP");
  } catch (e) {
   try {
    xmlHttp=new ActiveXObject ("Microsoft.XMLHTTP");
   } catch (e) {
    alert ("Nettleseren din støtter ikke ajax");
    return false;
   }
  }
 } xmlHttp.onreadystatechange=function() {
  if (xmlHttp.readyState==4) {
   var q=xmlHttp.responseText;
   if (!q) c.innerHTML='\''+d.value+'\' postnummeret finnes ikke.';
   else c.innerHTML=q;
  }
 }
 var url = 'postnr.php?postnr=' + d.value;
 xmlHttp.open("GET",url,true);
 xmlHttp.send(null);			
}
postnr.php:

Kode

$postnr = htmlspecialchars(strip_tags($_GET['postnr']));

if (is_numeric($postnr)) {
        @mysql_connect ( ... );
        @mysql_select_db( ..database..);

        $sql = mysql_query ('select poststed from `postnummer` where postnr = '.$postnr.' limit 1');
        mysql_close();
        if (mysql_numrows ($sql)) echo mysql_result ($sql, 'poststed', 0);
}
Noe sånt?
Dette er jeg også ute etter.
Har prøvd å sette sammen scriptene på denne måten.

Kode

<body>

<script>
function postnr(a,b)
{
 var c = document.getElementById(a);
 var d=document.forms['vis'][b];
 var xmlHttp;
 try {
  xmlHttp=new XMLHttpRequest();
 } catch (e) {
  try {
   xmlHttp=new ActiveXObject("Msxm12.XMLHTTP");
  } catch (e) {
   try {
    xmlHttp=new ActiveXObject ("Microsoft.XMLHTTP");
   } catch (e) {
    alert ("Nettleseren din støtter ikke ajax");
    return false;
   }
  }
 } xmlHttp.onreadystatechange=function() {
  if (xmlHttp.readyState==4) {
   var q=xmlHttp.responseText;
   if (!q) c.innerHTML='\''+d.value+'\' postnummeret finnes ikke.';
   else c.innerHTML=q;
  }
 }
 var url = 'postnr.php?postnr=' + d.value;
 xmlHttp.open("GET",url,true);
 xmlHttp.send(null);            
}  
</script>

<?
	

$postnummer = htmlspecialchars(strip_tags($_GET['postnummer']));

if (is_numeric($postnummer)) {
	
include("../scripts/connect.php");


        $sql = mysql_query ('select poststed from `postnummer` where postnummer = '.$postnummer.' limit 1');
        mysql_close();
        if (mysql_numrows ($sql)) echo mysql_result ($sql, 'poststed', 0);
}  
?>


<form id="b">
<input name="postnummer" onkeyup="postnummer('postnummerdiv,b');" />
<div id="postnummerdiv"></div>
</form>  



</body>

Den henter ut poststedet hvis man skriver inn postnr og trykker på enter. Men jeg ønsker at det skal dukke opp automatisk når man tabber videre, hva gjør jeg feil for at det skal fungere sånn?
Lite kontroversiell
ticks's Avatar
Kan du ikke heller bare lagre informasjonen i et javascript-array og hente informasjonen derfra istedet for å bruke AJAX og mySQL? Virker som unødvendig mye jobb (og load) for å hente ut statisk informasjon.

Bruk onBlur() til å oppdatere feltet med poststed etter at postnummer er utfylt.
Sist endret av ticks; 17. februar 2009 kl. 13:07.
Forstod ikke helt hva du mener ticks?
Du kunne ikke satt sammen et lite script som gjør det du sier?

Alle postnrene ligger jo i databasen.
Sist endret av fredrikweb; 17. februar 2009 kl. 13:42.
Lite kontroversiell
ticks's Avatar
Hvor stor er denne databasen da? Om jeg ikke har misforstått så alt for meget så ser for meg noe slikt:

Kode

<script language="JavaScript">
function nummerTilSted(nummer) {

var postSted=new Array();
postSted[1234]="Oslo";
postSted[2345]="Trondheim";
postSted[3456]="Bergen";

return postSted[nummer];
}
</script>

<form>
Postnummer: <input type="text" id="nummer" onBlur="document.getElementById('sted').value = nummerTilSted(document.getElementById('nummer').value);">
<input type="text" id="sted" disabled>
</form>
Koden over fungerer. Skriv inn '1234' i feltet, og med en gang det mister fokus (du tabber til neste felt, f.eks.) så vil du få utputten 'Oslo' i feltet for poststed. Det er enkelt å legge til nye poststeder til listen, og da dette er informasjon som ikke endrer seg vil det ikke være nødvendig med egne databaser for å administrere det...

...såfremt jeg ikke misforstod fullstendig.
Sitat av ticks Vis innlegg
Kan du ikke heller bare lagre informasjonen i et javascript-array og hente informasjonen derfra istedet for å bruke AJAX og mySQL? Virker som unødvendig mye jobb (og load) for å hente ut statisk informasjon.

Bruk onBlur() til å oppdatere feltet med poststed etter at postnummer er utfylt.
Vis hele sitatet...
Og ha en js-array med 4574 elementer, istedenfor å bruke mysql til å hente ut det ene aktuelle?
Lite kontroversiell
ticks's Avatar
Innser ved nærmere ettertanke at det mest sannsynlig vil være mer kosteffektivt å allikevel gå veien AJAX/mySQL med tanke på antall postnummere. Tenkte ikke så langt. Uansett, koden som ql1rz postet (om korrekt) vil gjøre det dere ønsker: Lag et php-script som ene og alene spytter ut poststed ut fra GET-input av postnummer. Få AJAX til å kjøre mot skriptet du akkurat lagde ved OnBlur() og sett verdien av poststed til utputten du får. Om du har basiske kunnskaper om JS, AJAX og PHP burde det gå rimelig lett.

Metoden min er derimot fortsatt det mest effektive så lenge det ikke er -fullt- så mange elementer, og jeg mener det er fordel å få umiddelbar respons fra javascript enn å sitte å vente et sekund på AJAX-queries som kan i noen tilfeller gå galt. Gjelder brukeropplevelse

EDIT: hmm, basiske kunnskaper er flott, men basiskunnskaper er nyttigere.
Sist endret av ticks; 17. februar 2009 kl. 14:43. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
Hei igjen..

Jeg sliter fortsatt, det ser ikke ut som om jeg får funksjonen

Kode

function postnr(a,b)
{
 var c = document.getElementById(a);
 var d=document.forms['vis'][b];
 var xmlHttp;
 try {
  xmlHttp=new XMLHttpRequest();
 } catch (e) {
  try {
   xmlHttp=new ActiveXObject("Msxm12.XMLHTTP");
  } catch (e) {
   try {
    xmlHttp=new ActiveXObject ("Microsoft.XMLHTTP");
   } catch (e) {
    alert ("Nettleseren din støtter ikke ajax");
    return false;
   }
  }
 } xmlHttp.onreadystatechange=function() {
  if (xmlHttp.readyState==4) {
   var q=xmlHttp.responseText;
   if (!q) c.innerHTML='\''+d.value+'\' postnummeret finnes ikke.';
   else c.innerHTML=q;
  }
 }
 var url = 'postnr.php?postnr=' + d.value;
 xmlHttp.open("GET",url,true);
 xmlHttp.send(null);            
}
til å kjøre ved å bruke føgende form

Kode

<input name="postnr" onBlur="postnr('postnrdiv,b');"/>
<div id="postnrdiv"></div>
</form>

Gjør jeg noe feil, eller er det syntaks feil her?
z0p
uʍop ǝpısdn
z0p's Avatar
<input name="postnr" onBlur="postnr('postnrdiv','b');"/>

om jeg ser det rett, men jeg ville heller brukt:

<input name="postnr" onBlur="postnr(this);"/>

og

function postnr(element)
{
var postnummer = element.value;

xmlReq..
..
}
Sist endret av z0p; 17. februar 2009 kl. 18:06.
Mener du sånn som dette?

Kode

<? 

$postnummer = htmlspecialchars(strip_tags($_GET['postnr']));

if (is_numeric($postnummer)) {
    
include("../scripts/connect.php");


        $sql = mysql_query ('select poststed from `postnummer` where postnummer = '.$postnummer.' limit 1');
        mysql_close();
        if (mysql_numrows ($sql)) echo mysql_result ($sql, 'poststed', 0);
}  
?>



<script language="JavaScript">	
	
function postnr(element)
{
var postnummer = element.value;
xmlReq

 var xmlHttp;
 try {
  xmlHttp=new XMLHttpRequest();
 } catch (e) {
  try {
   xmlHttp=new ActiveXObject("Msxm12.XMLHTTP");
  } catch (e) {
   try {
    xmlHttp=new ActiveXObject ("Microsoft.XMLHTTP");
   } catch (e) {
    alert ("Nettleseren din støtter ikke ajax");
    return false;
   }
  }
 } xmlHttp.onreadystatechange=function() {
  if (xmlHttp.readyState==4) {
   var q=xmlHttp.responseText;
   if (!q) c.innerHTML='\''+d.value+'\' postnummeret finnes ikke.';
   else c.innerHTML=q;
  }
 }
 var url = 'postnr.php?postnr=' + d.value;
 xmlHttp.open("GET",url,true);
 xmlHttp.send(null);            
}  	

</script>


<form id="b">


<input name="postnr" onBlur="postnr(this);"/>    <div id="postnrdiv"></div>
    </form>

Men det ser ikke ut til at ajax/javascript funksjonen kjører, for poststedet spretter opp når jeg trykker enter.
Uansett som scriptet er med eller ikke.

Dessuten, skal jeg dele opp dette i flere sider? Eller kan jeg ha all koden i en fil som jeg kaller postnr.php ?

Takk for hjelpen så langt..
Som vanlig liker jeg jQuery:

Kode

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
<script type="text/javascript">
$(function() {
	$('#postal').change(function() {		
		if ( $(this).val() != "" ) {
			$.ajax({
				url  : 'test2.php', 
				type : 'GET', 
				data : 'postal='+ $(this).val(), 
				
				success : function(response) {
					$('#postoffice').val(response);
				}
			});
		}
	});
});
</script>


<form method="post">
  <label for="postal">Postnummer:</label>
  <input type="text" id="postal" name="postal" value="" />
  <input type="text" id="postoffice" name="postoffice" value="" readonly="readonly" />
</form>
test2.php

Kode

<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('test');

if ( isset($_GET['postal']) ) {
	$query = mysql_query( sprintf('SELECT `poststed` FROM `postal_no` WHERE `postnr` = %d LIMIT 1', $_GET['postal']) );
	
	if ( mysql_num_rows($query) > 0 ) {
		echo mysql_result($query, 0);
	} else {
		echo 'Unknown post office';
	}
}
?>
Testet og fungerer!

Edit: Om noen ønsker en sql-spørring over alle postnummer, fylker og kommuner i Norge, så har jeg det liggende.
Sist endret av ma10as; 17. februar 2009 kl. 18:39.
Tusen takk ma10as.. Du er dagens helt