Moin,
print_r gibt immer das ganze Array aus (hier $erg). Die Ausgabe musst du halt aendern, wie du sie haben willst.PHP-Code:echo '<pre>', print_r($erg, true), '</pre>';
Ich habe hier eine Umkreissuche, welche auch an sich gut funktioniert.
Das Problem ist nur das, die Ergebnisse in dieser blöden Art und Weise ausgegeben werden:
Das ist der PHP Code dazu:HTML-Code:stdClass Object ( [ort] => Hamburg [Distance] => 0 ) stdClass Object ( [ort] => Hamburg [Distance] => 1.35221811138344 )
Was müsste ich ich dort ändern, damit z.B. nur die Suchergebnisse also z.B. die Postleitzahlen ausgegeben werden ?PHP-Code:<?php
// verbindung zur DB
include('../Connections/Test.php');
mysql_select_db($database_Test, $Test);
/* -------------------------- */
$suche = $_GET['suche'];
$plz = $_GET['post'];
$umkreis = $_GET['umkreis'];
if ($_GET['post'] == "" and $_GET['umkreis'] == "")
{ $plz = '01067' and $umkreis = 9000;}
if ($_GET['post'] == "" and $_GET['umkreis'] != "")
{echo "Wählen Sie einen Ort";}
if ($_GET['umkreis'] == "" and $_GET['post'] != "")
{echo "Wählen Sie einen Umkreis";}
else {
/* -------------------------- */
if (isset($_GET['submit'])) {
$sql_rad = mysql_query("SELECT geo_l, geo_b, ort FROM `cix_plz` WHERE `plz` = '$plz' OR `ort` = '$plz'");
$erg_rad = mysql_fetch_object($sql_rad);
// Umrechnung von GRAD IN RAD
$rad_l = $erg_rad->geo_l / 180 * M_PI;
$rad_b = $erg_rad->geo_b / 180 * M_PI;
// jetzt erfolgt die eigentliche Abfrage
$query = "SELECT ort,(
6367.41 * SQRT(2*(1-cos(RADIANS(geo_b)) *
cos(".$rad_b.") * (sin(RADIANS(geo_l)) *
sin(".$rad_l.") + cos(RADIANS(geo_l)) *
cos(".$rad_l.")) - sin(RADIANS(geo_b)) * sin(".$rad_b.")))) AS Distance
FROM cix_plz WHERE
6367.41 * SQRT(2*(1-cos(RADIANS(geo_b)) *
cos(".$rad_b.") * (sin(RADIANS(geo_l)) *
sin(".$rad_l.") + cos(RADIANS(geo_l)) *
cos(".$rad_l.")) - sin(RADIANS(geo_b)) * sin(".$rad_b."))) <= ".$umkreis."
AND `suchfeldtabelle` LIKE ('$suche')";
// die Ausgabe (vereinfacht)
$sql = mysql_query($query);
while( $erg = mysql_fetch_object($sql) ) {
echo '<pre>', print_r($erg, true), '</pre>';
$num_rows = mysql_num_rows($sql);
}}}
echo $num_rows;
?>
Moin,
print_r gibt immer das ganze Array aus (hier $erg). Die Ausgabe musst du halt aendern, wie du sie haben willst.PHP-Code:echo '<pre>', print_r($erg, true), '</pre>';
Gruss Guin
Mein Blog
Ich habe es geschafft. Ich kann nur leider diese Abfrage schwer weitermodifizieren. Da habe ich noch eine andere gefunden.
Die ist etwas umfangreicher. Von http://www.mamat-online.de
Ich schaffe es nicht die sql - Abfrage um ein weiteres Feld z.B. Suchfeld zu erweitern. Es soll halt noch ein zusätzliches Tabellenfeld abgefragt werden.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 = '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);
$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;
}
}
?>
Wie baut man das in die obige Abfrage ein ?
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)