Bestimmte Werte werden nicht in die MySql DB geschrieben

dropdown

Mitglied
Hi,

ich habe ein Formular, mit dem ich 3 Werte in eine MySql DB schreibe.
HTML:
<form action="addtodb.php" method="post" id="form">
Nick: <input name="nick" type="text" size="30" id="nick"/>
IP: <input name="ipadress" type="text" size="30" id="ip"/>
AKA: <input name="aka" type="text" size="30" id="aka"/>
<input type="submit" value="Add to DB" id="button"/>
</form>

Der PHP Code für die DB:
PHP:
<?PHP
include ("db.php");

$result = mysql_query("INSERT INTO `test` (nick,ipadress,aka)
VALUES	    ('$_POST[nick]','$_POST[ipadress]','$_POST[aka]')");


if ($result) {

 	echo "Alles OK."; }
  	
	else {
  die(mysql_error()); }
  mysql_close ($db);?>

Bis hierhin ist noch alles ok. Die drei Werte werden in die DB geschrieben.

Jetzt kommt aber der (für mich) schwierigere Teil.
Ich hatte vorhin in einem anderen Thread ( http://www.tutorials.de/forum/php/354287-ip-aus-db-auslesen-und-land-stadt-lokalisieren.html ) eine Frage, die mir beantwortet wurde.
Ich will über den Dienst ( http://ipinfodb.com/ip_location_api.php ) mittels IP, zwei Werte auslesen, und diese dann erneut in meine eigene DB schreiben.

Das will ich quasi nacheinander Ausführen (mit der datei addtodb.php, die im Forumlar übergeben wird).
Die Reihenfolge wäre also so:

1.) Mittels Formular die Werte nick, ip und aka in meine DB schreiben.
2.) Über den externen Dienst (mit meiner soeben eingetragenen IP) die Werte "Country name" und "Region name" auslesen, und diese zwei Werte dann in meine DB schreiben.

Das hier ist der Code von der oben genannten Seite:
PHP:
<?php
function locateIp($ip){
	$d = file_get_contents("http://www.ipinfodb.com/ip_query.php?ip=$ip&output=xml");
 
	//Use backup server if cannot make a connection
	if (!$d){
		$backup = file_get_contents("http://backup.ipinfodb.com/ip_query.php?ip=$ip&output=xml");
		$answer = new SimpleXMLElement($backup);
		if (!$backup) return false; // Failed to open connection
	}else{
		$answer = new SimpleXMLElement($d);
	}
 
	$country_code = $answer->CountryCode;
	$country_name = $answer->CountryName;
	$region_name = $answer->RegionName;
	$city = $answer->City;
	$zippostalcode = $answer->ZipPostalCode;
	$latitude = $answer->Latitude;
	$longitude = $answer->Longitude;
	$timezone = $answer->Timezone;
	$gmtoffset = $answer->Gmtoffset;
	$dstoffset = $answer->Dstoffset;
 
	//Return the data as an array
	return array('ip' => $ip, 'country_code' => $country_code, 'country_name' => $country_name, 'region_name' => $region_name, 'city' => $city, 'zippostalcode' => $zippostalcode, 'latitude' => $latitude, 'longitude' => $longitude, 'timezone' => $timezone, 'gmtoffset' => $gmtoffset, 'dstoffset' => $dstoffset);
}
 
//Usage example
$ip = "74.125.45.100";
$ip_data = locateIp($ip);
 
echo "IP : " . $ip_data['ip'] . "\n";
echo "Country code : " . $ip_data['country_code'] . "\n";
echo "Country name : " . $ip_data['country_name'] . "\n";
echo "Region name : " . $ip_data['region_name'] . "\n";
echo "City : " . $ip_data['city'] . "\n";
echo "Zip/postal code : " . $ip_data['zippostalcode'] . "\n";
echo "Latitude : " . $ip_data['latitude'] . "\n";
echo "Longitude : " . $ip_data['longitude'] . "\n";
echo "Timezone : " . $ip_data['timezone'] . "\n";
echo "GmtOffset : " . $ip_data['gmtoffset'] . "\n";
echo "DstOffset : " . $ip_data['dstoffset'] . "\n";
?>

Hier muss die IP Adresse rein, die ich mit dem Forumlar in meine DB geschrieben habe:
PHP:
//Usage example
$ip = "74.125.45.100";
$ip_data = locateIp($ip);

Momentan steht die da ja noch statisch drin. Müsste ich also irgendwie meine $ipadress Variable einbauen (bloß wie?).

Dann denke ich, das ich den Arraywert $ip_data['country_name'] und $ip_data['region_name'] in neue Variablen speichern muss (die Namen, die ich in meiner DB angelegt habe. Wäre also dann $region und $country).
Und diese dann wieder in die DB schreiben.
PHP:
$result = mysql_query("INSERT INTO `test` (region,country)
VALUES	    ('$_POST[region]','$_POST[country]')");

So die Theorie.
Ich bin auch kein Profi in Sachen PHP. Weiß also nicht so genau, ob mein Weg der Richtige ist, und wie ich das überhaupt umsetzen kann.
Ich bräuchte also nach dem
PHP:
//Usage example
etwas hilfe.
Mache schon ewig dran rum und bekomme es nicht hin.

So, das war ganz schön viel Code und Text :)
Vielleicht weiß jemand Rat.

Danke und Gruß
 
Hier muss die IP Adresse rein, die ich mit dem Forumlar in meine DB geschrieben habe:
PHP:
//Usage example
$ip = "74.125.45.100";
$ip_data = locateIp($ip);

Momentan steht die da ja noch statisch drin. Müsste ich also irgendwie meine $ipadress Variable einbauen (bloß wie?).
So?
PHP:
$ip = $_POST[ipadress];
Dann denke ich, das ich den Arraywert $ip_data['country_name'] und $ip_data['region_name'] in neue Variablen speichern muss (die Namen, die ich in meiner DB angelegt habe. Wäre also dann $region und $country).
Und diese dann wieder in die DB schreiben.
PHP:
$result = mysql_query("INSERT INTO `test` (region,country)
VALUES	    ('$_POST[region]','$_POST[country]')");
Du willst einen Update machen....
PHP:
$sql = 	"UPDATE test 
		SET 
			region = '{$ip_data['region_name']}',
			country = '{$ip_data['country_name']}'
		WHERE ipadress = '{$ip}';";
$result = mysql_query($sql);

Also etwa so:
PHP:
<?php
	//TODO: hier die Funktion locateIp() einbinden. Am besten in eine eigene
	//Datei und mit include einbinden
	
	$ip = $_POST[ipadress];
	$nick = $_POST[nick];
	$aka = $_POST[aka];
	
	$sql = 	"INSERT INTO test 
				(nick,ipadress,aka)
			VALUES
				('{$nick}','{$ip}','{$aka}');";
	$result = mysql_query($sql); 
	
	$ip_data = locateIp($ip);
	
	$sql = 	"UPDATE test 
			SET 
				region = '{$ip_data['region_name']}',
				country = '{$ip_data['country_name']}'
			WHERE ipadress = '{$ip}';";
	$result = mysql_query($sql);
?>

Aber ehrlich. Zuerst einfügen und dann anpassen ist sehr unperformant. AM besten gleich alles mit dem ersten Insert regeln
PHP:
<?php
	//TODO: hier die Funktion locateIp() einbinden. Am besten in eine eigene
	//Datei und mit include einbinden
	
	$ip = $_POST[ipadress];
	$nick = $_POST[nick];
	$aka = $_POST[aka];
	$ip_data = locateIp($ip);
	
	$sql = 	"INSERT INTO test
				(nick,ipadress,aka, region, country)
			VALUES
				('{$nick}','{$ip}','{$aka}', '{$ip_data['region_name']}', '{$ip_data['country_name']}');";
	$result = mysql_query($sql); 
?>
 
Genial ! Habe es zwar noch nicht ausprobiert, aber wenn ichs mir so anschaue, macht es sinn.
Ich hab da total komisches Zeug probiert.
Aber ehrlich. Zuerst einfügen und dann anpassen ist sehr unperformant. AM besten gleich alles mit dem ersten Insert regeln
Diese Idee ist mir nicht gekommen.
Da fehlt noch die Erfahrung.
Wusste garnicht, das ich das mit einem Mal alles bearbeiten kann.


PHP:
<?php
	$ip = $_POST[ipadress];
	$nick = $_POST[nick];
	$aka = $_POST[aka];
	$ip_data = locateIp($ip);
	
	$sql = 	"INSERT INTO test
				(nick,ipadress,aka, region, country)
			VALUES
				('{$nick}','{$ip}','{$aka}', '{$ip_data['region_name']}', '{$ip_data['country_name']}');";
	$result = mysql_query($sql); 
?>
Diese Sache hätte ich so bestimmt nicht hinbekommen.
Danke nochmal. Werde ich nachher testen.

EDIT: Hat wunderbar geklappt. Kann sein, das ich evtl. noch ne Frage. Aber für den Moment bin ich zufrieden :)
 
Zuletzt bearbeitet:
Zurück