Hallo allemaal,

Ik was bezig met een nieuwssysteem te maken, die later iedereen makkelijk kan gebruiken. Maargoed, dan moet die wel eerst werken.

Ik heb dus op moment 2 verschillende nieuws items in mijn db staan, alleen pakt hij 1 nieuws item en laat die 2x zien, inplaats van dat die elke item een x laat zien.

Het is het volgende script:

Nieuws.php:
<?php
$new -> code('

		Nieuws titel: [titel] 
		<hr />
		[bericht]
		<hr />
		Gepost door: [naam]  --- Op de datum: [datum] 
		<br />
		<br />


');
?>


En de class:
<?php
class news {
	
	function code($string) {
	
		$query	=	"SELECT * FROM nieuws LIMIT 15";  
		$result =	mysql_query($query) or die (mysql_error());  
		while ($sql = mysql_fetch_assoc($result)) {
		
			$string = str_replace("[naam]", $sql['user'], $string);
			$string = str_replace("[bericht]", $sql['bericht'], $string);
			$string = str_replace("[bericht_meer]", $sql['berichtm'], $string);
			$string = str_replace("[titel]", $sql['titel'], $string);
			$string = str_replace("[datum]", $sql['datum'], $string);
			
			echo $string;
		}
	}
}

?>


De class wordt wel aangeroepen, en dat is tevens het probleem ook niet.

Mvg,

Thomas
uhm tuurlijk... doe eens dit :

<?php
class news {
    
    function code($string) {
    
        $query    =    "SELECT * FROM nieuws LIMIT 15";  
        $result =    mysql_query($query) or die (mysql_error());  
        while ($sql = mysql_fetch_assoc($result)) {
           
            $string_echo = str_replace("[naam]", $sql['user'], $string);
            $string = str_replace("[bericht]", $sql['bericht'], $string_echo);
            $string = str_replace("[bericht_meer]", $sql['berichtm'], $string_echo);
            $string = str_replace("[titel]", $sql['titel'], $string_echo);
            $string = str_replace("[datum]", $sql['datum'], $string_echo);
            
            echo $string_echo;
        }
    }
}
?> 


[edit]
mss wat uitleg..
doordat je met je eerste query de [velden] al wijzigt zijn deze na 2de stap niet beschikbaar. want [velden] is nu gelijk aan de waarde uit de DB... en kan je hem niet str_replacen..
[/edit]
Helaas, werkt dat niet.

Ik heb dit ook al geprobeert:

<?php

class news {
	
var $string;
	
	function replace ($string) {
		
		$string = str_replace("[naam]", $sql['user'], $string);
		$string = str_replace("[bericht]", $sql['bericht'], $string);
		$string = str_replace("[bericht_meer]", $sql['berichtm'], $string);
		$string = str_replace("[titel]", $sql['titel'], $string);
		$string = str_replace("[datum]", $sql['datum'], $string);
		
		echo $string;	
		
	}
	
	function code($string) {
	
		$query	=	"SELECT * FROM nieuws LIMIT 15";  
		$result =	mysql_query($query) or die (mysql_error());  
		while ($sql = mysql_fetch_assoc($result)) {
			
			echo $this -> replace($string);
		}
	}
}

?>	


Helaas werkte dit ook niet..
Tommy was volgens mij wel op de goede weg, lukt het zo wel?
<?php
class news {

function code($string) {

$query = "SELECT * FROM nieuws LIMIT 15";
$result = mysql_query($query) or die (mysql_error());
while ($sql = mysql_fetch_assoc($result)) {

$string_echo = str_replace("[naam]", $sql['user'], $string);
$string_echo = str_replace("[bericht]", $sql['bericht'], $string_echo);
$string_echo = str_replace("[bericht_meer]", $sql['berichtm'], $string_echo);
$string_echo = str_replace("[titel]", $sql['titel'], $string_echo);
$string_echo = str_replace("[datum]", $sql['datum'], $string_echo);

echo $string_echo;
}
}
}
?>
bij de laatste regel 15 dit van maken
return $string;

ipv
echo $string;
Dat maakt in principe niet zoveel uit, om te testen is het misschien makkelijker om een echo te gebruiken. Maar als je zegt dat je in een klasse normaal gesproken niets echoed heb je natuurlijk helemaal gelijk ;)
Dankje blanche die werkt:)
ow jah vergeten de andere variabelen aan te passen... :)
Misschien een aardige optie: zorg ervoor dat automatisch alles wat in een hash (associative array) staat wordt geinclude. Het voordeel is: je kan direct waarden uit een tabel voeren:

Dit is de meest basic template parser die je kan verzinnen. Maar is scalable: dat wil zeggen. Je hoeft alleen je template aan te passen, en de data/array groeit met de tabel die je maakt.

<?php

class news {
function parseData ($strTekst, $arrVar) {
// verzin hier je eigen syntax
$strOpen = "[";
$strClose = "]";

$strTekst = preg_replace_all('/' . $strOpen . '(\w+?)' . $strClose . '/ie', '$arrVar[\'\\1\']', $strTekst);
// nog niet optimaal, zal errors/notices geven bij gebruik van niet bestaande [variabelen]
// door /i hoofdletter ongevoelig
return $strTekst;
}

function getData($string) {

$query = "SELECT * FROM nieuws LIMIT 15";
$result = mysql_query($query) or die (mysql_error());
while ($sql = mysql_fetch_assoc($result)) {
$echo_string = $this->parseData($sql, $string);
}
}
}
?>
Offtopic: De naam van de variabele $sql slaat nergens op, er staat geen letter SQL in. Het is een rij uit een resultset, $row ligt dan voor de hand.

Let daar op, je kunt je een ongeluk zoeken naar bugs die door dit soort fouten gaan ontstaan.

Spreek uit ervaring...

Reageren