Select-Query will nicht
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
allerletzte zeile
ansatz
array
attribut
bestimmen
code
dank
datenbank
double
hilfe
kingdom
korrekte zeile
land
maximalen grenzwert
richtig billiger fehler
richtige zeile
tabelle
typ
zeile
zufall
-
Hi
Heut ist mein erster richtiger Tag mit PHP und MySQL, weil ich einem Freund bei einer Homepage helfen will. Daher hab ich von PHP so gut wie keine Ahnung, also entschuldige ich mich jetzt schonmal im vorraus, es ist wahrscheinlich ein richtig billiger Fehler ;)
<?php function IPtoCountry($IP) { $IPint = sprintf(\"%u\", ip2long($ip)); mysql_connect(\"mysql.lima-city.de\", \"***\", \"***\"); mysql_select_db(\"datenbank\"); $query = \"SELECT * FROM IPtoCountry \". \"WHERE IP_from <= $IPint \". \"AND IP_to >= $IPint \"; $result = mysql_query($query); if(mysql_num_rows($result) == 0) { $land = \"Unbekannt\"; } else { $array=mysql_fetch_array($result); $land = $array[\'drei\']; } return $land; } ?>
Das Skript oben soll für eine IP-Adresse mithilfe einer Datenbank von webhosting.info das zugeörige Land bestimmen.
Im Ansatz funktioniert es schon mal, die Query liefert eine Reihe, von der unten auch die einzelnen Teile ausgelesen werden können.
Aber das Problem ist, es gibt nicht die korrekte Zeile zurück, sondern die allerletzte Zeile in der Tabelle.
Und wenn ich das SELECT... Zeug direkt als SQL-Befehl in phpMyAdmin eingebe, natürlich mit $IPint ersetzt, gibt es die richtige Zeile zurück.
Hab mir zwei Tutorials zu diesem Thema angeguckt und ausprobiert, aber keins hat mir weitergeholfen.
Schonmal danke für Hilfe und Ideen.
Gruß
Mauzen
Beitrag geändert: 1.7.2008 16:31:50 von mauzen -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hm, wäre vielleicht hilfreich mal die Tabellenstruktur zu sehen... aber zumindest von dem, was da steht sieht alles korrekt aus...
-
Erstmal: Du solltest bei einer MYSQL Abfrage die Werte immer in Hochkommata setzten, sowie nicht die PHP Variable direkt reinschreiben:
$query = \"SELECT * FROM IPtoCountry WHERE IP_from <= \'\".$IPint.\"\' AND IP_to >= \'\".$IPint.\"\';\";
Beitrag geändert: 1.7.2008 18:14:31 von prog -
Also die Tabelle sieht so aus:
Typ Kollation Attribute
IP_from, double,
IP_to, double,
zwei, char(2), latin1_swedish_ci
drei, char(3), latin1_swedish_ci
name, varchar(50), latin1_swedish_ci
Importiert habe ich sie aus so einer .csv (ist einfacher reinzuschreiben, wie der Tabelleninhalt ;))
\"100663296\",\"121195295\",\"US\",\"USA\",\"UNITED STATES\"
\"121195296\",\"121195327\",\"IT\",\"ITA\",\"ITALY\"
\"121195328\",\"152305663\",\"US\",\"USA\",\"UNITED STATES\"
\"152305664\",\"152338431\",\"GB\",\"GBR\",\"UNITED KINGDOM\"
\"152338432\",\"167772159\",\"US\",\"USA\",\"UNITED STATES\"
\"184549376\",\"201620303\",\"US\",\"USA\",\"UNITED STATES\"
...
Insgesamt hat sie etwa 80.000 Zeilen bei 3mb Größe
Edit: @prog: passt doch, es wird geprüft, ob $IPint zwischen dem minimalen und dem maximalen Grenzwert liegt. Oder wie meinst du das?
Beitrag geändert: 1.7.2008 18:14:07 von mauzen -
Ich wusste doch, dass es ein doofer Fehler ist
Und zwar so doof, dass man gar nicht drauf achtet.
In Zeile 3 übergebe ich \"$ip\", habe aber \"$IP\", ist mir nur ganz durch Zufall aufgefallen, jetzt funktioniert alles wie es soll^^
Trotzdem danke für eure Hilfe
Mauzen -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage