php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2010

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.02.2010, 15:57  
Neuer Benutzer
 
Registriert seit: 03.02.2010
Beiträge: 2
PHP-Kenntnisse:
Anfänger
miwo99 befindet sich auf einem aufstrebenden Ast
Standard Ergebnisse aus Umkreissuche mit opengeodb mit blätterfunktion

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">&nbsp;</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>&nbsp;</td>
        <td colspan="10">&nbsp;</td>
      </tr>
      <tr>
        <td align="center">&nbsp;</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>&nbsp;</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&uuml;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&uuml;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($this->Erdradius sin($Radius / ($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
miwo99 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.02.2010, 16:21  
Erfahrener Benutzer
 
Registriert seit: 28.03.2008
Beiträge: 1.847
HPR1974 wird schon bald berühmt werden
Standard

Zitat:
Zitat von miwo99 Beitrag anzeigen
Eine direkte Datenbankabfrage mit Blätterfunktion bekomme ich ja noch hin, aber eine Blätterfunktion aus dem Ergebnis einer Abfrage, da muss noch passen.
Wo isn da der Unterschied?
HPR1974 ist offline  
Alt 03.02.2010, 16:35  
Neuer Benutzer
 
Registriert seit: 03.02.2010
Beiträge: 2
PHP-Kenntnisse:
Anfänger
miwo99 befindet sich auf einem aufstrebenden Ast
Standard

Hallo HPR1974,
der Unterschied ist der, das ich mit einer direkten Abfrage alle Datensätze in der Blätterfunktion angezeigt bekomme. Ich möchte aber nur die haben, die beispielsweise als Postleitzahl die 10115 für Berlin haben und alle Vorverkaufsstellen in einem Umkreis von 2, 5 10 oder 15km liegen. Ich hoffe ich habe mich verständlich ausgedrückt.

Vielen Dank für Deine schnelle Antwort.

Grüße

Michael
miwo99 ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mysql Ergebnisse auf mehrere seiten aufteilen - linkfehler geschenkefinder Datenbanken 5 12.07.2009 20:41
MySQL Umkreissuche - Denkhilfe erbeten nickname0815 Datenbanken 1 26.04.2009 00:26
Problem mit Blätterfunktion , Seitennavigation t-stude PHP Tipps 2009 3 10.02.2009 20:52
Suchfunktion mit Blätterfunktion auf Ergebnisseite?! Hilfe! nicobischof PHP Tipps 2008 1 31.01.2008 13:42
einfache blätterfunktion gesucht miwo PHP Tipps 2008 30 04.09.2007 14:21
Google Maps statt OpenGeoDB? Plague PHP Tipps 2007 8 18.06.2007 11:43
match, against: ergebnisse filtern DarkThunder Datenbanken 4 30.03.2007 10:51
GeoDaten / OpenGeoDB tinchen PHP Tipps 2007 14 07.03.2007 11:07
Blätterfunktion in smartysystem PHP Tipps 2006 5 18.03.2006 22:19
Select - doppelte Ergebnisse ragman Datenbanken 3 26.01.2006 11:53
Blätterfunktion bei zwei Abfragen PHP Tipps 2005-2 8 13.06.2005 16:27
Blätterfunktion PHP Tipps 2005-2 6 12.06.2005 21:11
[Erledigt] MYSQL Abfrage -&gt; Ergebnisse auf anzahl per seite begrenze PHP Tipps 2004-2 2 21.11.2004 21:28
Ergebnisse von Abfragen einer Email zuweisen? PHP Tipps 2004 3 24.06.2004 16:57
ergebnisse mit blätterfunktion PHP Tipps 2004 11 12.06.2004 19:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-einsteiger/64147-ergebnisse-aus-umkreissuche-mit-opengeodb-mit-blaetterfunktion.html, telefon umkreissuche, opengeodb, opengeodb umkreissuche, plz umkreissuche php, schnelle umkreissuche, plz umkreissuche, php umkreissuche plz, umkreissuche telefon, opengeodb umkreissuche php, mysql umkreissuche, umkreissuche.class.php, postleitzahlen umkreissuche, opengeodb umkreis, umkreissuche php, php umkreissuche opengeodb, php postleitzahlen umkreissuche, php opengeodb umkreissuche, opengeodb php umkreissuche, umkreissuche opengeodb php

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:22 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum