Nervensäge: Suchergebnisse optimieren

hallo,
ich habe eine plz-suche unter www.vizacon.de/coop/filiale.html.
Die Ergbnisauswertung ist noch nicht ganz rund.
Ich möchte gerne, dass nur Ergnisse +1000 und -1000 von der PLZ-Eingabe ausgegeben werden, falls es kein Ergebnis innerhalb der PLZ-Eingabe gibt, dann soll ein Antworttext ausgegeben werden.
Hier mein ausgiebiges Suchscript:
#!/usr/local/bin/php
<html>
<head>
<title>Filialsuche</title>
</head>
<body text=white font face=Arial,Helvetica size=2 bgcolor=#003399>
<table border="1">
  <thead>
  <tr>
    <th>Filiale</th>
    <th>PLZ</th>
    <th>Anschrift</th>
    <th>Marktleiter</th>
    <th>Telefon</th>
    <th>Telefax</th>
  </tr>
  </thead> <tbody>
  <?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<=7;$j++)
   {
     {if($j!=1)

if($j!=5)
    echo "<td>".$v[0][$j]." </td>";
   }
}
   echo "</tr>";
 }
?>
  </tbody>
</table>
</body>
</html>
Irgendwie beiss ich mir die Zähne daran aus und morgen muss ich es beim Kunden zeigen.
Bitte helft mir!!1

  1. ich habe eine plz-suche unter http://www.vizacon.de/coop/filiale.html.
    Die Ergbnisauswertung ist noch nicht ganz rund.

    Ich möchte gerne, dass nur Ergnisse +1000 und -1000 von der PLZ-Eingabe ausgegeben werden, falls es kein Ergebnis innerhalb der PLZ-Eingabe gibt, dann soll ein Antworttext ausgegeben werden.

    $row = 1;
    $fp = fopen ("filialen.csv","r");
    $max_diff = $HTTP_POST_VARS['PLZ'] = 1000;

    Was soll das? $max_diff soll doch sicher einfach nur 1000 sein, oder?

    $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;
        }

    Dann solltest Du Dir angewöhnen, Deinen Code ordentlich zu strukturieren.
    Zweitens ist $diff hier überhaupt nicht definiert, so daß die if-Bedingung hier immer zutrifft.
    Drittens machst Du hier den gravierenden Fehler, daß Du $data immer zu $stack_of_results hinzufügst. Das if davor bezieht sich nur auf die nächste Zeile ($key=..), so daß, falls $diff außerhalb des Bereiches liegen sollte, die aktuellen Daten dem letzten gefundenen Index hinzugefügt werden.

    Ich denke mal, daß soll so aussehen:

    $diff=abs($data[2]-$HTTP_POST_VARS["PLZ"]);
      if ($diff < $max_diff)
        {
         $stack_of_results[$diff][]=$data;
        };

    //Nur bei einer bestimmten Vertriebslinie nachschauen

    S.o.

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

    »»

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

    Wieso $v[0][$j]? Sollte das nicht einfach $v[j] sein oder übersehe ich da irgendwas?

    }
    }
       echo "</tr>";
    }

    Hier habe ich das ungute Gefühl, daß beim Kopieren des Codes was verloren gegangen ist? Aber auch hier: Auch wenn's eilig ist, bemühe Dich doch, den Code zumindest hier im Forum ordentlich zu strukturieren, es macht das Fehlerfinden wesentlich leichter.

    Vorschlag:

    if (sizeof($stack_of_results)==0)
        {
         echo "Keine Filialen in der Nähe, sie müssen zu Aldi gehen.."
        }
       else
        {
         ksort($stack_of_results);
         foreach ($stack_of_results as $data)
          {
           echo "<tr>";
           for($j=0;$j<=7;$j++)
            {
             if (($j!=1) && ($j!=5))
                echo "<td>".$data[$j]."</td>";
            };
           echo "</tr>";
          };
        };
    Daß das Skript unter der angegebenen Adresse nicht mit diesem übereinstimmt, kann man auch daran sehen, daß in diesem Skript nirgendwo das Wörtchen "Fleischabtltr" auftaucht, daß in der ersten Datenzeile der Netzversion fälschlicherweise für PLZ=00000 erscheint.

    Gruß,
      soenk.e