Presentatie van dynamische data op de website.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Jo Immanuel

Jo Immanuel

24/10/2013 19:54:21
Quote Anchor link
He Dennis,

merci. Ja, excuses hoor. PHP is nog erg moeilijk voor me, en ik raak dan al snel een beetje in paniek. Dan zie ik door alle gekke tekentjes door het bomen het bos niet meer.

Maar het is nu gelukt!

Ik heb ook "if($aantaldoelpunten > 0)" verandert in "if($aantaldoelpunten > Null)", aangezien mijn SQL-query bij geen kaarten en geen doelpunten de waarde Null geeft.

Nu werkt ie: doelpunten en kaarten onder elkaar.

Alleen mist de keeper nog. En daar begrijp ik echt helemaal niets van. Ik heb niets aan de SQL-query verandert en voor ik colspan ging gebruiken liet ie bij het testen wel gewoon 11 resultaten zien. Na het gebruik van colspan opeens maar 10 resultaten. En als ik de sql-query invoer in mysql krijg ik wel weer gewoon de keeper te zien.

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
<body>
<div id="apDiv1">
  <table border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td width="50" align="center">rugnummer</td>
      <td width="100" align="left">achternaam</td>
      <td width="50" align="right">icon</td>
      <td width="50" align="right">aantaldoelpunten</td>
    </tr>
    <?php while ($row_RSopstellingTHUIS = mysql_fetch_assoc($RSopstellingTHUIS)) { ?>
      <tr>
        <td><?php echo $row_RSopstellingTHUIS['rugnummer']; ?></td>
        <td><?php echo $row_RSopstellingTHUIS['achternaam']; ?></td>
    <?php $aantaldoelpunten = $row_RSopstellingTHUIS['aantaldoelpunten'] ?>
    <?php if($aantaldoelpunten > Null) { ?>
        <td align="right"><?php echo $row_RSopstellingTHUIS['icon']; ?></td>
        <td align="right"><?php echo $row_RSopstellingTHUIS['aantaldoelpunten']; ?></td>
      
     <?php } else { ?>
        <td colspan="2" align="right"><?php echo $row_RSopstellingTHUIS['icon']; ?></td>
        <?php } // if-statement afsluiten ?>
      </tr>
<?php } // While afsluiten ?>
  </table>
</div>
</body>

[\code]
Gewijzigd op 24/10/2013 19:56:34 door Jo Immanuel
 
PHP hulp

PHP hulp

24/11/2024 15:13:52
 
Erwin H

Erwin H

24/10/2013 19:58:24
Quote Anchor link
Als je nog hetzelfde stukje script gebruikt als op de vorige pagina dan moet je op dat script eens naar regel 51 kijken. Daar staat dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$row_RSopstellingTHUIS
= mysql_fetch_assoc($RSopstellingTHUIS);
?>

En daar gaat je keeper...... om nooit meer terug te keren.
 
Jo Immanuel

Jo Immanuel

24/10/2013 20:26:17
Quote Anchor link
Huh?

Wat gaat daar dan mis?
 
Erwin H

Erwin H

24/10/2013 20:31:57
Quote Anchor link
Als je fetcht haal je een record op uit de resultset. De pointer in die resultset gaat dan naar de volgende. Fetch je dan weer dan krijg je dat record enzovoort, enzovoort.
Elke keer dat je fetcht haal je dus een record op dat je daarna niet nog een keer kan ophalen. De fetch die je doet op regel 51 haalt dus de keeper op en die is derhalve niet meer beschikbaar in je while loop. Dan staat de pointer inmiddels bij het volgende record in je resultset.

Simpelste oplossing, gewoon die fetch op regel 51 weggooien, je doet zo te zien toch niets met de opgehaalde data. Er zijn wel andere oplossingen (ook simpele), maar als je niets met een record doet, moet je gewoon ook niet fetchen.
 
Jo Immanuel

Jo Immanuel

24/10/2013 20:43:50
Quote Anchor link
Kijk! Weggehaald en alle 11 spelers. Iedereen hartstikke bedankt!
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

24/10/2013 20:48:23
Quote Anchor link
Maar dan heb je nog steeds niets gedaan met mijn opmerking uit je andere topic.
SQL is niet bedoeld om html te genereren, maar om gegevens op te halen uit je database.
Dus je kan beter heel die CASE statement uit je SQL slopen

Maar wat je nu doet is dit: (in SQL komt dit op hetzelfde neer):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
switch $row['aantaldoelpunten'] {
    case
1:
        echo '1bal.png';
        break;
    case
2:
        echo '2bal.png';
        break;
// etc.
}
?>

Wat je uit een query binnen krijgt in PHP zijn altijd strings, dus je kunt net zo makkelijk het aantal doelpunten aan bal.png plakken.
Gewijzigd op 24/10/2013 20:48:45 door Ger van Steenderen
 
Erwin H

Erwin H

24/10/2013 20:50:46
Quote Anchor link
100% eens met Ger, genereer geen html in je query. Wat als je morgen een ander plaatje wil gaan gebruiken, dan moet je je query gaan aanpassen!
 
Jo Immanuel

Jo Immanuel

24/10/2013 21:01:43
Quote Anchor link
Beste Ger en Erwin,

Zeker een goed punt van het weghalen van het case statement. Daar ga ik straks naar kijken (eerst even voetbalwedstrijd van psv meepakken ;-))

Maar even een andere (wel gerelateerde) vraag waar ik nu opeens aan denk.

Stel nu dat iemand 1 doelpunt gescoord heeft en 1 kaart heeft gepakt. Omdat het plaatje van 1 doelpunt minder breed is dan het plaatje van bijvoorbeeld 3 doelpunten, zal er in dat geval (hoe ik het nu doe) nog steeds een witruimte zijn tussen het doelpunt en de kaart. En dat wil ik liever niet. Ik wil het liefst dat alle plaatjes (van doelpunten en kaarten) tegen elkaar aangeplakt zijn en naar rechts uitgelijnd.

Is het dan niet beter om in plaats van met twee aparte kolommen (kaarten en doelpunten) i.c.m. colspan te kiezen voor 1 kolom (kaarten + doelpunten) en die twee variabele samen te nemen met de CONCAT-functie?
Gewijzigd op 24/10/2013 21:02:38 door Jo Immanuel
 
Erwin H

Erwin H

24/10/2013 22:29:29
Quote Anchor link
Of het beter is dat mag je zelf beantwoorden, jij weet hoe je het eruit wilt laten zien.
Alleen de functie CONCAT heb je niet nodig, want vanaf nu ga je de plaatjes gewoon genereren in php en daar heb je de concat operator, ofwel de '.' .....
 
Jo Immanuel

Jo Immanuel

24/10/2013 22:53:06
Quote Anchor link
Ga ik zeker ook doen in geval van de doelpunten. Dus met sql het aantal doelpunten van elke speler ophalen en met php "<img src=" en "bal.png>" eraan vast plakken.

Maar nogmaals: het plaatje van 3 doelpunten is breder dan het plaatje van 1 doelpunt. Dus als iemand 1 doelpunt heeft gescoord en een gele kaart heeft gepakt dan is er een grotere witruimte tussen het plaatje van de kaart en het plaatje van het doelpunt dan wanneer een speler 3 doelpunten heeft gemaakt en een kaart heeft gepakt. Als je begrijpt wat ik bedoel.

Ik wil graag dat alle plaatjes van de kaarten en doelpunten in elke situatie even ver van elkaar staan. En om dat te bereiken moet ik dus denk ik wel ipv met twee aparte kolommen voor doelpunten en kaarten met 1 (middels concat) gecombineerde kolom gaan werken.

Of zie ik dat nou verkeerd?
 
Erwin H

Erwin H

25/10/2013 00:25:42
Quote Anchor link
Ja, dat zie je compleet verkeerd.

Concat is een sql functie om twee strings aan elkaar te plakken. Wat jij wil is iets dat met styling van je html pagina te maken heeft, css dus. Dat heeft niets, maar dan ook echt helemaal niets met elkaar te maken.
 
Jo Immanuel

Jo Immanuel

25/10/2013 00:59:00
Quote Anchor link
Ik heb een tabel met 4 kolommen: rugnummer (25px breed), achternaam (125px breed, links uitgelijnd), kaarten (25px rechts uitgelijnd) & doelpunten (100px, rechts uitgelijnd).
De plaatjes van een doelpunt en een kaart zijn 10px breed.

Stel:
- er is 1 speler (speler A) die alleen een gele kaart gekregen heeft
- er is 1 speler (speler B) die alleen een doelpunt gemaakt heeft
- er is 1 speler (speler C) die zowel een doelpunt als een kaart heeft.

Als ik concat gebruik is er voor speler A geen probleem. Doordat er niet gescoord is komt de kaart helemaal rechts te staan. Dat wil ik. Voor speler B is het ook prima. Doelpunt komt namelijk helemaal rechts te staan.

Maar voor speler C krijg ik dan iets wat ik liever niet wil. Het doelpunt komt dan namelijk helemaal rechts te staan en de gele kaart 90px (breedte kolom - breedte plaatje) van het doelpunt af te staan.
Ik wil dat het plaatje van de kaart tegen het plaatje van het doelpunt aan komt te staan (links van het plaatje van het doelpunt).

En dat zou ik wel met CSS kunnen bereiken door de kolom doelpunten 10px breed te maken, maar dan heb ik een probleem wanneer er een andere wedstrijd is waarin er een speler is die twee of meer keer gescoord heeft, want dan past het niet meer.

Of mis ik nu iets?
 
Jeroen Jansen

Jeroen Jansen

25/10/2013 08:26:08
Quote Anchor link
Jo,

is het misschien handiger om de kolom kaarten rechts uit te lijnen en de doelpunten links, dan komen ze (als een speler zowel een kaart als doelpunten heeft) toch bij elkaar te staan.

Of is dit te simpel gedacht?
 
Michael -

Michael -

25/10/2013 08:51:05
Quote Anchor link
Jo Immanuel op 24/10/2013 16:05:22:
He Michael,

[knip/]

Geeft geen foutmeldingen. Maar als ik hem test op mijn testserver dan krijg ik het volgende:

11x de volgende tekst:
Notice: Undefined variable: aantaldoelpunten in C:\xampp\htdocs\site-TS\oefening1asqlopstellingcolspan3.php on line 70

Lijn 70 is de volgende regel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if($aantaldoelpunten > 0) { ?>


Verder valt op dat bij de tabel de gele kaarten wel mooi naar rechts zijn uitgelijnd, alleen is het plaatje van het doelpunt niet meer te zien.

Notice is inderdaad geen foutmelding, maar hier wordt gezegd dat $aantaldoelpunten niet aangemaakt/ge-set is.
Als er niet is gescoord is het aantaldoelpunten dan 0 of leeg in de database?
In het eerste geval zal die wel worden aangemaakt en in je variabele verkeerd.
In het tweede geval kun je dit simpel oplossen met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if(isset($row_RSopstellingTHUIS['aantaldoelpunten']) && $row_RSopstellingTHUIS['aantaldoelpunten'] > 0)
?>

Je kunt die $row.. gewoon gelijk gebruiken ipv deze eerst in $aantaldoelpunten op te slaan.
Gewijzigd op 25/10/2013 08:54:15 door Michael -
 

Pagina: « vorige 1 2



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.