SQL Abfrage endet in Endlosschleife

KGD92

Mitglied
Moin,

ich hätte da gerne mal ein Problem: Und zwar versuche ich News aus einer DB auszulesen. Diese sollen dann auf der Seite angezeigt werden. Allerdings wie nur die Erste News unendlich mal gezeigt. Ich hoffe ihr könnt mir helfen. Hier die wichtigsten Dateien

Index.php
PHP:
<?php

/**
 * @author Kai Dölger
 * @layout HSG Sport
 * @date 12.02.2010 - 20:34
 */

include("./main/head.htm");
include("./main/frame_top.htm");
include_once ("./classes/class_database.php");
$db = new database();
$db->start();
				
switch ($_GET["modul"])
{

case "":
	include ("./modules/index/index.php");
break;
case "1":
	include ("./modules/handball/index.php");
break;

}
				
include("/main/frame_bottom.htm");

$db->close();
?>

class_database.php
PHP:
<?php

/**
 * @author Kai Dölger
 * @layout HSG Sport
 * @date 12.02.2010 - 20:36
 */

class database
{

var $_dbHost        = "localhost";
var $_dbDatabase    = "hsgsport";   
var $_dbUsername    = "root";   
var $_dbPassword    = "";
var $_dbcon    = NULL;

function start()
{
    $this->_dbcon = mysql_connect( $this->_dbHost, $this->_dbUsername, $this->_dbPassword ) or die('unable to connect to mysql server: ' . mysql_error()); ;
    mysql_select_db( $this->_dbDatabase, $this->_dbcon );
}
    
function close() 
{
    mysql_close($this->_dbcon);
}

function getNews($value)
{
	$query = "SELECT id,date,caption,message FROM news WHERE sport='".$value."' ORDER BY id DESC LIMIT 3";
	return mysql_fetch_object(mysql_query($query));
}

}

?>

/handball/index.php
PHP:
<!--@author Kai Dölger @layout HSG Sport @date 12.02.2010 20:38 -->
<div id="Infos">
<!-- Platzhalter für Informationen über die Sportart -->
</div>
<?php
while ($result = $db->getNews(1))
{
	$date = $result->date;
	$caption = $result->caption;
	$message = $result->message;
?>
<div class="news">
<div class="caption"><?php echo $caption; ?></div>
<div class="date"><?php echo $date; ?></div>
<div class="message"><?php echo $message; ?></div>
</div>
<?php
}
?>

Danke, Kai
 
Moin Kai,

die Methode getNews() darf nur ein MySQL-Result zurückgeben, den Rest musst du in der while-Schleife erledigen.

Code:
function getNews($value)
{
    $query = "SELECT id,date,caption,message FROM news WHERE sport='".$value."' ORDER BY id DESC LIMIT 3";
    return mysql_query($query);
}


//.......


<?php
while ($result = mysql_fetch_object($db->getNews(1)))
{
    $date = $result->date;
    $caption = $result->caption;
    $message = $result->message;
?>
<div class="news">
<div class="caption"><?php echo $caption; ?></div>
<div class="date"><?php echo $date; ?></div>
<div class="message"><?php echo $message; ?></div>
</div>
<?php
}
?>

Andernfalls wird bei jedem Schleifendurchgang getNews() erneut aufgerufen, und das verarbeitet, was sie zurückgibt....das erste Ergebnis der Ergebnisliste.
 
Das bring mit leider folgende Fehlermeldung ein !?

Code:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in F:\xampp2\xampp\htdocs\hsg\modules\handball\index.php on line 6
 
Was den Fehler anbelangt, da musst du wohl beim Ändern einen Fehler eingebaut haben....lasse dir nach mysql_query() den Fehler per mysql_error() ausgeben.

Was die Sache ansich anbelangt, ist so auch Quatsch :-)

Schreibs so:
alt:

Code:
while ($result = mysql_fetch_object($db->getNews(1)))
{

neu:
Code:
$ressource=$db->getNews(1);
while ($result = mysql_fetch_object($ressource))
{
 
Da ist aber noch immer einer drin ;)

So wäre es richtiger....wobei doch "$query" und nicht $db->getNews(1)" die Resource ist....das solltest du auf jeden fall mal vor Ort prüfen.
Ein "mysql_fetch_object" ist mit Abstand die langsamste Möglichkeit, um Daten aus der DB zu holen.....nimm da besser "mysql_fetch_array" (wie in meinem Beispiel).
Wenn du das ganze noch vom HTML trennst und erst mal die Querys und danach die Ausgabe regelst, sollte es sogar noch schneller sein
PHP:
$result = mysql_fetch_array($db->getNews(1)); // nicht $query als resource?
while ($result)
{
	?>
	<div class="news">
	<div class="caption"><?php echo $result['caption']; ?></div>
	<div class="date"><?php echo $result['date']; ?></div>
	<div class="message"><?php echo $result['message']; ?></div>
	</div>
	<?php
	$result = mysql_fetch_array($db->getNews(1)); // nicht $query als resource?
}

Bei deiner Möglichkeit hast du (zumindest im Strict-Mode) ein "Zuweisung einer Variable innerhalb einer bedingung"-Meldung........und dieser "Stil" ist seit ca 10 Jahren veraltet :D
 
Zurück