mysql_fetch_assoc in while-Schleife gibt nicht alle Datensätze aus

atlantyz

Erfahrenes Mitglied
Hallo Leute,

vielleicht liegts dran, dass Freitag ist und die Konzetration nachlässt, aber PHP macht mich heute noch bekloppt:

ich habe eine while- Schleife, mit der ich mittels mysql_fetch_assoc die ermittelten Datensätze aus meiner MySQL- Datenbank ausgeben möchte. Aber er gibt mir nur die erste Zeile aus und ich kann den Fehler einfach nicht finden. Nun hab ich auf die Art schon 100 Schleifen gemacht und das ist die erste, die nicht so will wie ich.

Erstmal hier der Code:

PHP:
<?php
session_start();
include_once "./exe/funktionen.php";
include_once "./exe/session.inc.php";
include_once "./exe/sql.php";

$columns = array(
          'telefonnummern.telefonnummer' => 'telefon',
          'kunde.kunde_name' => 'name',
          'telefonnummern.standort' => 'standort',
          'k_t_g.geraete_id' => 'geraet',
          );

$cond = array(); //leeres Array zum Speichern der Werte
$z == '0'; // Zähler wird auf Null gesetzt
foreach($columns as $col => $feld) {
  if (!empty($_GET[$feld])) {
      $cond[] = "$col like '%$_GET[$feld]%'"; // Wert für die Select Abfrage
  }  
}
//echo $_GET["telefon"].", ".$_GET["standort"].", ".$_GET["geraet"].", ".$_GET["name"]."<br>";

db_connect();

	$sqlab = "select k_t_g.k_t_g_id as kunde_id, kunde.kunde_name as name, kunde.kunde_vorname as vorname, telefonnummern.standort as standort, ";
   $sqlab.= "k_t_g.telefonnummer as tel, k_t_g.geraete_id as pc, k_t_g.gueltig as gueltig ";
   $sqlab.="from ((k_t_g inner join kunde on kunde.kunde_id = k_t_g.kunde_id) inner join telefonnummern on k_t_g.telefonnummer = telefonnummern.telefonnummer)";
   $sqlab.="where k_t_g.gueltig = 'j' and " . implode(' and ', $cond);
   
   
$erg = mysql_query($sqlab);
//echo "Abfrage: ".$sqlab;


echo "<table border = 1, rules = all>";
echo "<tr bgcolor=#C8C8F0>";
echo"<th></th>";
echo"<th>Telefonnr.</th>";
echo "<th>Ger&auml;t</th>";
echo "<th>Ger&auml;tenr.</th>";
echo "<th>Name</th>";
echo "<th>Vorname</th>";
echo "<th>Ort</th>";

echo "</tr>";
while ($kunde = mysql_fetch_assoc($erg))
{
	$farbe = hintergrund();
   echo "<tr bgcolor = '" . $farbe . "'>\n";
   echo " <td>\n";
   echo "  <input type = 'radio' name = 'kundenauswahl' value = '" . $kunde["kunde_id"] . "'>\n";
   echo " </td>\n";
   echo " <td>\n";
   echo "  " . $kunde["tel"] . "\n";
   echo " </td>\n";
      echo " <td>\n";
      db_connect_intranet_alt();
   $geraet_suche = "select g_name from geraet where g_id = '" . $kunde["pc"] . "'";
   $erg = mysql_query($geraet_suche);
   $geraet = @mysql_result($erg,0,"g_name");
   echo "<b>  " . $geraet . "</b>\n";
   echo " </td>\n";
if($kunde["pc"] == '0'){
      $kunde["pc"] = '';
   }
   echo "<td>".$kunde["pc"]."</td>";
      echo " <td>\n";
   echo "  " . $kunde["name"] . "\n";
   echo " </td>\n"; 
      echo " <td>\n";
   echo "  " . $kunde["vorname"] . "\n";
   echo " </td>\n";
   echo " <td>\n";
   echo "  " . $kunde["standort"] . "\n";
   echo " </td>\n";

   echo "</tr>\n";
}
echo "<tr>\n";
echo " <td>\n";
if (isset($_POST["bearbeitet"])) {
   $kundeid = $_POST["kunde"];
   echo "  <input type = 'radio' name = 'kundenauswahl' value = '" . $kundeid . "' checked>\n"; //Kunde bleibt bestehen
}
else {
   echo "  <input type = 'radio' name = 'kundenauswahl' value = '' checked>\n";
}
echo " </td>\n";
echo " <td>\n";
if (isset($_POST["bearbeitet"])) {
   echo "Kunde beibehalten";
}
else {
   echo "  keine\n";
}

?>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr></table>

Gebe ich die Abfrgage direkt über MySQl ein, erhalte ich 10 Datensätze. Als Ausgabe bekomme ich aber nur einen. Vielleicht sieht jemand von euch den Fehler? Ich hab schon alles durchsucht und finds einfach nicht...
 
du machst innerhalb der Schleife eine zweite DB-Abfrage und schreibst das Resulatat ebenfalls in $erg. Damit überschreibst du die Referenz die du im äusseren mysql_fetch_assoc() verwendest.

Hier in der gwekürzten Variante sieht man das Problem sehr gut.
PHP:
$erg = mysql_query($sqlab);
while ($kunde = mysql_fetch_assoc($erg))
{
   $geraet_suche = "select g_name from geraet where g_id = '" . $kunde["pc"] . "'";
   $erg = mysql_query($geraet_suche);
}
Du solltes für das innere $erg emem anderen Namen nehmen.
 

Neue Beiträge

Zurück