2009-07-24 5 views
0

Ich arbeite an einem PHP-Code für mein soziales Netzwerk, was ich vorhabe ist auf Benutzeranmeldung oder Profilaktualisierung Ich nehme dort Postleitzahl, die sie eingeben und Yahoo zu suchen da Breite und Logit von dort Postleitzahl Ich werde dann diese Werte zu dort Benutzer MySQL Tabelle speichern, die später verwendet werden, um Benutzer innerhalb X Menge von Meilen von ihnen zu finden. Hilfe mit PHP und XML für Yahoo Service

<?PHP 
function yahoo_geo($location) { 
    $q = 'http://api.local.yahoo.com/MapsService/V1/geocode'; 
    q .= '?appid=rlerdorf&location='.rawurlencode($location); 
    echo $q; 
    libxml_use_internal_errors(true); 
    $xml = simplexml_load_file($q); 
    if(!is_object($xml)) return false; 
    $ret['precision'] = (string)$xml->Result['precision']; 
    foreach($xml->Result->children() as $key=>$val) { 
     if(strlen($val)){ 
      $ret[(string)$key] = (string)$val; 
     } 
    return $ret; 
} 

$_REQUEST['location'] = 32744; // my zip code 
$a = yahoo_geo($_REQUEST['location']); 

// set retunred data to some variables for storage into MySQL 
$latitude = $a[Latitude]; 
$longitude = $a[Longitude]; 

    // MySQL code will go here 

// Output for demo 
echo 'Lattitude' .$latitude. '<BR><BR>'; 
echo 'Longitude' .$longitude. '<BR><BR>'; 
?> 

Dies funktioniert gut, außer wenn ein langen

Hier ist mein Code so weit diese Informationen zu erhalten, bevor

in DB speichern. und lat. wird nicht gefunden es gibt einen Fehler an den Browser zurück

Warning: simplexml_load_file(http://api.local.yahoo.com/MapsService/V1/geocode?appid=rlerdorf&location=some non zipcode) [function.simplexml-load-file]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in C:\webserver\htdocs\test\geolocation\index.php on line 16 

Hinweis; Ich könnte sicherstellen, dass die Postleitzahl nur numerisch ist, aber ich möchte lieber nicht, wie Yahoo mich auch mit anderen Feldern suchen lässt. Wenn ein Benutzer keine Postleitzahl eingibt, werde ich dafür sorgen, dass eine Stadt oder ein Staat oder sogar ein Land schlechter genutzt wird Also sollte jeder Benutzer eine Art Längengrad und Breitengrad haben. Gespeichert

Gibt es eine gute Möglichkeit, den Fehler zu vermeiden oder noch besser gibt es eine Möglichkeit, ID zu erkennen, gibt es einen Fehler, und wenn ein Fehler auftritt, könnte ich einen Standardwert für diesen Benutzer einfügen?

Antwort

1

Nicht ganz sicher, was Ihre Frage ist, aber ich glaube, du bist für die error control operator @

xml = @simplexml_load_file($q); 

Ihre Funktion sucht, wird dann als normal false zurück. Sie müssen das später überprüfen, obwohl (und einige Zitate hinzufügen):

if (!$a) 
{ 
    // Do something 
} 
else 
{ 
    $latitude = $a['Latitude']; 
    $longitude = $a['Longitude']; 
} 
+0

Das würde wahrscheinlich funktionieren und ja, was ich versuche zu tun, ist eine hässliche Fehler zu vermeiden, die dem Endbenutzer – JasonDavis

1

Mit dem @ Betreiber:

  • Sie haben, es zu benutzen jedes Mal wenn Sie es brauchen
  • wenn Sie debuggen möchten , müssen Sie es von überall entfernen (oder verwenden Sie die scream Erweiterung - die Sie nicht immer installieren können, abhängig von Ihrem Hosting-Service)
  • Wenn es einen Fehler gibt, wo Sie nicht setzen @ Es wird dem Benutzer immer noch angezeigt.

würde andere Lösung so etwas wie dies zu Beginn des Skripts zu verwenden sein, wenn Sie auf dem Produktionsserver sind:

ini_set('display_errors', 'Off'); 

Auf diese Weise wird kein Fehler immer an die Endbenutzer angezeigt (sie müssen diese nicht sehen und würden wahrscheinlich nicht verstehen), sogar in Situationen, an die Sie nicht gedacht haben; und es ist einfach, alle Fehler auf Ihrem Entwicklungscomputer angezeigt zu bekommen: nur online zu kommentieren ;-)

Hinweis: in der Produktion, wenn Sie die Konfiguration wie gewünscht einstellen können, gibt es die Möglichkeit, Fehler zu protokollieren Datei ; Auf diese Weise können Sie diese überprüfen und nicht anzeigen.

+0

gut zu wissen, danke – JasonDavis

+0

Sie sind willkommen :-) –