Alles in nieuwe <tr>
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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;
?>
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)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?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 />";
}
}
}
?>
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
Gewijzigd op 27/09/2014 14:19:37 door Sam van Broemsen
Daarna even je PHP code laten zien, ik vindt het nu erg onduidelijk wat je wilt hebben.
De resultaten worden uit een database gehaald,
Zo zou het moeten zijn, als dit in de database staat:
http://prntscr.com/4qrv1b
(Heb ik even met Pure HTML gemaakt)
Zo als het nu is:
http://prntscr.com/4qrnqs
We zien nu alleen een afbeelding maar wij willen HTML zien, de letterlijke code.
Bijvoorbeeld;
<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
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.
Maar hoe moet ik dit oplossen?
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;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<table class="table table-hover">
<thead>
<th>Gebruikersnaam</th>
<th>Realname</th>
<th>Rank</th>
</thead>
<?php
while($name->getUsers() as $user):
<tr>
<td>[code]<?=$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.
<thead>
<th>Gebruikersnaam</th>
<th>Realname</th>
<th>Rank</th>
</thead>
<?php
while($name->getUsers() as $user):
<tr>
<td>[code]<?=$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.
Ook snap ik niet hoe je opeens aan die $name->getUsers()->username komt.
Ik heb toch gewoon $name->getUsers('username') gedaan?
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.
{loop="$name->getUsers() as $user"}
<tr>
<td>{$user('username')}</td>
<td>{$user('realname')}</td>
<td>{$user('rank')}</td>
</tr>
{/loop}
Check ook je PM even.
Ik kan helaas niet vinden hoe je een foreach loop in RainTPL doet.
http://www.raintpl.com/Documentation/Documentation-for-web-designers/RainTPL-Tags/_loop_%20array%20___loop_/
Ik heb de PM ook weer beantwoord.
Hoe zet ik die dan in een array?
Als je deze functie aanpast krijg je een nette array waar je dan mee kan werken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?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.
}
?>
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.
}
?>
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:
<!--
Code (php)
$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?
Zo te zien is dit niet mogelijk?
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.
Ik heb mijn verzoek wel ingediend bij RainTPL.
Hierbij is mijn vraag opgelost, dankjewel.
Dan kon ik hem wel gebruiken in die loop :)