Alles in nieuwe <tr>

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sam van Broemsen

Sam van Broemsen

27/09/2014 14:18:16
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
Gewijzigd op 27/09/2014 14:19:37 door Sam van Broemsen
 
PHP hulp

PHP hulp

22/11/2024 21:18:19
 

27/09/2014 14:41:44
Quote Anchor link
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.
 
Sam van Broemsen

Sam van Broemsen

27/09/2014 14:47:30
Quote Anchor link
De required raintpl.class.php is RainTPL.

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
 

27/09/2014 14:56:15
Quote Anchor link
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;
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<!-- Dit wil ik -->
<table>
<tr>
<td>Jan</td>
</tr>
</table>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<!-- Dit krijg ik -->
<table>
<tr>
<td></tr>
</tr>
</td>
</table>
 
Sam van Broemsen

Sam van Broemsen

27/09/2014 15:01:03
Quote Anchor link
<!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
 

27/09/2014 15:29:09
Quote Anchor link
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.
Gewijzigd op 27/09/2014 15:29:51 door
 
Sam van Broemsen

Sam van Broemsen

27/09/2014 15:39:36
Quote Anchor link
Ik snap je niet helemaal,
Maar hoe moet ik dit oplossen?
 

27/09/2014 15:49:23
Quote Anchor link
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;
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
Gewijzigd op 27/09/2014 15:52:25 door
 
Sam van Broemsen

Sam van Broemsen

27/09/2014 16:01:36
Quote Anchor link
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?
 

27/09/2014 16:04:31
Quote Anchor link
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.
 
Sam van Broemsen

Sam van Broemsen

27/09/2014 16:07:36
Quote Anchor link
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}
 

27/09/2014 16:09:51
Quote Anchor link
$name->getUsers() moet alle users gaan ophalen dus je moet die functie ook even aanpassen.
Check ook je PM even.
 
Sam van Broemsen

Sam van Broemsen

27/09/2014 16:28:52
Quote Anchor link
Ik heb je PM beantwoord.
Ik kan helaas niet vinden hoe je een foreach loop in RainTPL doet.
 

27/09/2014 16:30:36
Quote Anchor link
Zo te zien kan je alleen loops doen met een array.
http://www.raintpl.com/Documentation/Documentation-for-web-designers/RainTPL-Tags/_loop_%20array%20___loop_/

Ik heb de PM ook weer beantwoord.
 
Sam van Broemsen

Sam van Broemsen

27/09/2014 16:32:41
Quote Anchor link
Hoe zet ik die dan in een array?
 

27/09/2014 16:35:15
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
            

    }
?>
Gewijzigd op 27/09/2014 16:38:15 door
 
Sam van Broemsen

Sam van Broemsen

27/09/2014 21:49:01
Quote Anchor link
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:

<!--
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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?
 
Sam van Broemsen

Sam van Broemsen

30/09/2014 17:55:03
Quote Anchor link
Zo te zien is dit niet mogelijk?
 

30/09/2014 22:43:41
Quote Anchor link
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.
 
Sam van Broemsen

Sam van Broemsen

01/10/2014 15:13:52
Quote Anchor link
Bedankt, ik zal overstappen op Smarty.

Ik heb mijn verzoek wel ingediend bij RainTPL.

Hierbij is mijn vraag opgelost, dankjewel.
 
Sam van Broemsen

Sam van Broemsen

02/11/2014 14:10:18
Quote Anchor link
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 :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.