Hoi,

Ik ben aan het leren om te gaan met OOP, maar ik liep tegen een probleempje aan. Ik wil dat een klein beetje gegevens zichtbaar wordt voor andere gebruikers, dat achterwege: alle data komt achterelkaar in een table.

Nu wil ik dat alle data weer in een volgende column komt.

Code:

Index.php
PHP-code:
<?php

require 'inc/user.class.php';
require 'inc/raintpl.class.php';

$con = new mysqli("localhost", "root", "Hacker :P", "login");


include "inc/rain.tpl.class.php";

raintpl::configure("tpl_dir", "tpl/" );
raintpl::configure("cache_dir", "tmp/" );



$user = new user($con);
//$user->getUsers();
//$user->getUsersWith("id", "1");

$tpl = new RainTPL;
$user->getUsers('rank');
$tpl->assign('name', $user);


$html = $tpl->draw('page');
echo $html;


?>

Die page.html dan:
PHP-code:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>User { OOP + TPL }</title>
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
<link rel="stylesheet" href="css/bootstrap.css">
<script src="js/bootstrap.js"></script>
</head>
<body>
<div class="container">
<h1> Een inlogsysteem. <small> OOP + TPL </small></h1>
<table class="table table-hover">
<tr>
<th>Gebruikersnaam</th>
<th>Realname</th>
<th>Rank</th>
</tr>
<tr>
<td>{$name->getUsers('username')}</td>
<td>{$name->getUsers['realname']}</td>
<td>{$name->getUsers['rank']}</td>
</tr>

</table>


</div>
</body>
</html>


De user.class.php (Nog een paar keer html ge-echo't, omdat ik misschien zo het probleem kon oplossen. Was niet het geval)
<?php

PHP-code:
class user {

protected $con;
public $sql;
public $output;


public function __construct($con) {
$this->con = $con;
if ($con->connect_errno) {
trigger_error("Mislukt om verbinding te maken met de database. Diverse functie's zullen niet goed werken.");
}
}

public function getUsers($what) {
$this->sql = $this->con->query(
"SELECT * FROM users"
);

while ($this->output = $this->sql->fetch_assoc()) {
echo $this->output[$what]. "<br />";
}


}

public function getUsersWith($output, $what, $is) {
$this->sql = $this->con->query(
"SELECT * FROM users
WHERE $what=$is"
);

while ($this->output = $this->sql->fetch_assoc()) {
echo $this->output[$output]. "<br />";
}
}


}
?>

Screen hoe het er nu uitziet:
http://prntscr.com/4qrnqs

Alvast Bedankt
$name->getUsers() moet alle users gaan ophalen dus je moet die functie ook even aanpassen.
Check ook je PM even.
Ik heb je PM beantwoord.
Ik kan helaas niet vinden hoe je een foreach loop in RainTPL doet.
De code in je functie haalt nu alles op dmv een while loop. Je array wordt dus al in stukken gehakt.

Als je deze functie aanpast krijg je een nette array waar je dan mee kan werken.


<?php
public function getUsers() {
        $this->sql = $this->con->query(
            "SELECT * FROM users"
            );

        $this->output = $this->sql->fetch_assoc();
	// Kijk eens wat hieruit komt. Misschien een array? Of moet je er nog iets bij zetten? Ik weet niet ook niet uit me hoofd.
            

    }
?>
Ik ben even de hele middag wezen prutsen, maar nu heb ik iets.
Alleen werkt een ding nog niet.
Dit is de array row:

Array
(
[0] => Array
(
[username] => Sombie
[realname] => Sam
[rank] => 5
)

[1] => Array
(
[username] => Infinite
[realname] => Jantje
[rank] => 3
)

)

$user->row['username'] werkt, behalve als ik deze in een loop doe. Dus zo:

<!-- <?php -->

<table class="table table-hover">
<tr>
<th>Gebruikersnaam</th>
<th>Realname</th>
<th>Rank</th>
</tr>

{loop="$name->row"}
<tr>
<td>{$value.name}</td>
<td>{$value.name}</td>
<td>{$value.name}</td>
</tr>
{else}
Niks te laden.
{/loop}
</table>

<!--?> -->

$name = new user($con) dus dat klopt.
Alleen geeft hij niks terug, ik kan wel {$key} doen, maar dat geeft de array nummering op.
Hoe kan ik dus verder in de array?
Het rottige is dat je een template engine gebruikt die best gelimiteerd is.
Misschien kan je SMARTY implementeren of DWOO?
Hierin zijn meer mogelijkheden. Jou specifieke probleem ligt bij je template engine en niet php of iets.

Ik zelf kan je er niet mee helpen en je bent al zeker een eind gekomen. Je doet alles goed maar komt nu in de knoop bij de template engine.
Bedankt, ik zal overstappen op Smarty.

Ik heb mijn verzoek wel ingediend bij RainTPL.

Hierbij is mijn vraag opgelost, dankjewel.
Ben er inmiddels achter gekomen dat het wel mogelijk was, je moest met PDO fetchAll gebruiken.

Dan kon ik hem wel gebruiken in die loop :)

Reageren