DANKE! das funktioniert jetzt
Aber nur wenn ich die Variable auf der gleichen Seite angebe.
Dieses Skript besteht aus zwei PHP-Seiten.
Aber nur wenn ich die Variable auf der gleichen Seite angebe.
Dieses Skript besteht aus zwei PHP-Seiten.
PHP:
<?php
define('__CFG_DB_SERVER', 'localhost');
define('__CFG_DB_NAME', 'testdatenbank');
define('__CFG_DB_USERNAME', 'pma');
define('__CFG_DB_PASSWORD', 'Hotelling');
?>
<?php
$PLZ = trim((get_magic_quotes_gpc()) ? stripslashes($_REQUEST['PLZ']) : $_REQUEST['PLZ']);
$Entfernung = trim((get_magic_quotes_gpc()) ? stripslashes($_REQUEST['Entfernung']) : $_REQUEST['Entfernung']);
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
<table>
<tr>
<td>Postleitzahl:</td>
<td><input type="text" name="PLZ" value="<?php echo htmlentities($PLZ); ?>" /></td>
</tr>
<tr>
<td>Entfernung:</td>
<td><select name="Entfernung">
<option value="50"<?php if ($Entfernung == 50) echo ' selected="selected"'; ?>>50 km</option>
<option value="100"<?php if ($Entfernung == 100) echo ' selected="selected"'; ?>>100 km</option>
<option value="200"<?php if ($Entfernung == 200) echo ' selected="selected"'; ?>>200 km</option>
</select></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Suche starten" /></td>
</tr>
</table>
</form>
<?php
if (!empty($PLZ) && ($Entfernung >= 1) && ($Entfernung <= 500)) {
echo '<h2>Ergebnis der Umkreissuche</h2>';
if (!preg_match('/^([0-9]{5})$/', $PLZ)) {
echo 'Das Format der eingegebenen Postleitzahl ist ungültig!';
} else {
$db = mysql_connect(__CFG_DB_SERVER, __CFG_DB_USERNAME, __CFG_DB_PASSWORD) or die(mysql_error());
mysql_select_db(__CFG_DB_NAME, $db) or die(mysql_error());
require_once('umkreissuche.class.php');
$Suche = new Umkreissuche($db, 'staedte');
$Suche->zeigeFehler = false;
$Ergebnis = $Suche->Suche($PLZ, $Entfernung, array('Name', 'Einwohner', 'Website', 'Strasse', 'PLZ', 'Ort'), 'Einwohner', 'DESC');
if ($Ergebnis === false) {
echo 'In der Umkreissuche ist ein Fehler aufgetreten. Haben Sie eine gültige Postleitzahl eingegeben?';
} else if (!count($Ergebnis)) {
echo 'Leider wurden keine Ergebnisse im Umkreis von ' . htmlentities($Entfernung) . ' km um die Postleitzahl ' . htmlentities($PLZ) . ' gefunden!';
} else {
echo '<ul>';
foreach ($Ergebnis as $Eintrag) {
//Ab Hier werden die Daten ausgegeben//
echo '<li><strong>' . htmlentities($Eintrag->Name) . '</strong><br />' . "\n";
echo number_format($Eintrag->Einwohner, 0, ',', '.') . ' Einwohner<br />' . "\n";
echo htmlentities($Eintrag->Strasse) . '<br />' . "\n";
echo htmlentities($Eintrag->PLZ) . ' ' . htmlentities($Eintrag->Ort) . '<br />' . "\n";
if (!empty($Eintrag->Website)) {
echo 'Website: <a href="' . $Eintrag->Website . '">' . htmlentities($Eintrag->Website) . '</a><br />' . "\n";
}
echo '</li>' . "\n";
}
echo '</ul>';
}
}
}
?>
PHP:
<?php
/* * * * * * * * * * * * * * * * * * * * * * * * *
Klasse Umkreissuche
(c) 2008 Philipp Mamat
http://www.mamat-online.de/
http://www.mamat-online.de/umkreissuche/opengeodb.php
* * * * * * * * * * * * * * * * * * * * * * * * */
class Umkreissuche {
// Erdradius in Kilometern
private $Erdradius = 6371;
// mysql link identifier
private $db;
// Datentabelle
private $table = false;
// Fehler zeigen?
public $zeigeFehler = true;
public function __construct($db, $table = 'vereine') {
if (!is_resource($db) || get_resource_type($db) != 'mysql link') {
trigger_error('Keine MySQL-Ressource übergeben', E_USER_ERROR);
}
$this->db = $db;
$this->table = $table;
// leere Koordinaten in Tabelle füllen
$sql = 'SELECT `ID`, `PLZ`
FROM `' . $this->table . '`
WHERE
`KoordX` = "0"
AND `KoordY` = "0"
AND `KoordZ` = "0"
';
$re = mysql_query($sql, $this->db);
while ($rd = mysql_fetch_object($re)) {
if (!$this->Plz2Koord($rd->PLZ, $lon, $lat)) {
if ($this->zeigeFehler) {
trigger_error('Postleitzahl ' . $rd->PLZ . ' konnte nicht zugeordnet werden', E_USER_NOTICE);
}
continue;
}
$this->Kugel2Kartesisch($lon, $lat, $x, $y, $z);
$sql = 'UPDATE `' . $this->table . '`
SET
`Longitude` = "' . $lon . '",
`Latitude` = "' . $lat . '",
`KoordX` = "' . $x . '",
`KoordY` = "' . $y . '",
`KoordZ` = "' . $z . '"
WHERE
`ID` = "' . (int)$rd->ID . '"
LIMIT 1
';
mysql_query($sql, $this->db);
}
}
public function Kugel2Kartesisch($lon, $lat, &$x, &$y, &$z) {
$lambda = $lon * pi() / 180;
$phi = $lat * pi() / 180;
$x = $this->Erdradius * cos($phi) * cos($lambda);
$y = $this->Erdradius * cos($phi) * sin($lambda);
$z = $this->Erdradius * sin($phi);
return true;
}
public function Plz2Koord($PLZ, &$lon, &$lat) {
$sql = 'SELECT
coo.lon,
coo.lat
FROM geodb_coordinates AS coo
INNER JOIN geodb_textdata AS textdata
ON textdata.loc_id = coo.loc_id
WHERE
textdata.text_val = "' . mysql_real_escape_string($PLZ, $this->db) . '"
AND textdata.text_type = "500300000"
LIMIT 1';
$re = mysql_query($sql, $this->db);
if (mysql_num_rows($re) != 1) {
return false;
}
list($lon, $lat) = mysql_fetch_row($re);
return true;
}
public function Suche($PLZ, $Radius, $Spalten = array(), $Reihenfolge = false, $Richtung = 'ASC') {
if (!is_array($Spalten) || count($Spalten) == 0) {
$Spalten = '*';
} else {
$Spalten = '`' . implode('`, `', $Spalten) . '`';
}
if (!$this->Plz2Koord($PLZ, $lon, $lat)) {
if ($this->zeigeFehler) {
trigger_error('Postleitzahl ' . $PLZ . ' konnte nicht zugeordnet werden', E_USER_NOTICE);
}
return false;
}
$this->Kugel2Kartesisch($lon, $lat, $UrsprungX, $UrsprungY, $UrsprungZ);
$suchfeld = 'hallo'; //Hier habe ich es angegeben, es muss aber mittels Textfeld auf die obere Seite...
$sql = 'SELECT ' . $Spalten . '
FROM `' . $this->table . '`
WHERE frei = "'.$suchfeld.'" AND
KoordX >= ' . ($UrsprungX - $Radius) . '
AND KoordX <= ' . ($UrsprungX + $Radius) . '
AND KoordY >= ' . ($UrsprungY - $Radius) . '
AND KoordY <= ' . ($UrsprungY + $Radius) . '
AND KoordZ >= ' . ($UrsprungZ - $Radius) . '
AND KoordZ <= ' . ($UrsprungZ + $Radius) . '
AND POWER(' . $UrsprungX .' - KoordX, 2)
+ POWER(' . $UrsprungY .' - KoordY, 2)
+ POWER(' . $UrsprungZ .' - KoordZ, 2)
<= "' . pow(2 * $this->Erdradius * sin($Radius / (2 * $this->Erdradius)), 2) . '"';
if ($Reihenfolge && strpos($Spalten, $Reihenfolge) !== false) {
$Richtung = (strtoupper($Richtung) == 'DESC') ? 'DESC' : 'ASC';
$sql .= "\n" . 'ORDER BY `' . $Reihenfolge . '` ' . $Richtung;
}
$re = mysql_query($sql, $this->db);
$result = array();
while ($rd = mysql_fetch_object($re)) {
$result[] = $rd;
}
return $result;
}
}
?>