Toon posts:

PHP 'dynamische tabel' tekst verschijnt boven ip in tabel

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Hallo allemaal,

Ik zit ben bezig met het maken van wat ik een 'dynamische ' tabel noem, die hoofdzakelijk data uit een mysql database weergeeft. Zo sla ik een integer op in de database bij elke user. Die staat voor een bepaalde status:
VB '1' staat voor 'nieuw'
'2' staat voor 'al beken'
enzovoort. Dit leek me veiliger en gemakkelijker.
In mijn tabel wil ik natuurlijk niet deze nietszeggende cijfers, maar een betekenishebbende zin. Geen probleem, ik maak gewoon een simpele functie die dat omzet
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
    function echoStatus($int){
        switch ($int){
                            case 0:
                                $feedback="<strong>Nieuw</strong>";
                                break;
                                
                            case 1:
                                $feedback="<strong>Al Gedownloaded</strong>";
                                break;
                            
                            case 2:
                                $feedback="<strong>Al Ingediend.</strong>";
                                break;
                            
                            case 3:
                                $feedback="<strong>Te laat.</strong>";
                                break;
                            
                            default:
                                die('An error has occured');
                        
                        
                    }
        echo $feedback;
        
    }


De tabel wordt dan zo gemaakt

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$query = "SELECT * FROM taken ORDER by id ASC ";
$rows=$mysqli->query($query)->num_rows;

if ($result = $mysqli->query($query)) {

    /* fetch associative array */
    while ($row = $result->fetch_assoc()) {
        echo" <tr>
    <td>".$row['naam']."</td>
    <td>".echoStatus($row['status_leerling_1'])."</td>
    <td>".echoStatus($row['status_leerling_2'])."</td>
    <td>".echoStatus($row['status_leerling_3'])."</td>
    <td>".echoStatus($row['status_leerling_4'])."</td>
    <td>".echoStatus($row['status_leerling_5'])."</td>
    <td>".echoStatus($row['status_leerling_6'])."</td>
    <td>".echoStatus($row['status_leerling_7'])."</td>
    <td>".echoStatus($row['status_leerling_8'])."</td>
    <td>".echoStatus($row['status_leerling_9'])."</td>
    <td>".echoStatus($row['status_leerling_10'])."</td>
  </tr>";


Dit lijkt allemaal logisch en correct, totdat ik de pagina bekijk in mijn browser: alle data van de statussen staat in één grote string geplakt boven de tabel, en de cellen in de tabellen (waar de data dus zou moeten staan) blijft leeg.

Hopelijk is dit niet te abstract en heeft iemand weet van dit probleem.
Alvast bedankt :)

  • aaajeetee
  • Registratie: Augustus 2002
  • Laatst online: 01-11 13:15
Ik zou denk ik de echo uit de functie halen en de functie de string laten returnen. Je doet namelijk al een echo in je while ;)

  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

en voor die cases maak je natuurlijk gewoon een extra tabel

lijky me ook dat er het een en ande geclosed moet worden. anders houd het gauw op met je verbindingen naar je database

[ Voor 50% gewijzigd door Fish op 04-10-2013 19:18 ]

Iperf


  • Ahrnuld
  • Registratie: April 2002
  • Laatst online: 06:52
Hmm ja, echo op regel 24 moet return worden.

Als je helemaal los wilt gaan kan je inderdaad, zoals fish al aangeeft, een extra tabel maken met de statusteksten, en die vervolgens in je query joinen met de takentabel. Dan heb je ook geen extra echoStatus functie nodig.

Niets...


  • vistu
  • Registratie: Januari 2007
  • Laatst online: 14:56
Die echo dient inderdaad te vervangen worden door een return; naast het gebruiken van een losse tabel voor de statussen is het misschien ook een idee om de status per leerling in een tabel los op te slaan. Dat is een stuk beter uit te breiden dan elke keer een kolom 'leerling_x' toe te voegen (hoe wil je dat doen bij 900 leerlingen?).

  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

yup


dus ik zou deze kant op gaan om het een beetje flexibel (dynamisch ?) te houden


Tabel Status:

id | ContactId | OpdrachtId | StatusId | Status | TimeIserted | TimeDeleted* |
------------------------------------------------------------------------------------------
* Optioneel kun je gebruiken voor softdeletes


Tabel Contact

id | ContactId | Eigenschap1 | .. | .. | Eigenschap n** | TimeIserted | TimeDeleted* |
-----------------------------------------------------------------------------------------------------------------------
** De eigenschapnamen kun je ook weer onderbrengen in een andere tabeldan verwijs je naar een eigenschapid


Tabel StatusId

Id | Statusdescription | TimeIserted | TimeDeleted* |
--------------------------------------------------------------------------


Tabel Tasks
id | Task | Taskdetails | TimeIserted | TimeDeleted* |
-------------------------------------------------------------------------------------

Tabel AssigndTasks

leerlingId | Taskid | TimeIserted | TimeDeleted* |
-------------------------------------------------------------------------------------

[ Voor 3% gewijzigd door Fish op 04-10-2013 19:40 ]

Iperf


Verwijderd

Topicstarter
bedankt voor de snelle reacties :)
Ik heb de echo op r24 vervangen door return.
Hierna blijkt alles vlekkeloos te werken.

thanks again!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
• Occurred is met dubbel 'r'.
• Als je bij elke status er <strong> tags om heen zet, kan je dat net zo goed 1x dichter bij de rest vd html doen.
• Maak dan ook een loop van het aantal leerlingen, dan hoef je uberhaupt alles maar 1x ipv 10x neer te zetten.
• Kolom per leerling is niet handig, heb je elke keer werk als er een leerling weg gaat of bij komt. Een beter datamodel heeft aparte tabellen voor leerlingen, toetsen en scores (1 score row per leerling per toets).
/* fetch associative array */ voegt niets toe, functie heeft 'fetch' en 'assoc' in de naam: Als je dat niet begrijpt begrijp je de comment ook niet. :P

[ Voor 15% gewijzigd door Voutloos op 04-10-2013 20:35 ]

{signature}


  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Verwijderd schreef op vrijdag 04 oktober 2013 @ 20:10:
bedankt voor de snelle reacties :)
Ik heb de echo op r24 vervangen door return.
Hierna blijkt alles vlekkeloos te werken.

thanks again!
Snap je nu ook waarom het verkeerd gaat dan?

De vorige oplossing ging fout omdat je een string aan het samenstellen was. Als je een string samenstelt worden de functies die je in je voorbeeld gebruikt aanroept eerder uitgevoerd dan de echo van die string. Het is nogal belangrijk te snappen hoe je programma werkt. Ik weet niet of er tegenwoordig voor PHP fatsoenlijke debuggers zijn maar je moet de flow van je programma kunnen begrijpen om fouten te vinden.

Ennuh, student_1 tm student_x kan natuurlijk echt niet :)
Voutloos schreef op vrijdag 04 oktober 2013 @ 20:32:
• Kolom per leerling is niet handig
Da's als zeggen dat de duitsers in de 2e wereldoorlog "best wel stom" deden ;)

[ Voor 13% gewijzigd door Hydra op 04-10-2013 20:47 ]

https://niels.nu


Verwijderd

Topicstarter
Dat heb ik intussen al veranderd hoor, ik had het even voluit geschreven om na te gaan of de fout daar niet verscholen zat :)
Hydra schreef op vrijdag 04 oktober 2013 @ 20:46:
[...]


Snap je nu ook waarom het verkeerd gaat dan?

De vorige oplossing ging fout omdat je een string aan het samenstellen was. Als je een string samenstelt worden de functies die je in je voorbeeld gebruikt aanroept eerder uitgevoerd dan de echo van die string. Het is nogal belangrijk te snappen hoe je programma werkt. Ik weet niet of er tegenwoordig voor PHP fatsoenlijke debuggers zijn maar je moet de flow van je programma kunnen begrijpen om fouten te vinden.

Ennuh, student_1 tm student_x kan natuurlijk echt niet :)


[...]


Da's als zeggen dat de duitsers in de 2e wereldoorlog "best wel stom" deden ;)

Verwijderd

Hydra schreef op vrijdag 04 oktober 2013 @ 20:46:
Da's als zeggen dat de duitsers in de 2e wereldoorlog "best wel stom" deden ;)
offtopic:
Tip:

Er is een verschil tussen op een vriendelijke (doch duidelijke) wijze een punt maken en iemand ergens op te wijzen, en tussen de onbeschofte en bijdehante toon die je berichten thans hebben. Je vergelijking slaat als een tang op een varken. Verder is het evident dat het "nogal belangrijk" is dat een programmeur de werking van een programma begrijpt. Ik snap werkelijk waar niet waarom je dat nogmaals benadrukt in je post. Je komt erg denigrerend en vervelend over.

  • Merethil
  • Registratie: December 2008
  • Laatst online: 13:51
Verwijderd schreef op zaterdag 05 oktober 2013 @ 18:03:
[...]


offtopic:
Tip:

Er is een verschil tussen op een vriendelijke (doch duidelijke) wijze een punt maken en iemand ergens op te wijzen, en tussen de onbeschofte en bijdehante toon die je berichten thans hebben. Je vergelijking slaat als een tang op een varken. Verder is het evident dat het "nogal belangrijk" is dat een programmeur de werking van een programma begrijpt. Ik snap werkelijk waar niet waarom je dat nogmaals benadrukt in je post. Je komt erg denigrerend en vervelend over.
Als je bekend bent met development ben je ook bekend met de mensen die dingen klakkeloos één op één overnemen en niet nadenken over WAAROM zoiets gebeurt.
Reden dat hiernaar gevraagd wordt (niet alleen door Hydra en zeker niet alleen in dit topic) is om te voorkomen dat er straks software rondslingert waarbij iemand geen verstand van zaken heeft en de zooi alleen in elkaar heeft gezet aan de hand van "aannames" en "een beetje hulp van anderen".
Je wordt er misschien zelf niet snel het doelwit van, maar er zullen geheid andere mensen (of de maker zelf) een keer tegen iets aanlopen waar de dev dan geen kennis over heeft omdat hij het stukje slechts copy-pasted heeft.

De vergelijking kan krom lijken, maar Hydra brengt het wel zoals het is: Er zit iets fout als je niet direct ook wilt weten waarom iets zo gaat als je als "dev" aangezien wil kunnen worden.
In dit geval is het toevallig zo dat de TS blijkbaar snapt waar het misgaat en wat het verschil tussen de return en de echo is, maar we komen hier zoveel gevallen tegen van mensen die dat niet weten dat de dubbelcheck vaker wordt rondgestrooid dan je zou hopen.

Trouwens, mocht je een probleem hebben met iemand of zijn opmerkingen kan je dat natuurlijk ook even aankaarten in een DM o.i.d., een topic daarvoor gebruiken omdat je nu en "wel vaker" ziet dat iemand niet altijd even vriendelijk blijft (alhoewel ik dit zeker niet onvriendelijk vond, hoogstens een minder tactische vergelijking maar verder...), aangezien je anders doodleuk dit topic loopt op te porren met nutteloze informatie.

Bovenstaande is zo hypocriet als wat dus, want ik gebruik het topic er ook voor, maar laten we het gezellig houden :)

Verwijderd

Le ton qui fait la musique. Het is m.i. prima mogelijk om anderen te helpen zonder je als een asshole te gedragen. Iets wat ik zelfs door moderators met enige regelmaat zie gebeuren. Echt te triest voor woorden. Gezellig is dit subforum allang niet meer. :)

Verwijderd

Verwijderd schreef op zondag 06 oktober 2013 @ 08:29:
Le ton qui fait la musique. Het is m.i. prima mogelijk om anderen te helpen zonder je als een asshole te gedragen. Iets wat ik zelfs door moderators met enige regelmaat zie gebeuren. Echt te triest voor woorden. Gezellig is dit subforum allang niet meer. :)
Nou nou nou, jij bent volgens mij de enige met die mening. TS is geholpen en is daar dankbaar voor. Bovenop het helpen met het probleem worden ook gelijk de andere punten van zijn programma aangekaart als zijnde niet zo slim. En de TS vindt dit blijkbaar niet erg(welke dev zou dit erg vinden? Iedereen wil zijn skills toch verbeteren :) ).

Let voordat je mensen als asshole bestempelt even op de emoticons. Hydra bedoelt het niet verkeerd en reageert gewoon vanuit ervaring op een dergelijke structuur. Juist het beoordelen van mensen zonder te vragen wat ze ermee bedoelen maakt het ongezellig. :)

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Verwijderd schreef op zondag 06 oktober 2013 @ 08:29:
Le ton qui fait la musique. Het is m.i. prima mogelijk om anderen te helpen zonder je als een asshole te gedragen. Iets wat ik zelfs door moderators met enige regelmaat zie gebeuren. Echt te triest voor woorden. Gezellig is dit subforum allang niet meer. :)
Volgens mij ben je de enige die de toon van mn bericht verkeerd geinterpreteerd heeft. Ik zal de volgende keer nog meer smileys gebruiken ;) ;) ;) ;)

https://niels.nu


  • Martijn19
  • Registratie: Februari 2012
  • Laatst online: 28-07 12:47
Kleine tip; scheid je html en php, laat je functie geen html terugsturen, maar gewoon de string. Daar word het werken met die data een stuk makkelijker van.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 03-11 20:03

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op zondag 06 oktober 2013 @ 08:29:
Le ton qui fait la musique. Het is m.i. prima mogelijk om anderen te helpen zonder je als een asshole te gedragen. Iets wat ik zelfs door moderators met enige regelmaat zie gebeuren. Echt te triest voor woorden. Gezellig is dit subforum allang niet meer. :)
Ik zie graag je commentaar tegemoet in het daarvoor bestemde topic. Los daar van is het wel genoeg off-topic geweest zo.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Ok, bedankt! Mijn code doet waarschijnlijk al verraden dat ik een begnneling ben, en dan zijn dergelijke tips meer dan welkom :)
m19 schreef op zondag 06 oktober 2013 @ 11:56:
Kleine tip; scheid je html en php, laat je functie geen html terugsturen, maar gewoon de string. Daar word het werken met die data een stuk makkelijker van.

Verwijderd

Topicstarter
Bedankt voor de tips. Zoals mijn code waarschijnlijk doet verraden, ben ik een vrij onervaren beginneling op gebied van porgrammeren, dus zo'n tips zijn welkom :)
Voutloos schreef op vrijdag 04 oktober 2013 @ 20:32:
• Occurred is met dubbel 'r'.
• Als je bij elke status er <strong> tags om heen zet, kan je dat net zo goed 1x dichter bij de rest vd html doen.
• Maak dan ook een loop van het aantal leerlingen, dan hoef je uberhaupt alles maar 1x ipv 10x neer te zetten.
• Kolom per leerling is niet handig, heb je elke keer werk als er een leerling weg gaat of bij komt. Een beter datamodel heeft aparte tabellen voor leerlingen, toetsen en scores (1 score row per leerling per toets).
/* fetch associative array */ voegt niets toe, functie heeft 'fetch' en 'assoc' in de naam: Als je dat niet begrijpt begrijp je de comment ook niet. :P

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
We quoten hier trouwens onder het bericht, niet boven ;)

https://niels.nu


  • Merethil
  • Registratie: December 2008
  • Laatst online: 13:51
Hydra schreef op zondag 06 oktober 2013 @ 20:31:
We quoten hier trouwens onder het bericht, niet boven ;)
Toch wel gek, want de cursor staat automatisch boven de quote in vanilla Tweakers :P
Pagina: 1