Hallo liebe Gemeinde, mein Thema ist wahrscheinlich schon zu genüge erklärt worden. Mittlerweile habe ich einige Stunden damit verbracht, dieses Forum zu lesen. Ich bin aus den Einträgen aber nciht wirklich schlau geworden.
Folgendes Problem habe ich:
Es gibt zwei php-Dateien.
1. umkreissuche.php
2. umkreissuche.class.php
Die umkreissuche.php zeigt mir anhand einer plz aus einem dynamischen Umkreis von 2 bis 15 km alle Vorverkaufsstellen für Eventkarten an.
Das funktioniert auch alles tadellos.
Das blöde ist nur, das alle Ergebnisse untereinander stehen. Ich hätte gern eine Seitennavigation eingebaut, weiss aber leider nicht wie und wo ich die einbauen muss. Ich hoffe auf die Hilfe der Gemeinde.
Hier also nun der Code der beiden Dateien.
1. umkreissuche.php
PHP-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Vorverkaufsstellen</title>
</head>
<body>
<table width="495" border="0" align="center">
<tr>
<td align="center"> </td>
<td colspan="10" align="left"><font face="arial" size="2">Bitte geben Sie Ihre gewünschte Postleitzahl ein <br />
und wählen über die Auswahlliste die gewünschte Entfernung.<br /><br />
Das Ergebnis wird Ihnen nach Postleitzahl sortiert angezeigt.</font></td>
</tr>
<tr>
<td> </td>
<td colspan="10"> </td>
</tr>
<tr>
<td align="center"> </td>
<td colspan="10" align="left"><?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><font face="arial" size="2"><b>Postleitzahl:</b></font></td>
<td><input type="text" name="PLZ" value="<?php echo htmlentities($PLZ); ?>" /></td>
</tr>
<tr>
<td><font face="arial" size="2"><b>Entfernung:</b></font></td>
<td><select name="Entfernung">
<option value="2"<?php if ($Entfernung == 2) echo ' selected="selected"'; ?>>2 km</option>
<option value="5"<?php if ($Entfernung == 5) echo ' selected="selected"'; ?>>5 km</option>
<option value="10"<?php if ($Entfernung == 10) echo ' selected="selected"'; ?>>10 km</option>
<option value="15"<?php if ($Entfernung == 15) echo ' selected="selected"'; ?>>15 km</option>
</select></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Suche starten" /></td>
</tr>
</table>
</form>
<?php
if (!empty($PLZ) && ($Entfernung >= 2) && ($Entfernung <= 15)) {
echo '<h2><font face="arial" size="3">Ergebnis der Umkreissuche</font></h2>';
if (!preg_match('/^([0-9]{5})$/', $PLZ)) {
echo '<font face="arial" size="3">Das Format der eingegebenen Postleitzahl ist ungültig!</font>';
} else {
$db = mysql_connect('localhost', 'user', 'pass') or die(mysql_error());
mysql_select_db(db279323642, $db) or die(mysql_error());
require_once('umkreissuche.class.php');
$Suche = new Umkreissuche($db, 'tabelle');
$Suche->zeigeFehler = false;
$Ergebnis = $Suche->Suche($PLZ, $Entfernung, array('Name', 'Strasse', 'PLZ', 'Ort', 'Telefonnummer'), 'PLZ', 'ASC');
if ($Ergebnis === false) {
echo '<font face="arial" size="3">In der Umkreissuche ist ein Fehler aufgetreten. <br>
Haben Sie eine gültige Postleitzahl eingegeben?</font>';
} else if (!count($Ergebnis)) {
echo '<font face="arial" size="2">Leider wurden keine Ergebnisse im Umkreis von ' . htmlentities($Entfernung) . ' km um die Postleitzahl <b>' . htmlentities($PLZ) . ' </b>gefunden!</font>';
} else {
echo '<ul><font face="arial" size="2"';
foreach ($Ergebnis as $Eintrag) {
echo '<li><strong>' . htmlentities($Eintrag->Name) . '</strong><br />' . "\n";
echo htmlentities($Eintrag->Strasse) . '<br />' . "\n";
echo htmlentities($Eintrag->PLZ) . ' ' . htmlentities($Eintrag->Ort) . '<br />' . "\n";
echo htmlentities($Eintrag->Telefonnummer) . '<br /><br>' . "\n";
echo '</li>' . "\n"; }
echo '</font></ul>';
}
}
}
?>
</td>
</tr>
</table>
</body>
</html>
2. umkreissuche.class.php
PHP-Code:
<?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 = 'tabelle') {
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);
$sql = 'SELECT ' . $Spalten . '
FROM `' . $this->table . '`
WHERE
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;
}
}
?>
Eine direkte Datenbankabfrage mit Blätterfunktion bekomme ich ja noch hin, aber eine Blätterfunktion aus dem Ergebnis einer Abfrage, da muss noch passen.
Schon mal vielen Dank für Eure Mühe.
Liebe Grüße
michael