Ich bekomm es einfach nicht hin ... Please help !

Hallo Zusammen,

ich möchte die im Beispiel aufgeführte XML Datei unter der „<number type=„home“>“ die Rufnummer „+493141234567“ suchen und als Ergebniss den zugehörigen Wert aus „<firstname>Donald</firstname>“ und „<lastname>Duck</lastname>“ als Rückgabewert der Funktion bekommen, also in dem Fall -> return „Donald Duck“;

Kommt die Nummer in mehr als einem Eintrag vor -> return „Uneindeutiger Eintrag !“;
Kommt die Nummer in keinem Eintrag vor -> return false;

Die Funktion sollte den Namen tragen -> function findNumberDB($callerNumber)
Die zu suchende Nummer wird mit -> „$callerNumber“ im Funktionsaufruf übergeben.

Ich habe mich schon an simplexml() und xpath() gewagt… aber der Syntax ist für mich der „reinste Horror“. :eek:

Für eine zündende Idee wäre ich super dankbar … :slight_smile:

hier eine Beispiel XML Datei:


<?xml version="1.0" encoding="UTF-8"?>
<phonebook>
<comment>Phonebook for JFritz v0.6.2.02</comment>
<entry private="false">
	<name>
		<firstname>Donald</firstname>
		<lastname>Duck</lastname>
	</name>
	<company>Taler AG</company>
	<address>
		<street>Taler Weg 1</street>
		<postcode>51234</postcode>
		<city>Entenhausen</city>
	</address>
	<phonenumbers standard="home">
		<number type="home">+493141234567</number>
	</phonenumbers>
	<internet>
		<email>donald@duck.de</email>
	</internet>
</entry>
<entry private="false">
	<name>
		<firstname>Gustav</firstname>
		<lastname>Gans</lastname>
	</name>
	<company>Taler AG</company>
	<address>
		<street>Taler Weg 2</street>
		<postcode>51234</postcode>
		<city>Entenhausen</city>
	</address>
	<phonenumbers standard="home">
		<number type="home">+493141234568</number>
		<number type="home">+4931412345679</number>
	</phonenumbers>
	<internet>
		<email>gustav@gans.de</email>
	</internet>
</entry>
<entry private="true">
	<name>
		<firstname>Dasy</firstname>
		<lastname>Duck</lastname>
	</name>
	<company>Taler AG</company>
	<address>
		<street>Taler Weg 3</street>
		<postcode>51234</postcode>
		<city>Entenhausen</city>
	</address>
	<phonenumbers standard="home">
		<number type="home">+4931412345679</number>
	</phonenumbers>
	<internet>
		<email>dasy@duck.de</email>
	</internet>
</entry>
</phonebook>

So, habe nun den ganzen Tag „rumgefrickelt“ und es hinbekommen.
Ich glaube es zumindest… habe es heute „seperiert“ geschrieben.
Die „results“ sehen auch gut aus. Bekomme genau das zurück, was erwartet. Ausser das „return false;“ wird mir mit „echo $result;“ nicht angezeigt … aber ist halt „Boolen“ und nicht „String“. Vielleicht kann trotzdem nochmal einer drüber schauen. Vielleicht hab ich ja noch einen Denkfehler drin oder das Ganze geht viel einfacher (will ja nicht auch noch dumm sterben).

Wobei ich an so einem „PHP Kampftag“ am schnellsten lerne und verstehe …
jetzt weiß ich wenigsten was genau in meinem Skript läuft (oder auch nicht läuft). :wink:

Hier meine Lösung:

function findNumberDB($callerNumber)
{
if (file_exists('c:\program files\ip-symcon\jfritz.phonebook.xml'))
{
$xml = simplexml_load_file('c:\program files\ip-symcon\jfritz.phonebook.xml');
}
else {
exit("Konnte Datei nicht laden. ");}
$count=0;
$callerNumber = substr_replace($callerNumber, '+49', 0, 1) ;
foreach ($xml->entry as $entry) {
$nummer = $entry->phonenumbers->number ;
$name = $entry->name->firstname." ".$entry->name->lastname ;
echo $nummer."=".$name."
";
   if ($nummer == $callerNumber) {
   $count=$count+1 ;
   $treffer=$name ;
   }
}
if ($count == 1)
{
echo "Einträge insg. gefunden: ".$count."
";
echo $treffer;
return $treffer;
}
elseif ($count > 1) {
      echo "Mehr als ein Name gefunden.
";
      return "Various Names";
   }
else {
echo "Keinen Eintrag gefunden.
";
return false;
 }
}
?>

Also die neue Funkktion sucht, statt in der mySQL Datenbank, nun in der Jfritz Phonebook Datei nach der Nummer.

Dabei ist mir aufgefallen, das die Suche üer „www.dasoertliche.de“ nicht funktioniert. Der Funktion werde ich mich die Tage mal widmen …

-> function findNumberDE($callerNumber)

ab2.jpg

Hallo,

wie gestern versprochen, hab ich mich im AB Skript mal der Rückwertssuche gewidmet. Die „alte“ Funktion lief nicht mehr, das sich die Seite
www.dasoertliche.de wohl geändert hat. Hier die überarbeitete Version:

function findNumberDE($callerNumber)
{
   $url_orig="http://www.telefonauskunft.de/inverseSearch.php?strasse=&newSearch=1&sid=lm996s9alvjlo7f5t7b1g1ngs2&vollstaendig=#TEL#";
   $url=str_replace("#TEL#","$callerNumber",$url_orig);
   //$ch = curl_init("$url_orig");
   $handle=fopen("$url", "r");
   if (!$handle){
      // error cannot open file
      echo("ERROR : CANNOT OPEN URL : '$url'
");
   }
   $lineNb = 0;
   $searchTag0 = '&Name=';
   $searchTag1 = '&Vorname=';
   $searchTag2 = '&Strasse';
   $found = 0 ;
   while(!$found && !feof($handle)) {
      $lineNb++;
      $buffer = fgets($handle);
        if (strpos($buffer, $searchTag0) !== false) {
        // echo "Name gefunden in Zeile: ".$lineNb."
";
        $found = 1 ;
        $startLN= (strpos($buffer, $searchTag0)+6) ;
        $endeLN = strpos($buffer, $searchTag1) ;
        // echo $startLN."
";
        // echo $endeLN."
";
        $Lastname = substr($buffer, $startLN, ($endeLN-$startLN)) ;
        // echo "Lastname=".$Lastname."
" ;
        $startFN= (strpos($buffer, $searchTag1)+9) ;
        $endeFN = strpos($buffer, $searchTag2) ;
        //echo $startFN."
";
        // echo $endeFN."
";
        $Firstname = substr($buffer, $startFN, ($endeFN-$startFN)) ;
        // echo "Firstname=".$Firstname."
" ;
        $foundName1 = $Firstname." ".$Lastname."
\r" ;
        $foundName1 = str_replace('+', ' ', $foundName1);
        // echo $foundName1;
              }
      else {$foundName1 = "Unbekannt";}
   }
   fclose($handle);
   return $foundName1;
}

Viel Spaß damit … :smiley: