php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 31.03.2009, 02:56  
Neuer Benutzer
 
Registriert seit: 31.03.2009
Beiträge: 11
rob782 befindet sich auf einem aufstrebenden Ast
Standard Umkreissuche erweitern

Hallo,

habe ein riesen Problem. Muss unbedingt bis jeute mittag diesen Code fertig haben. Ich habe ein Umkreissuche die auch ohne Probleme funktioniert. Die Sache ist, dass der Kunde noch eine zusätzliche Funktionn wünscht, dass die Mitglieder nach Typ sortiert und ausgegeben werden. Ich bekomme es einfach nicht hin, diese Funktion zusätzlich einzubauen. Am besten wäre es, wenn die Funktion direkt beim Suchen der PLZ auch direkt den Typ abfragt und abspeichert.
PHP-Code:
<?php

class Umkreissuche {
        var 
$Erdradius 6371;
        var 
$db db;
        var 
$table false;
        var 
$zeigeFehler true;

    function 
Umkreissuche($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);
        }
    }
        
    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;
    }
    
    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;
    }
    
    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;
    }

}
?>
Bitte helft mir, ich weis nicht, an welche Stelle der Code hinkommt.
Die Typen kommen von einem Drop-down Menu. Die Variablen werden ohne Probleme übernommen.
rob782 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 31.03.2009, 03:10  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Spezifizier doch mal Typsortierung Haben ja keine Ahnung von deinem Auftrag.
rudygotya ist gerade online  
Alt 31.03.2009, 03:23  
Neuer Benutzer
 
Registriert seit: 31.03.2009
Beiträge: 11
rob782 befindet sich auf einem aufstrebenden Ast
Standard

Die Umkreis Suche sucht Mitglieder die in Bestimmten PLZ Gebieten arbeiten. Die Typen sind: Arzt, Heilpraktiker, Apotheker, Sonstige und Alle. So bei der Daten eingabe wir die PLZ, der Umkreis und halt jetzt zusätzlich noch der Typ ausgewählt.

Hoffe ich habe es verständlich ausgedrückt.

Danke schon mal im vorraus.
rob782 ist offline  
Alt 31.03.2009, 03:47  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Und das steht schon alles in der DB? Oder in _REQUEST?Oder woher bekommst du die Infos??
rudygotya ist gerade online  
Alt 31.03.2009, 03:49  
Neuer Benutzer
 
Registriert seit: 31.03.2009
Beiträge: 11
rob782 befindet sich auf einem aufstrebenden Ast
Standard

Also die Daten sind schon komplett in der DB eingetragen auch die Typen, also eine Extra Spalte 'Typ' mit den einzelnen Typen wie Arzt, Heilpraktiker, usw.
Ich weis halt nicht, wie im in der Anweisung sagen soll, dass er dann halt nur Ärzte im Umkreis von 10km oder so anzeigt oder Apotheker.
rob782 ist offline  
Alt 31.03.2009, 03:50  
Neuer Benutzer
 
Registriert seit: 31.03.2009
Beiträge: 11
rob782 befindet sich auf einem aufstrebenden Ast
Standard

Hier noch der Code, der in der Mitglieder PHP steht:
PHP-Code:
<?php
$PLZ 
trim((get_magic_quotes_gpc()) ? stripslashes($_REQUEST['PLZ']) : $_REQUEST['PLZ']);
$Entfernung trim((get_magic_quotes_gpc()) ? stripslashes($_REQUEST['Entfernung']) : $_REQUEST['Entfernung']);
$Typ $_REQUEST['Typ'];
?>
                                        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
                                          <table align="center">
                                            <tr>
                                              <td width="128" class="Stil271">Postleitzahl:</td>
                                              <td width="230"><input type="text" name="PLZ" value="<?php echo htmlentities($PLZ); ?>" /></td>
                                            </tr>
                                            <tr>
                                              <td class="Stil271">Entfernung:</td>
                                              <td><select name="Entfernung">
                                                <option value="10" selected<?php if ($Entfernung == 10) echo ' selected="selected"'?>>10 km</option>
                                                <option value="20"<?php if ($Entfernung == 20) echo ' selected="selected"'?>>20 km</option>
                                                <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>
                                              </select></td>
                                            </tr>
                                            <tr>
                                              <td class="Stil271">Wenn suchen Sie ?</td>
                                              <td><select name="Typ">
                                                <option value="Arzt" selected selected<?php if($Typ == 'Arzt') {echo "selected=\"selected\"";} ?>>Arzt</option>
                                                <option value="Apotheker"<?php if($Typ == 'Apotheker') {echo "selected=\"selected\"";} ?>>Apotheker</option>
                                                <option value="Heilpraktiker"<?php if($Typ == 'Heilpraktiker') {echo "selected=\"selected\"";} ?>>Heilpraktiker</option>
                                              </select></td>
                                            </tr>
                                            <tr>
                                              <td>&nbsp;</td>
                                              <td><input type="submit" value="Suchen" /></td>
                                            </tr>
                                          </table>
                                        </form>
                                        <?php
if (!empty($PLZ) && ($Entfernung >= 10) && ($Entfernung <= 100)) {
    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'mitglieder');
        
$Suche->zeigeFehler false;
        
$Ergebnis $Suche->Suche($PLZ$Entfernung$Typ, array('Name''Status''Website''Strasse''PLZ''Ort''Typ'), 'Einwohner''DESC');
        if (
$Ergebnis === false) {
            echo 
'Entweder ist Ihre Postleitzahl ung&uuml;ltig oder es befindet sich kein ' htmlentities($Typ) . ' im gesuchten Umkreis!';
        } else if (!
count($Ergebnis)) {
            echo 
'Leider wurden kein ' htmlentities($Typ) . ' im Umkreis von ' htmlentities($Entfernung) . ' km um die Postleitzahl ' htmlentities($PLZ) . ' gefunden!';
        } else {
            echo 
'<ul>';
            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";
                if (!empty(
$Eintrag->Website)) {
                    echo 
'Website: <a href="' $Eintrag->Website '">' htmlentities($Eintrag->Website) . '</a><br />' "\n";
                }
                echo 
'</li>' "\n";
            }
            echo 
'</ul>';
        }
    }
}
?>
rob782 ist offline  
Alt 31.03.2009, 03:53  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
var $Erdradius = 6371;
Ist das ein schlechter Scherz? Suchst Du Apotheken in Namibia oder was?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 31.03.2009, 03:55  
Neuer Benutzer
 
Registriert seit: 31.03.2009
Beiträge: 11
rob782 befindet sich auf einem aufstrebenden Ast
Standard

Ne, das war ein fertiges Script, habe es nur für meine Bedürfnisse angepasst. Ich gebe zu, die DB ist etwas groß, aber der Kunde ist zufrieden. Die Suche bezieht sich nur auf Deutschland, Schweiz und Österreich...
rob782 ist offline  
Alt 31.03.2009, 03:55  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

geht mit nem mehrfach join. für mich ist jetzt allerdings zeit fürs bett und von deiner db struktur hab ich immer noch nicht viel plan.
Oder auch mit nem subselect arbeiten. Hoffentlich helfen dir die Stichworte was

viel glück
rudygotya ist gerade online  
Alt 31.03.2009, 03:58  
Neuer Benutzer
 
Registriert seit: 31.03.2009
Beiträge: 11
rob782 befindet sich auf einem aufstrebenden Ast
Standard

Hmm,

also die DB beinhaltet...ID, Name, Anschrift, Typ der Mitglieder.

Wenn ich jetzt z.B. die PLZ 12345 eingebe und einen Umkreis von 20km, dann gibt mir das Script alle Mitglieder aus der Datenbank, die im Umkreis von 20km um 12345 liegen. Das Problem ist, dass es alle aussgibt, also Ärzte, Apotheker, Heilpraktiker, usw....Durch die zusätzliche Funktion, soll es halt nur auf die einzelnen Typen beschränkt werden..
rob782 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
Formular mit ajax erweitern obi JavaScript, Ajax und mehr 7 31.03.2009 23:58
MySQL Tabelle erweitern? SilverVegeto Datenbanken 1 16.11.2008 15:22
PDOStatement erweitern webbies PHP-Fortgeschrittene 3 26.07.2008 13:10
Brauche Hilfe beim Skript erweitern mccracker HTML, Usability und Barrierefreiheit 0 24.02.2008 20:46
php Blätterfunktion erweitern killerboost PHP Tipps 2007 5 16.08.2007 08:46
Queries dynamisch um Tabellen Präfixe erweitern Basti Datenbanken 3 15.05.2006 16:32
einfaches galleryscript erweitern PHP Tipps 2006 16 22.02.2006 11:15
[Erledigt] SELECT COUNT(id) erweitern Datenbanken 12 09.12.2005 17:04
[Erledigt] Formulareingabe automatisch erweitern Datenbanken 5 18.10.2005 17:12
Suche jemanden der mein Forum erweitern kann Beitragsarchiv 7 27.07.2005 16:25
[DOM] Node um ein Child erweitern ??? HStev PHP Tipps 2005-2 1 04.07.2005 18:11
Suchfunktion erweitern, aber WIE??? Hilfe! PHP Tipps 2004-2 7 30.11.2004 07:59
Tabelle erweitern, Spalten hinzufügen GeorgM Datenbanken 3 24.11.2004 17:06
DOM-Klasse erweitern? Quadaptor PHP-Fortgeschrittene 8 23.10.2004 01:33
Mit php eine bestehende html-tabelle erweitern PHP Tipps 2004 1 12.07.2004 08:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
plz2koord, umkreissuche plz, power(\' . $ursprungx .\' - \' . $erdradius . \' * cos(coo.lat * pi() / 180) * cos(coo.lon * pi() / 1, php umkreissuche plz eigene db, umkreissuche php latitude, umkreissuche db, postleitzahlenumkreissuche 100km, umkreissuche php entfernungsangabe, plz2koord umkreissuche, webseite entfernung kilometer php, \while ($rd = mysql_fetch_object($re)) {\, if ($reihenfolge && strpos($spalten, $reihenfolge) !== false) umkreissuche, postleitzahlen umkreis suche

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:33 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