Landcodes uit telefoonnummer halen

Status
Niet open voor verdere reacties.

mrprozac

Gebruiker
Lid geworden
16 jul 2008
Berichten
183
Goedendag,

Ik probeer een sms script op te bouwen die dmv van de ingevoerde telefoonnummer de land en netwerk moet op kunnen zoeken in de database. Ik heb de database al gevuld met de juiste records en heb een filter gemaakt die controlleerd of er wel degelijk een nummer is gekozen en niet een naam.

Maar nu wil ik de volgende uitvoeren:
  • Gebruiker typt een nummer in en klikt op verzenden/volgende
  • PHP kijkt in de database bij welke land/provider die telefoonnummer hoort door de eerste X nummers in de database te zoeken.
  • PHP haalt de land en de netwerk van de telefoonummer en geeft deze op de (volgende) pagina weer.


Maar de probleem is dat ik niet weet hoe ik dit moet/kan uitvoeren.

Ik denk aan de volgende manier, maar dit kan de processor en de database nogal belasten denk ik.

De gebruiker voer bijvoorbeeld de volgende nummer in 00937954853134856.
PHP stript de nummer totdat er 10 getallen overblijven, in dit geval 0093795485 en gaat alsvolgt zoeken in de database totdat die een resultaat te pakken heeft:
0093795485 = Geen resultaat
009379548 = Geen resultaat
...
009379 = Afghanistan

Deze code kan wat langer duren als de gebruiker bijvoorbeeld een nummer uit nederland invoert (0031), dus hierbij mijn vraag. Hoe kan ik dit het beste aanpakken?

Bij voorbaat dank,
mrprozac

De tabel met de landcodes ziet er alsvolgt uit
[SQL]
INSERT INTO `numberplan` (`dialcode`, `country`) VALUES
('0093', 'Afghanistan'),
('009370', 'Afghanistan Mobile'),
('009375', 'Afghanistan Mobile'),
('009377', 'Afghanistan Mobile'),
('009378', 'Afghanistan Mobile'),
('009379', 'Afghanistan Mobile'),
('00355', 'Albania'),
('0035566', 'Albania Mobile'),
('0035567', 'Albania Mobile'),
('0035568', 'Albania Mobile'),
('0035569', 'Albania Mobile'),
('00213', 'Algeria'),
('002135', 'Algeria Mobile'),
('002136', 'Algeria Mobile'),
('002137', 'Algeria Mobile'),
('002139', 'Algeria Mobile'),
('001684', 'American Samoa'),
('00684', 'American Samoa'),
('001684252', 'American Samoa Mobile'),
('001684254', 'American Samoa Mobile'),
('001684258', 'American Samoa Mobile'),
('00376', 'Andorra'),
('003763', 'Andorra Mobile'),
('003764', 'Andorra Mobile'),
('003766', 'Andorra Mobile'),
('00244', 'Angola'),
('0024491', 'Angola Mobile'),
('0024492', 'Angola Mobile'),
('0024493', 'Angola Mobile'),
('001268', 'Antigua and Barbuda');[/SQL]
 
Als je in de database ga zoeken kan je dit gewoon doen op dailcode.
Het duurt in computer tijd heel lang maar voor ons kan dit snel zijn, ligt eraan hoe snel je bij het gewenste resultaat ben.

Wat je misschien wel kan doen is in je database tabellen maken gesorteerd op landnamen. Dus een tabel a, b, c, d, etc.
Hierdoor moet je wel kijken in welke tabel je moet zoeken en dan ook op dailcode.

Hoop dat dit je helpt

groeten vreugde
 
"Wat je misschien wel kan doen is in je database tabellen maken gesorteerd op landnamen. Dus een tabel a, b, c, d, etc."

Dat is on-onderhoudbaar en helemaal niet nodig, zeker niet bij deze paar honderd records..
 
Het is helemaal niet on-onderhoudbaar aangezien de zaken al gescheiden zijn en je zelf zo makkelijker kan zoeken. Dat het in script vorm wat langer duurt dan alles in 1 tabel te onderhouden betekent niet dat het on-onderhoudbaar is.

Het kan een oplossing zijn, maar zoals bij iedere oplossing zijn er voor- en nadelen. Hierover moet je nadenken welke oplossing het beste past in het oorspronkelijke idee. Maar meteen een mogelijke oplossing glashard te discarden zonder enige arugmentatie is ook een beetje te veel van het goede

Er zijn altijd meerdere oplossingen voor ieder probleem. De kunst is de juiste keuze te maken en open te staan voor mogelijke oplossingen.
 
Als je in de database ga zoeken kan je dit gewoon doen op dailcode.
Het duurt in computer tijd heel lang maar voor ons kan dit snel zijn, ligt eraan hoe snel je bij het gewenste resultaat ben.

Wat je misschien wel kan doen is in je database tabellen maken gesorteerd op landnamen. Dus een tabel a, b, c, d, etc.
Hierdoor moet je wel kijken in welke tabel je moet zoeken en dan ook op dailcode.

Hoop dat dit je helpt

groeten vreugde

Dit gaat lastig denk ik omdat er meer informatie wordt opgeslagen per landcode, er word per landcode koopprijs en het aantal keer dat die code is gebruik opgeslagen. Althans dat laatste is de bedoeling.

De database is al gevuld met gegevens, maar ik weet niet hoe ik PHP zover kan krijgen om landcodes uit de telefoonnummer kan halen.

Ik kan niet de eerste 4 cijfers gebruiken (00xx) omdat er ook veel landen zijn die een landcode hebben die uit meer dan 2 cijfers bestaan, en ik moet ook de netnummer weten omdat de netwerken verschillen per netnummer (eerste 1/2 cijfers na de netnummers om precies te zijn) en de prijzen verschillen per netwerk.


"Wat je misschien wel kan doen is in je database tabellen maken gesorteerd op landnamen. Dus een tabel a, b, c, d, etc."

Dat is on-onderhoudbaar en helemaal niet nodig, zeker niet bij deze paar honderd records..

Het gaat hier om 4.993 records, die maandelijks bijgewerkt worden op basis van landcode en netnummer.
 
Kijk nu komt het echte probleem naar boven.

Wat je kan doen is ipv alleen een nummer, ook een land te laten kiezen daardoor het zoeken en filteren een stuk gemakkelijker wordt.

Maar dan heb ik nog een vraag voor jou.
Hoe weet je dat gebruikers geen + gebruiken ipv een 00 en of dat ze uberhaupt wel een landcode voor het nummer neer plaatsen, want het leuke van applicaties is dat het gebruikt wordt door verschillende personen met verschillende ideeen en kijkwijzes.

groeten vreugde
 
Kijk nu komt het echte probleem naar boven.

Wat je kan doen is ipv alleen een nummer, ook een land te laten kiezen daardoor het zoeken en filteren een stuk gemakkelijker wordt.

Maar dan heb ik nog een vraag voor jou.
Hoe weet je dat gebruikers geen + gebruiken ipv een 00 en of dat ze uberhaupt wel een landcode voor het nummer neer plaatsen, want het leuke van applicaties is dat het gebruikt wordt door verschillende personen met verschillende ideeen en kijkwijzes.

groeten vreugde

Ik dacht aan regular expressions die kijken naar de eerste 3 tekens, of daar een + of een 00 of een andere internationale prefix gebruiken.

Daarvoor wil ik dan ook Wikipedia of een andere bron raadplegen met betrekking tot internationale prefixes in andere landen. Als ik het goed heb gelezen gebruikt UK en Japan 010 voor internationale nummers bijvoorbeeld.

Maar als de persoon een lokaal (binnenlands) nummer wilt kiezen dan is het de bedoeling dat zij gewoon de lokale nummer invoeren en hun land (waar ze zicht bevinden) in hun profiel aangeven.
Dus als een gebruiker Nederland als zijn land aangeeft, dan worden nummers waar geen internationale prefixes worden gebruikt naar lokale nummers gestuurd.


Ik kan het natuurlijk verkeerd hebben, in dat geval mijn excuses. Dit zijn ideeën die ik probeer uit te werken door trial-and-error en onderzoek (als ik het gevonden krijg).
 
Nou dat zou best kunnen werken, ik denk wel dat je een goed algoritme zal moeten bedenken om te controleren of iemand een buitenlands nummer heeft ingevoerd of een lokaal nummer.

Maar dit kan je inderdaad doen aan de hand van het land wat hun profiel aangeeft. Maar dan moet je wel ervoor zorgen dat het land geupdate wordt wanneer een persoon zich in het buitenland bevindt en dit zelf niet heeft aangegeven
 
Nou dat zou best kunnen werken, ik denk wel dat je een goed algoritme zal moeten bedenken om te controleren of iemand een buitenlands nummer heeft ingevoerd of een lokaal nummer.

Maar dit kan je inderdaad doen aan de hand van het land wat hun profiel aangeeft. Maar dan moet je wel ervoor zorgen dat het land geupdate wordt wanneer een persoon zich in het buitenland bevindt en dit zelf niet heeft aangegeven

Ik denk dat ik met behulp van GeoIP een informatie bericht kan weergeven als de land in de profiel verschilt met de land van het IP, maar dit zou valse meldingen tevoorschijn halen als de gebruiker gebruikt maakt van bijv. een proxy of een VPN.

Of zie ik dit verkeerd?
 
Ik denk het zelf niet aangezien een proxy vaak gebruikt wordt om de onderliggende computers te controleren en websites te blokkeren en VPN's gebruikt wordt om een private netwerk aan te leggen
Hierdoor wordt hun IP-adres of plaats niet gewijzigd, want daarvoor wordt er gekeken naar de dichstbijzijnde DHCP server, wat ik geloof
 
Ik denk het zelf niet aangezien een proxy vaak gebruikt wordt om de onderliggende computers te controleren en websites te blokkeren en VPN's gebruikt wordt om een private netwerk aan te leggen
Hierdoor wordt hun IP-adres of plaats niet gewijzigd, want daarvoor wordt er gekeken naar de dichstbijzijnde DHCP server, wat ik geloof

In een zakelijk omgeving kan ik het begrijpen dat proxies voor die doeleinden wordt gebruikt, maar als men een Anonymous proxy gebruiken die de IP-adres van de bezoeker vervangt met de publieke IP adres van de proxy zelfs?

Op deze manier wordt er bijvoorbeeld gebruik gemaakt van diensten die in normale omstandigheden nier worden aangeboden aan de bezoeker. Bijvoorbeeld Hulu is normaal gesproken niet te bekijken buiten Amerika, maar met een Private Proxy of VPN dat in Amerika is gewestigd of een amerikaans IP heeft, kan de gebruiker wel gebruik maken van Hulu door zijn/haar IP-adres te vervangen met die van de proxy.
 
Dan denk ik dat zulke problemen zich toch kunnen voor blijven doen tenzij PHP daar iets voor heeft maar dat durf ik niet te zeggen
 
Dan denk ik dat zulke problemen zich toch kunnen voor blijven doen tenzij PHP daar iets voor heeft maar dat durf ik niet te zeggen

Dat zie ik dan wel, maar nu wil ik graag de probleem dat ik in mijn eerste post beschrijf oplossen, mocht daar geen oplossing voor zijn dan weet ik niet hoe ik verder moet omdat ik de landcode en netnummer uit moet kunnen halen zodat de prijzen aangegeven kunnen worden.

Door deze 'stap' van het proces moet ik dus de gebruiker laten zien hoeveel het kost om een sms te sturen naar de nummer dat is ingevoerd, of het netwerk/land waar dat nummer van afkomt.
 
Hmm, nou, ik denk dat je het wel op de manier kunt doen die je beschreef. Gewoon telkens een cijfertje eraf halen en dan weer zoeken. Als je database niet te groot is, en een beetje goed geordend, dan lijkt mij dat mysql er niet veel problemen mee heeft. PHP heeft er denk ik zoieso geen problemen mee :rolleyes:
 
Hmm, nou, ik denk dat je het wel op de manier kunt doen die je beschreef. Gewoon telkens een cijfertje eraf halen en dan weer zoeken. Als je database niet te groot is, en een beetje goed geordend, dan lijkt mij dat mysql er niet veel problemen mee heeft. PHP heeft er denk ik zoieso geen problemen mee :rolleyes:

De tabel/schema waar PHP doorheen moet zoeken is niet echt groot, het bevat hooguit 5000 records waar iedere record 5 gegevensvelden heeft (id, land, code, etc.).
Waar ik dus aan dacht was dat PHP een SQL script (bijv. SELECT land, landcode WHERE landcode IS xx) draait totdat die een resultaat heeft.

Maar hoe krijg ik php zover om bijv. een loop te draaien waarin de telefoonnummer steeds met een cijfer wordt afgekort en vervolgens de SQL opdracht uitvoert om te zoeken?
 
Klein OPZETJE (!)

PHP:
<?php

$telefoonnummer = $_POST['telefoonnummer'];
$landcode = substr($telefoonnummer, 0, 10);

$i = 0;
while($i < 10) {
if($i != 0) {
$landcode = substr($landcode, 0, -1);
}
$sql = mysql_query("SELECT * FROM tabelnaam WHERE landcode='".$landcode."'");

if(mysql_num_rows($sql) != 0) {
die();
}

$i++;
}

?>
 
Klein OPZETJE (!)

PHP:
<?php

$telefoonnummer = $_POST['telefoonnummer'];
$landcode = substr($telefoonnummer, 0, 10);

$i = 0;
while($i < 10) {
if($i != 0) {
$landcode = substr($landcode, 0, -1);
}
$sql = mysql_query("SELECT * FROM tabelnaam WHERE landcode='".$landcode."'");

if(mysql_num_rows($sql) != 0) {
die();
}

$i++;
}

?>

Hartelijk dank,

Dit is precies wat ik zocht en het werkt uitstekend.

Dank U :)
 
Let op hoor, de variabelen zijn nog niet beveiligd tegen injections :eek:

Ik heb een aantal kleine wijzigingen in de code gebracht en er een function() van gemaakt

PHP:
function numprice($telefoonnummer)
{
$landcode = substr($telefoonnummer, 2, 10);
 
$i = 0;
while($i < 10) {
if($i != 0) {
$landcode = substr($landcode, 0, -1);
}
$sql = mysql_query("SELECT * FROM numberplan WHERE dialcode=00$landcode");

if(mysql_num_rows($sql) != 0) {
while ($row = mysql_fetch_assoc($sql)) {
	$dialc=substr($row['dialcode'], 2);
	$sellprice=substr($row['sellprice'], 0, 2);
	$pricearr=array($dialc, $row['country'], $sellprice);
	return($pricearr);
}
die();
}
$i++;
}
}

Als ik het goed begrijp moet ik gebruik maken van mysql_real_escape_string(); om SQL Injections tegen te gaan?

Dus bijvoorbeeld:
PHP:
$password =$_POST['password'];
wordt
PHP:
$password = mysql_real_escape_string(htmlentities(trim($_POST['password'])));
 
Ik heb een aantal kleine wijzigingen in de code gebracht en er een function() van gemaakt

PHP:
function numprice($telefoonnummer)
{
$landcode = substr($telefoonnummer, 2, 10);
 
$i = 0;
while($i < 10) {
if($i != 0) {
$landcode = substr($landcode, 0, -1);
}
$sql = mysql_query("SELECT * FROM numberplan WHERE dialcode=00$landcode");

if(mysql_num_rows($sql) != 0) {
while ($row = mysql_fetch_assoc($sql)) {
	$dialc=substr($row['dialcode'], 2);
	$sellprice=substr($row['sellprice'], 0, 2);
	$pricearr=array($dialc, $row['country'], $sellprice);
	return($pricearr);
}
die();
}
$i++;
}
}

Als ik het goed begrijp moet ik gebruik maken van mysql_real_escape_string(); om SQL Injections tegen te gaan?

Dus bijvoorbeeld:
PHP:
$password =$_POST['password'];
wordt
PHP:
$password = mysql_real_escape_string(htmlentities(trim($_POST['password'])));

Exact ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan