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
Laat eens zien wat je hebt qua HTML en wat je wilt bereiken qua HTML.
Daarna even je PHP code laten zien, ik vindt het nu erg onduidelijk wat je wilt hebben.
Ik snap dat je een screenshot erbij doet van de pagina, maar aan de HTML code hebben wij meer.
We zien nu alleen een afbeelding maar wij willen HTML zien, de letterlijke code.

Bijvoorbeeld;

<!-- Dit wil ik -->
<table>
<tr>
<td>Jan</td>
</tr>
</table>



<!-- Dit krijg ik -->
<table>
<tr>
<td></tr>
</tr>
</td>
</table>
<!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 HTML-Code staat er al bij hoor

Toevoeging op 27/09/2014 15:03:08:

Oeps foutje:
Nieuwe resultaat.
http://prntscr.com/4qrzf4
Wat ik gek vindt is dat je een gebruiker opzoekt en alleen een stukje info weergeeft.
Waarom niet de gehele gebruiker teruggeven en alleen jou gewenste info echoen?

$name->getUsers()->username;

http://php.net/manual/it/mysqli-result.fetch-object.php

Zo hoef je maar 1x de query te doen en heb je meteen per row de juiste info.
Ik snap je niet helemaal,
Maar hoe moet ik dit oplossen?
Wat je nu doet is 1x de html laden met de info die je hebt.
Wat je moet doen is tussen de <table> tags een loop plaatsen die voor jou de info toont.

Je gaat dus een query doen 1x naar de database met de vraag van alle gebruikers.
Daarna ga je dit resultaat loopen en verwerken in de html

Voorbeeld;

<table class="table table-hover">
<thead>
<th>Gebruikersnaam</th>
<th>Realname</th>
<th>Rank</th>
</thead>
<?php
while($name->getUsers() as $user):
<tr>
<td><?=$user['username']?></td>
</tr>
<tr>
<td><?=$user['realname']?></td>
</tr>
<tr>
<td><?=$user['rank']?></td>
</tr>
<?php endwhile; ?>
</table>


Ik hoop dat je het nu wel snapt. Ben niet opper best in uitleggen.
Maar jij haalt nu maar 1x iets op en dat gaat fout.
Ik gebruik een TPL engine, dus weet ik niet hoe ik die while loop doe.
Ook snap ik niet hoe je opeens aan die $name->getUsers()->username komt.
Ik heb toch gewoon $name->getUsers('username') gedaan?
Ja ik zag dat je dat gebruikte. Alleen haal je nu 3x iets op toch?
Je doet 3x een query naar een gebruiker waar je dan op dat moment alleen de gebruikersnaam van wilt hebben.

Mijn voorbeeld van $name->getUsers()->username; was fout, je moet naar het laatste kijken wat ik heb neergezet.
In de template-engine zal je dan de loop moeten maken, want het gaat nu dus niet goed.
Ik heb nu dit, maar geeft ook niks terug:
{loop="$name->getUsers() as $user"}
<tr>
<td>{$user('username')}</td>
<td>{$user('realname')}</td>
<td>{$user('rank')}</td>
</tr>
{/loop}

Reageren