[PHP\MYSQL] Beginnersvraag

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Alwinonline
  • Registratie: Mei 2009
  • Niet online
Ik ben bezig met het oefenen in php/MYSQL (samen met Smarty). Ik kom nu een probleem tegen waar ik geen oplossing voor heb. ik heb wat data in een tabel staan welke gekoppeld is aan de user_id van de ingelogde gebruiker. Wat ik wil doen is als een user naar een pagina gaat, hij een overzicht krijgt van al zijn "characters" dit wil ik doen door middel van de volgende code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    mysql_select_db($db_name, $con);
    $result = mysql_query("SELECT * FROM $tbl_name WHERE player_id=$id") or die(mysql_error());
    $count = mysql_num_rows($result);
    if ($count > 0)
        {
        while($row = mysql_fetch_array($result))
            {
            $smarty->assign('characters', array(
            array('name' => $row['name'], 'hp' => $row['hp'], 'mp' => $row['mp'],'gold' => $row['gold'],'level' => $row['level'],'xp' => $row['xp']),
            ));
            }
        $smarty->assign('tekst', ""); 
        }
    else { 
    $smarty->assign('tekst', "U heeft nog geen characters aangemaakt" );
        mysql_close($con);
    }


Het probleem is dat je meerdere characters aan kan maken, die staan ook netjes in de database met allemaal hetzelfde player_id. alleen de output geeft maar 1 row terug? dit terwijl hij wel ziet dat er meerdere rows zijn. Heeft iemand een idee in welke richting ik dit zou moeten zoeken want ik zou echt niet weten wat ik fout doe.

Ik heb al geprobeerd heel smarty hier buiten te laten en alles gewoon te echo'en maar ook dan geeft hij maar 1 row terug

Acties:
  • 0 Henk 'm!

  • Jeffroiscool
  • Registratie: December 2006
  • Laatst online: 26-04-2024

Jeffroiscool

Proud DD Member! :D

Geef eens een dump van je tabel, wellicht kunnen we hier meer uit halen.

League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W


Acties:
  • 0 Henk 'm!

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 18:27
Ik ben niet helemaal op de hoogte van smarty, maar overschrijf je met $smarty->assign nu niet de hele tijd dezelfde variabel? Het lijkt erop dat "characters" met elke row wordt overschreven.
PHP:
1
$smarty->assign('characters', 'value');


Edit: schijnbaar niet omdat je het ook al buiten smarty om hebt geprobeerd, laatste regel van de TS niet gelezen, sorry.

[ Voor 20% gewijzigd door IceM op 16-03-2011 11:43 ]

...


Acties:
  • 0 Henk 'm!

  • RMX
  • Registratie: Augustus 2000
  • Laatst online: 18-09 21:56

RMX

Inderdaad, de assign dien je te doen nadat je een array hebt opgebouwd.
Je kunt ook mysql_fetch_assoc gebruiken, en die meteen assignen, en in je template loopen

Acties:
  • 0 Henk 'm!

  • Alwinonline
  • Registratie: Mei 2009
  • Niet online
Dit is een dump van de db:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
===Database game

== Tabelstructuur voor tabel characters

|------
|Veld|Type|Null|Standaardwaarde
|------
|name|varchar(65)|Nee|
|hp|int(11)|Nee|100
|hp_max|int(11)|Nee|100
|mp|int(11)|Nee|100
|mp_max|int(11)|Nee|100
|xp|int(11)|Nee|1
|xp_max|int(11)|Nee|50
|level|int(11)|Nee|1
|gold|int(11)|Nee|0
|gold_max|int(11)|Nee|500
|player_id|int(11)|Nee|
|//**id**//|int(11)|Nee|
== Gegevens worden uitgevoerd voor tabel characters

|Alwin2|100|100|100|100|1|50|1|0|500|1|2
|Alwin|100|100|100|100|1|50|1|0|500|1|3


en het lijkt er wel op dat de dingen worden overschreven omdat hij alleen de laatste record toont alleen weet ik niet precies hoe ik dat zou moeten oplossen?

Acties:
  • 0 Henk 'm!

  • Spiked
  • Registratie: Mei 2008
  • Laatst online: 17-09 15:30
Je kan alle results eerst in een tijdelijke array stoppen, en vervolgens deze array doorgeven als 'characters' in smarty. In je template moet je dan een foreach loop opzetten voor de regels van je tabel.

Nu overschrijf je de variabele 'characters' bij elke smarty->assign, waardoor je alleen de laatste waarde doorgeeft.

[ Voor 22% gewijzigd door Spiked op 16-03-2011 11:51 . Reden: Extra info toegevoegd ]


Acties:
  • 0 Henk 'm!

  • Alwinonline
  • Registratie: Mei 2009
  • Niet online
Ik dacht dat ik dat op deze manier had gedaan? in mijn template staat op dit moment al dit:
HTML:
1
2
3
4
5
6
7
8
9
10
{foreach $characters as $character}
<tr>
<td>{$character.name}</td>
<td>{$character.hp}</td>
<td>{$character.mp}</td>
<td>{$character.gold}</td>
<td>{$character.level}</td>
<td>{$character.xp}</td>
</tr>
{/foreach}


Mijn excuses voor de misschien wat domme vragen maar arrays zijn compleet nieuw voor mij en ik dacht dat ik de theorie er achter wel door had helaas blijkt dat niet het geval te zijn.

[ Voor 21% gewijzigd door Alwinonline op 16-03-2011 11:51 ]


Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Wat heb je qua debugging al geprobeerd?
Als je nou eens ipv de smarty assign op dat moment de row echo'ed, zie je er dan wel meerdere?

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

  • Alwinonline
  • Registratie: Mei 2009
  • Niet online
Als ik de row echo in de while loop dan ziet hij wel alles inderdaad (apart ik had dit net ook geprobeerd maar toen deed hij er maar 1.. waarschijnlijk toch iets fout gedaan)

Acties:
  • 0 Henk 'm!

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 18:27
Wat je bijvoorbeeld kan doen is iets in de trant van dit:
PHP:
1
2
3
4
5
$characters = array();
while($row = mysql_fetch_assoc($result)) {
    array_push($characters, $row);
}
$smarty->assign('characters', $characters);


Ben niet helemaal into PHP/smarty, dus het zou kunnen zijn dat er een betere oplossing is

...


Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 20:16
Je moet op deze manier denken:
code:
1
2
3
4
5
6
$tijdelijke_array = Array();
while ( fetch_row)
{
  $tijdelijke_array[] = Array(foo=>bar)
}
->assign $tijdelijke_array

offtopic:
hm volgende keer even op F5 drukken als ik een topic langer open heb staan...

[ Voor 21% gewijzigd door mcDavid op 16-03-2011 12:14 ]


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Wat doet die mysql_close op regel 16?

Acties:
  • 0 Henk 'm!

  • Alwinonline
  • Registratie: Mei 2009
  • Niet online
HuHu schreef op woensdag 16 maart 2011 @ 12:23:
Wat doet die mysql_close op regel 16?
verkeerd gepaste, 16 en 17 zijn omgedraaid.

@derest bedankt, ik ga weer verder proberen

Acties:
  • 0 Henk 'm!

  • Alwinonline
  • Registratie: Mei 2009
  • Niet online
Bedankt iedereen, het is gelukt op de volgende manier:
PHP:
1
2
3
4
5
6
        $characters =array();
        while($row = mysql_fetch_array($result))
            {
                array_push($characters, $row);
            }
        $smarty->assign('characters', $characters);


Heeft iemand nog een goed stuk leesvoer over arrays? ik begrijp er toch een stuk minder van dan ik dacht
Pagina: 1