Kleines Problem mit foreach()

ciberjoerg

Erfahrenes Mitglied
Ich weis nicht ob ich was falsch mache aber scheinbar geht mein Script nicht so wie es sollte.
PHP:
<?
$max=6;
$min=intval($_GET['page'])*$max;
$limit="$min,$max";

$abnews = "SELECT * FROM news ORDER BY time DESC LIMIT $limit";

$resn="SELECT 'id', 'autor', 'aut_id', 'time', 'header', 'bild', 'text', 'kategorie' FROM news as ORDER BY 'time' DESC LIMIT $limit";

    
    ?>
    <?php if(!$resn): ?>


 <?php else: ?>
 <?php
 $x=0;
 foreach($resn as $news){
 //Farbe:
$tbsplit="news 1<br>";
 if($x%2){
     $tbsplit="news 2<br>";
 }
 $x++;
 ?>
 <?=$tbsplit?>
  <?php

 } ?>

 <?php endif; ?>
Ich bekomme immer folgende Fehlermeldung:
Code:
Warning:  Invalid argument supplied for foreach() in /srv/www/httpd/phost/d/de/pytalhost/darkbase/web/news/show_news.php  on line 18
Mein Ziel ist es 2 unterschiedliche Tabelentypen für meine news zu verwenden, 1. Variante ist mit Bild links text rechts und 2. Bild rechts text links.
Was mach ich da nur falsch
 
$resn ist kein Array sondern ein String.

Ich gehe mal davon aus, dass du einen Query an die DB senden willst, da $resn diesen enthält. Dazu muss der Query aber auch abgeschickt werden, mit mysql_query()

Wenn du dem Link folgst erfährst du auch wie man weiter verfährt. Du solltest dir dringend mal ein Tutorial zu gemüste führen wie man mit einer Datenbank arbeitet.

Außerdem ist dein PHP-Code etwas suboptimal gestaltet. Du wirst dich selbst verfluchen wenn du jemals daran was ändern musst. Außerdem kostet es verhältnismäßig sehr viel Zeit ständig den PHP-Parsers an und wieder auszuschalten "nur" um vielleicht eine Abgrenzung oder so zu machen. Mach doch nur 1 mal die Opentags und 1 mal Zu, das dazwischen brauchst du doch alles nicht...
 
Habs nochmal Überarbeitet doch leider Funktioniert das immernoch nicht.

PHP:
<?
$ncon = mysql_connect($conf_pass->db_host,$conf_pass->db_user,$conf_pass->db_pass) or die ("Keine Verbindung moeglich");
mysql_select_db("$conf_pass->db_name") or die ("Die Datenbank existiert nicht");

$max=6;
$min=intval($_GET['page'])*$max;
$limit="$min,$max";

//$abnews = "SELECT id, autor, aut_id, time, header, bild, text, kategorie FROM news ORDER BY time DESC LIMIT $limit";

$abnews = "SELECT 'id', 'autor', 'aut_id', 'time', 'header', 'bild', 'text', 'kategorie' FROM news ORDER BY time";
$resn = mysql_query($abnews)or die(mysql_error());
    

if(!$resn){
    echo "kein eintrag";
}

else{
}
 $x=0;
 foreach($resn as $news){
 //Farbe:
$tbsplit="news 1<br>";
 if($x%2){
     $tbsplit="news 2<br>";
 }
 $x++;
echo $tbsplit;

 }
?>
 
Ich bezweifle, dass du die Posts wirklich gelesen hast. Ich hab in meine erwähnt, dass du dem Link folgen sollst denn da erfährst du wie man weiter verfährt. Hättest du es getan hättest du nicht hier nochmal posten müssen.

In deiner zweiten Zeile, warum umrahmst du da den DB-Name mit Anführungszeichen? Oo, unsinniger Rechenzeit verschwenden geht nur noch durch eine Schleife welche einfach nur DB-Verbindungen herstellt und wieder schließt, und das etwas 1000-mal pro Scriptaufruf... [/irnoie]

Nimm die Anführungszeichen raus!
 
Das Ergebnis der Query ist ein Objekt, kein Array. (Ein String?) Dafür gibt es Funktionen. Auf vielen vielen Seiten sieht man die Standardherangehensweise:
PHP:
$abnews = "SELECT * FROM news ORDER BY time";
$resn = mysql_query($abnews)or die(mysql_error());
while($row = mysql_fetch_assoc($resn))
{
    echo "Name :{$row['id']} <br>" .
         "Subject : {$row['autor']} <br>" .
         "Message : {$row['text']} <br><br>";
}

zB
http://www.tutorials.de/forum/php-tutorials/9872-php-mysql-suche-durch-eine-datenbank.html

mfg chmee

p.s.: Für das Umschalten zwischen 2 Zuständen bietet sich XOR an. Nochmaliges Beispiel oben mit Umschalter in der while-Schleife.
PHP:
$umschalten=false;

$abnews = "SELECT * FROM news ORDER BY time";
$resn = mysql_query($abnews)or die(mysql_error());

while($row = mysql_fetch_assoc($resn))
{
    $umschalten=$umschalten xor true;
    if($umschalten==true) {
        //ungerade Zeilen --
        echo "Name :{$row['bild']} <br>" .
         "Subject : {$row['autor']} <br>" .
         "Message : {$row['text']} <br><br>";
   } else {
        // gerade Zeilen
        echo "Name :{$row['autor']} <br>" .
         "Subject : {$row['bild']} <br>" .
         "Message : {$row['text']} <br><br>";
   }
}
Sry, habs grad nicht getestet, aber so (ähnlich) sollte es aussehen :D http://tut.php-q.net/de/logical.html#s7
 
Wie ich das auslese ist mir schon klar. Eigentlich geht es mir darum wie ich das ergebniss auf 2 arten angeben kann.
Beispiel 1
Bild | überschrift/ verfasser Datum
| Newstext

beispiel 2
überschrifft / verfasser Datum | Bild
Newstext |

Und das im wechsel daher eigentlich das foreach problem welches das resultat un eine variable umnennt. doch wenn es eine möglichkeit gibt Beide varianten Der aufteilung zu schreiben und im Wechsel untereinander aufzubaun ist das problem gelöst
 
Das ist aber ein Problem des echo-Aufbaus, also der Ausgabe. Dafür musst Du doch nicht auf foreach aufbauen.. Ich hab oben noch das XOR-Beispiel dazugeschrieben für einen einfachen Umschalter. Nun muss nur noch in den echos die Ausgabereihenfolge geändert werden.

mfg chmee
 
Okay habs auch ohne XOR hinbekommen sieht nun wie folgt aus:

PHP:
$max=6;
$min=intval($_GET['page'])*$max;
$limit="$min,$max";


$abnews = "SELECT * FROM news ORDER BY time";
$resn = mysql_query($abnews)or die(mysql_error());
$x=0;
while($row = mysql_fetch_assoc($resn))
{

if($x%2){
//ungerade Zeilen --
        echo "Name :{$row['id']} <br>" .
         "Subject : {$row['autor']} <br>" .
         "Message : {$row['text']} <br><br>";
         echo"var2<br>";
}
else{
// gerade Zeilen
        echo "Name :{$row['id']} <br>" .
         "Subject : {$row['autor']} <br>" .
         "Message : {$row['text']} <br><br>";
         echo"var1<br>";
   } 
   $x++;
}
 
Zurück