Problem mit Schleife

xony

Erfahrenes Mitglied
Hallo Leute,

Ich habe folgendes Problem unhd hoffe es kann mir jemand helfen.
Warum wird in der zweiten Schleife mit der If Anweisung nichts ausgegeben.
Wo könnte der Fehler liegen, danke euch:

PHP:
   <?php



$news_query="select * from " . TABLE_NEWS . " order by id_news desc LIMIT " . NEWS_SHOW_LIMIT;

$erg=mysql_query($news_query)
     or die (mysql_error());


?>
<table cellpadding="0" cellspacing="0" width="100%">
    <tr>
        <td width="50%">

    <?

while($datensatz=mysql_fetch_array($erg))
     {
      $ueberschrift=$datensatz[ueberschrift];
      $autor=$datensatz[autor];
      $kurztext=$datensatz[kurztext];
      $id_neu=$datensatz[id_news];
      $von=$datensatz[von];
      $bis=$datensatz[bis];
      $mehr=$datensatz[weiter];
      $bild=$datensatz[bild];

     
    echo ' <table cellpadding="0" cellspacing="0" width="100%" ">
                <tr>
                    <td class="contentboxheading" width="50%">'.$ueberschrift.'</td>
                </tr>
            </table>
     ';
}
?>
   </td>
        <td width="50%">
             <?
 $c = 0;
while($datensatz=mysql_fetch_array($erg))
     {
      $ueberschrift=$datensatz[ueberschrift];
      $autor=$datensatz[autor];
      $kurztext=$datensatz[kurztext];
      $id_neu=$datensatz[id_news];
      $von=$datensatz[von];
      $bis=$datensatz[bis];
      $mehr=$datensatz[weiter];
      $bild=$datensatz[bild];

      $c++;
      
       if ($c % 2 == 0) {
    echo ' <table cellpadding="0" cellspacing="0" width="100%" ">
                <tr>
                    <td class="contentboxheading" width="50%">'.$ueberschrift.'</td>
                </tr>
            </table>
     ';
}
}
?>


 </td>
    </tr>
</table>
 
Mit der ersten Schleife hast du (soweit ich es sehe) schon alle Arrays aus dem Datensatz rausgeholt.
Die zweite Schleife kriegt also bei mysql_fetch_array ein false.
 
Weil $erg, bzw der dahinterliegende Ressourcehandle schon abgearbeitet ist mit der ersten Schleife.

Zum anderen warum kopierst du alles aus dem Array in extra Variablen und dann doch falsch? Denn strings sollten hier in ' bzw " angegeben werden. Ohne " bzw ' ist es nur in einem String selbst, etwas in der form echo "$daten[ausmeinemarray]"; zulässig, ansonsten eben echo $daten['ausmeinemarray']; richtig.
 
Ja stimmt Du hast recht, aber ich hab zu voreilig geschrieben.
Denn mir stellt sich eigentlich jetzt ein anderes Problem und zwar möchte ich in der ersten Schleife alles ausgeben ausser das was in der zweiten Schleife ausgegeben wird.
Also in der ersten Schleife alles ausser: ($c % 2 == 0).
Mir fällt dazu leider nichts ein.

Hast Du einen Tipp.
 
Wenns eine bessere Lösung gibt schrei bitte jemand :)

Ich vermute du müsstest das $erg ersteinmal über while und if auf ZWEI Arrays aufteilen, und dann mit der ersten Array die erste Tabelle füllen und mit der zweiten Array die zweite.
 
Ah, gut nur das in Schleife 2 sowieso nix rauskommt ;)

Wie wärs dann mit zwischenspeichern der Daten im Falle von der Erfüllung des Ifs und somit nur einer Schleife?

Also so

PHP:
<table cellpadding="0" cellspacing="0" width="100%">
 <tr><td width="50%">

<?
  $c = 0;
   $buf = "";
   while($datensatz=mysql_fetch_array($erg))
     {
      $ueberschrift=$datensatz[ueberschrift];
      $autor=$datensatz[autor];
      $kurztext=$datensatz[kurztext];
      $id_neu=$datensatz[id_news];
      $von=$datensatz[von];
      $bis=$datensatz[bis];
      $mehr=$datensatz[weiter];
      $bild=$datensatz[bild];
      $c++;
      
       if( ($c % 2) ) //Also ungleich 0, was der ersten Schleife entspricht
                echo ' <table cellpadding="0" cellspacing="0" width="100%" ">
                <tr>
                    <td class="contentboxheading" width="50%">'.$ueberschrift.'</td>
                </tr>
            </table>
           ';
      
       else
          $buf .= ' <table cellpadding="0" cellspacing="0" width="100%" ">
                <tr>
                    <td class="contentboxheading" width="50%">'.$ueberschrift.'</td>
                </tr>
            </table>
           ';
}

?>

</td>
        <td width="50%"> 
<?
  echo $buf;  //Hier nun den Rest ausgeben
?>
 
@ Ben Ben:

Das funktioniert Super, ich danke Dir.
Jetzt mache ich mich mal dahinter und schaue mir an was Dein Code genau macht.
Bin grad fleißig am PHP lernen.

Danke euch.
 
Na er gibt die eine Hälfte direkt in der Schleife aus, speichert die Andere in einem String durch kontinuierliches Anhängen und gibt diesen nach Beenden der Schleife aus.

Denk aber dran noch die Sache mit den ' zu beheben und evtl. dieses eigentlich unnötige umkopieren der Datenzeilen wegzulassen, da alle bis auf eine Variable sowieso nicht gebraucht werden....
 
Zurück