PHPlooser: ich komm einfach nicht weiter

Hallo liebes Forum,
ich habe da ein kleines Problem.
Ich kriege bei diesem Script, welches auf PostLeitZahlen als Eingabe basiertz leider immer ein Ergebnis angezeigt.
Es muss doch aber möglich sein, dass wenn ich eine PLZ eingebe und +1000 und -1000 sich keine Filiale befindet, dass dann ein Text ausgegeben wird, wie z.B. es ist keine Filiale in der Nähe.
Ich weiss selber, das in meinem Script irgendwo der Wurm bei der Differenz drin ist, ich kann diesen Wurm nur nicht finden.
Eine Idee?
ansonsten ist alles in Ordnung mit diesem script.

hier das script:
?php
$row = 1;
$fp = fopen ("filialen.csv","r");
$max_diff = $HTTP_POST_VARS['PLZ'] = 1000;
$stack_of_results=array();
while ($data = fgetcsv($fp, 1000, ";"))
 {
  //Nur bei allen Vertriebslinie nachschauen
  if($HTTP_POST_VARS['Vertriebsl'] == 'alle')
    {
 if ($diff < $max_diff)
  $key=abs($data[2] - $PLZ);
  $stack_of_results[$key][]=$data;
    }
  //Nur bei einer bestimmten Vertriebslinie nachschauen
  if(substr($data[0],0,3) ==  substr($HTTP_POST_VARS['Vertriebsl'],0,3))
   {
 if ($diff < $max_diff)
  $key=abs($data[2] - $PLZ);
  $stack_of_results[$key][]=$data;
   }
 }
ksort($stack_of_results);
$output = array_slice($stack_of_results,0 , 7);
foreach($output as $k => $v)
 {
  echo "<tr>";
  for($j=0;$j<=8;$j++)
   {
     {if($j!=1)

if($j!=6)
    echo "<td>".$v[0][$j]." </td>";
   }
}
   echo "</tr>";
 }
?>

  1. Hallo PHPlooser!

    [...]
    if ($diff < $max_diff)

    wo kommt denn $diff her?
    (So ist $diff immer 0 und damit die bedingung immer erfüllt.)

    Gruss,
     Carsten

    1. Hallo PHPlooser!

      [...]
      if ($diff < $max_diff)

      wo kommt denn $diff her?
      (So ist $diff immer 0 und damit die bedingung immer erfüllt.)

      Gruss,
      Carsten

      Danke für die prompte Antwort,
      was soll ich jetzt machen,
      soll ich $diff einen Wert geben?
      Ich bin blutiger Anfänger.

      1. Hallo PHPlooser

        was soll ich jetzt machen,
        soll ich $diff einen Wert geben?

        Na sicher doch, $diff soll doch der "Abstand" zwischen dem "Standort"
        einer PLZ und der PLZ der nächsten Postfiliale sein, oder?
        Errechene ihn und führe dann den Vergleich ($diff < $max_diff) aus.

        $max_diff = $HTTP_POST_VARS['PLZ'] = 1000;

        Wird hier der PLZ nicht immer der Wert 1000 zugewiesen?

        Tschüß, Auge

  2. hi,

    ich habe mir einmal folgenden teil angeschaut. der haut nicht hin:
      if($HTTP_POST_VARS['Vertriebsl'] == 'alle')
      {
        if ($diff < $max_diff)
          $key=abs($data[2] - $PLZ);
        $stack_of_results[$key][]=$data;
      }

    ich würde denken, das müsste so ausschauen:
      if($HTTP_POST_VARS['Vertriebsl'] == 'alle')
      {
        $key=abs($data[2] - $PLZ);
        if ($key < $max_diff)
          $stack_of_results[$key][]=$data;
      }

    ich weiss jetzt nicht, ob ich damit den sinn des scripts völlig verändert habe. mir erscheint die neue version aber etwas logischer.
    die gleiche abfrage wird ja noch einmal gemacht. da müsste das ebenso geändert werden.

    gruss
    bjoern

    1. hi,

      ich habe mir einmal folgenden teil angeschaut. der haut nicht hin:
        if($HTTP_POST_VARS['Vertriebsl'] == 'alle')
        {
          if ($diff < $max_diff)
            $key=abs($data[2] - $PLZ);
          $stack_of_results[$key][]=$data;
        }

      ich würde denken, das müsste so ausschauen:
        if($HTTP_POST_VARS['Vertriebsl'] == 'alle')
        {
          $key=abs($data[2] - $PLZ);
          if ($key < $max_diff)
            $stack_of_results[$key][]=$data;
        }

      ich weiss jetzt nicht, ob ich damit den sinn des scripts völlig verändert habe. mir erscheint die neue version aber etwas logischer.
      die gleiche abfrage wird ja noch einmal gemacht. da müsste das ebenso geändert werden.

      gruss
      bjoern

      Hallo Björn,
      vielen vielen Dank.
      Erstes Problem gelöst, ich bekomme keine Ergebnisse mehr angezeigt, wenn innerhalb +-1000 keine Filiale ist,
      wie kriege ich das nun hin, dass er mir einen text ausgibt, wo drin steht, keine Filiale in Ihrer nähe.

      1. hi,

        ich habe mir einmal folgenden teil angeschaut. der haut nicht hin:
          if($HTTP_POST_VARS['Vertriebsl'] == 'alle')
          {
            if ($diff < $max_diff)
              $key=abs($data[2] - $PLZ);
            $stack_of_results[$key][]=$data;
          }

        ich würde denken, das müsste so ausschauen:
          if($HTTP_POST_VARS['Vertriebsl'] == 'alle')
          {
            $key=abs($data[2] - $PLZ);
            if ($key < $max_diff)
              $stack_of_results[$key][]=$data;
          }

        ich weiss jetzt nicht, ob ich damit den sinn des scripts völlig verändert habe. mir erscheint die neue version aber etwas logischer.
        die gleiche abfrage wird ja noch einmal gemacht. da müsste das ebenso geändert werden.

        gruss
        bjoern
        Hallo Björn,
        vielen vielen Dank.
        Erstes Problem gelöst, ich bekomme keine Ergebnisse mehr angezeigt, wenn innerhalb +-1000 keine Filiale ist,
        wie kriege ich das nun hin, dass er mir einen text ausgibt, wo drin steht, keine Filiale in Ihrer nähe.

        hier noch einmal die ausgabe
        ksort($stack_of_results);
        $output = array_slice($stack_of_results,0 , 7);
        foreach($output as $k => $v)
         {
          echo "<tr>";
          for($j=0;$j<=8;$j++)
           {
             {if($j!=1)

        if($j!=6)
            echo "<td>".$v[0][$j]." </td>";
           }
        }
           echo "</tr>";
         }

        1. wie kriege ich das nun hin, dass er mir einen text ausgibt, wo drin steht, keine Filiale in Ihrer nähe.

          ich würde das am ende anfügen:

          if (!$stack_of_results)
          {
            echo "<tr><td>nix gefunden</td></tr>";
          }

          ist natürlich eine billige variante. aber hey, wer will schon teure sachen, wenn's auch billige mit gleichem umfang gibt.

          grüssle
          bjoern

          1. wie kriege ich das nun hin, dass er mir einen text ausgibt, wo drin steht, keine Filiale in Ihrer nähe.

            ich würde das am ende anfügen:

            if (!$stack_of_results)
            {
              echo "<tr><td>nix gefunden</td></tr>";
            }

            ist natürlich eine billige variante. aber hey, wer will schon teure sachen, wenn's auch billige mit gleichem umfang gibt.

            grüssle
            bjoern

            Danke Björn, DU bist mein HELD. ;o)

  3. Aloha!

    Ich kriege bei diesem Script, welches auf PostLeitZahlen als Eingabe basiertz leider immer ein Ergebnis angezeigt.
    Es muss doch aber möglich sein, dass wenn ich eine PLZ eingebe und +1000 und -1000 sich keine Filiale befindet, dass dann ein Text ausgegeben wird, wie z.B. es ist keine Filiale in der Nähe.

    Du hast ein viel größeres Problem. "Filiale in der Nähe" ist leider absolut nicht anhand der Postleitzahl festzustellen. Denn die Post hat die Postleitzahlen auf der deutschen Landschaft so angeordnet, dass immer gewisse Gebiete (die absolut nichts mit den politischen Grenzen zu tun haben müssen) eine PLZ-Nummer gemeinsam haben - je weiter man ins Detail geht, desto chaotischer wird aber die Verteilung.

    Irgendwo stoßen die PLZ-Regionen "1xxxx" und "2xxxx" aneinander. Wer am Rand von 1xxxx wohnt, hat es möglicherweise näher zu einer Filiale in 2xxxx, weil das direkt der Nachbarort ist. Die PLZ-Differenz ist aber möglicherweise 10000 und mehr, also wird bei deinem Verfahren niemals die doch so nahe Filiale gefunden.

    Im Ruhrgebiet ist beispielsweise die PLZ-Region 40xxx (Düsseldorf) von den Regionen (im Uhrzeigersinn, angefangen im Norden) 45xxx, 42xxx, 51xxx, 50xxx, 41xxx, und 47xxx umrahmt. Die maximale Differenz wäre 12000.

    Wenn du die Suche auf die gleiche PLZ-Region begrenzt (maximale Differenz 1000), hast du zwar in Düsseldorf recht gute Karten, weil die 40er-Region recht klein ist. Aber im Osten ist z.B. die 17er-Region (Neubrandenburg) riesig. Und wenn Menschen an der Grenze zur 18er-Region wohnen, wollen sie vielleicht einfach dorthinn, anstatt mehrere hundert Kilometer durch die 17er-Region zu reisen.

    Du musst dir, wenn du die Aufgabe ernst meinst, leider etwas anderes ausdenken. Bei der Post ist eine CD erhältlich, die allen Postleitzahlen geografische Koordinaten zuordnet (oder so ähnlich) - anhand dieser Information kannst du die geografische "Nähe" zweier PLZ bestimmen und entsprechend auswerfen.

    Du kannst genausogut jeder Filiale einen gewissen Umkreis an Postleitzahlen zuordnen, für die sie zuständig sein soll. Beispielsweise dürfte eine Filiale in 20471 (Hamburg) zuständig sein für alle PLZ in 20xxx, aber da Hamburg groß ist, auch für 22xxx und einen winzigen Teil von 21xxx. Und eventuell auch für Teile des Umlandes, also 21xxx, 23xxx, 24xxx und 25xxx. Beachte: 21xxx ist nur zu einem kleinen Teil Bestandteil von Hamburg, der größere Teil reicht südlich der Elbe bis an die Nordseeküste. Dort ist Bremerhaven (27xxx) näher, als Hamburg.

    Das kann man wirklich nur dann gut beantworten und rausfinden, wenn man sich von der Post eine Postleitzahlenkarte besorgt. Dann siehst du auch, wie problematisch deine Annahme ist, ähnliche Postleitzahlen seien geografisch "in der Nähe". Diese Annahme gilt wirklich nur, in Großstädten, wenn die letzte Ziffer sich unterscheidet. Auf dem Lande kann der Unterschied einer PLZ-Ziffer etliche Kilometer ausmachen

    - Sven Rautenberg

    1. Moin Sven!

      Du musst dir, wenn du die Aufgabe ernst meinst, leider etwas anderes ausdenken. Bei der Post ist eine CD erhältlich, die allen Postleitzahlen geografische Koordinaten zuordnet (oder so ähnlich) - anhand dieser Information kannst du die geografische "Nähe" zweier PLZ bestimmen und entsprechend auswerfen.

      Die ist aber, soweit ich weiss recht teuer.

      Unter http://www.th-mack.de/download/ habe ich eine Liste mit Postleitzahlen, Orten und Koordinaten ergooglet, (http://www.google.com/search?q=postleitzahlen+koordinaten) und bei http://www.koordinaten.de/online/formel.shtml findet sich eine Formel zur näherungsweisen Entfernungsberechnung.

      Gruss,
        Carsten

    2. Aloha!

      Ich kriege bei diesem Script, welches auf PostLeitZahlen als Eingabe basiertz leider immer ein Ergebnis angezeigt.
      Es muss doch aber möglich sein, dass wenn ich eine PLZ eingebe und +1000 und -1000 sich keine Filiale befindet, dass dann ein Text ausgegeben wird, wie z.B. es ist keine Filiale in der Nähe.

      Du hast ein viel größeres Problem. "Filiale in der Nähe" ist leider absolut nicht anhand der Postleitzahl festzustellen. Denn die Post hat die Postleitzahlen auf der deutschen Landschaft so angeordnet, dass immer gewisse Gebiete (die absolut nichts mit den politischen Grenzen zu tun haben müssen) eine PLZ-Nummer gemeinsam haben - je weiter man ins Detail geht, desto chaotischer wird aber die Verteilung.

      Irgendwo stoßen die PLZ-Regionen "1xxxx" und "2xxxx" aneinander. Wer am Rand von 1xxxx wohnt, hat es möglicherweise näher zu einer Filiale in 2xxxx, weil das direkt der Nachbarort ist. Die PLZ-Differenz ist aber möglicherweise 10000 und mehr, also wird bei deinem Verfahren niemals die doch so nahe Filiale gefunden.

      Im Ruhrgebiet ist beispielsweise die PLZ-Region 40xxx (Düsseldorf) von den Regionen (im Uhrzeigersinn, angefangen im Norden) 45xxx, 42xxx, 51xxx, 50xxx, 41xxx, und 47xxx umrahmt. Die maximale Differenz wäre 12000.

      Wenn du die Suche auf die gleiche PLZ-Region begrenzt (maximale Differenz 1000), hast du zwar in Düsseldorf recht gute Karten, weil die 40er-Region recht klein ist. Aber im Osten ist z.B. die 17er-Region (Neubrandenburg) riesig. Und wenn Menschen an der Grenze zur 18er-Region wohnen, wollen sie vielleicht einfach dorthinn, anstatt mehrere hundert Kilometer durch die 17er-Region zu reisen.

      Du musst dir, wenn du die Aufgabe ernst meinst, leider etwas anderes ausdenken. Bei der Post ist eine CD erhältlich, die allen Postleitzahlen geografische Koordinaten zuordnet (oder so ähnlich) - anhand dieser Information kannst du die geografische "Nähe" zweier PLZ bestimmen und entsprechend auswerfen.

      Du kannst genausogut jeder Filiale einen gewissen Umkreis an Postleitzahlen zuordnen, für die sie zuständig sein soll. Beispielsweise dürfte eine Filiale in 20471 (Hamburg) zuständig sein für alle PLZ in 20xxx, aber da Hamburg groß ist, auch für 22xxx und einen winzigen Teil von 21xxx. Und eventuell auch für Teile des Umlandes, also 21xxx, 23xxx, 24xxx und 25xxx. Beachte: 21xxx ist nur zu einem kleinen Teil Bestandteil von Hamburg, der größere Teil reicht südlich der Elbe bis an die Nordseeküste. Dort ist Bremerhaven (27xxx) näher, als Hamburg.

      Das kann man wirklich nur dann gut beantworten und rausfinden, wenn man sich von der Post eine Postleitzahlenkarte besorgt. Dann siehst du auch, wie problematisch deine Annahme ist, ähnliche Postleitzahlen seien geografisch "in der Nähe". Diese Annahme gilt wirklich nur, in Großstädten, wenn die letzte Ziffer sich unterscheidet. Auf dem Lande kann der Unterschied einer PLZ-Ziffer etliche Kilometer ausmachen

      • Sven Rautenberg

      Es ist alles in Ordnung.
      Wir brauchen hier nicht philosophieren.
      Mein Problem ist gelöst.