Daten werden komisch ausgegeben

DANKE! das funktioniert jetzt :-)
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>&nbsp;</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&uuml;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&uuml;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;
	}

}
?>
 
Habe es geschafft, habe beiden Seiten zu einer gemacht. Nur dauert die Abfrage jetzt etwas lange, also so ca. 2 sekunden. Das scheint dann auch nicht so optimal zu sein. Aber egal, erstmal läuft es :-)
 
Zurück