PHP functies en mysql_fetch_assoc

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Non Actief

Non Actief

11/11/2011 18:02:47
Quote Anchor link
Hoi,

ik was bezig met het maken van een overzicht van verschillende waardes voor een spel.
De waardes moesten verticaal opgesteld worden, er moet dus steeds voor elke waarde een tabel cel aangemaakt worden.
Dit doe ik door middel van de functie information().
Helaas werkt dit niet, ik denk dat dit komt omdat mysql_fetch_assoc() maar één keer kan worden aangeroepen.

Heeft iemand hier ervaring mee of een oplossing voor?
NOTE: de HTML is verkort!

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php

function resources()
{

    $con = mysql_connect('localhost', 'root', 'password') or die(mysql_error());
    mysql_select_db('matman_test', $con) or die(mysql_error());
    $query = mysql_query("SELECT * FROM resources");
    if(mysql_num_rows($query) != 0)
    {

        session_start();
        $_SESSION['count'] = 0;
        function
information($query)
        {
    $data = null;
            $dataa = array('Currency', 'Iron', 'Iron2', 'Grain', 'Grain2', 'WQ1(LC)', 'WQ1(G)', 'WQ2(LC)', 'WQ2(G)', 'WQ3(LC)', 'WQ3(G)', 'WQ4(LC)', 'WQ4(G)', 'WQ5(LC)', 'WQ5(G)', 'GQ1(LC)', 'GQ1(G)', 'GQ2(LC)', 'GQ2(G)', 'GQ3(LC)', 'GQ3(G)', 'GQ4(LC)', 'GQ4(G)', 'GQ5(LC)', 'GQ5(G)', 'FQ1(LC)', 'FQ1(G)', 'FQ2(LC)', 'FQ2(G)', 'FQ3(LC)', 'FQ3(G)', 'FQ4(LC)', 'FQ4(G)', 'FQ5(LC)', 'FQ5(G)');
            $word = $dataa[$_SESSION['count']];
            while($data = mysql_fetch_assoc($query))
            {

                if($data[$word] == "" || $data[$word] == 0)
                {

                    echo '<td class="empty">&nbsp;</td>';
                }

                else
                {
                    echo '<td class="full">'.$data[$word].'</td>';
                }

                $_SESSION['count']++;
            }

            return;
        }

        echo '
        <table cellspacing="0" border="0" class="content">
        <tr>
            <td colspan="3">Land:</td>'
;
            while($data2 = mysql_fetch_assoc($query))
            {

                echo '<td class="full">'.$data2['Country'].'</td>';
            }

            echo '
        </tr>
        <tr>
            <td align="center">Currency</td>
            <td colspan="2">LC in G</td>'
;
            information($query);
            echo '
        </tr>
        <tr>
            <td rowspan="2">Iron:</td>
            <td>&nbsp;</td>
            <td>LC</td>'
;
            information($query);
            echo '
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td>G</td>'
;
            information($query);
            echo '
        </tr>
        <tr>
            <td align="center" rowspan="10">Weapons</td>
            <td rowspan="2">Q1</td>
            <td>LC</td>'
;
            information($query);
            echo '
        </tr>
        <tr>
            <td>G</td>'
;
            information($query);
            echo '
        </tr>
        <tr>
            <td rowspan="2">Q2</td>
            <td>LC</td>'
;
            information($query);
            echo '
        </tr>
        <tr>
            <td>G</td>'
;
            information($query);
            echo '
        </tr>
        <tr>
            <td rowspan="2">Q3</td>
            <td>LC</td>'
;
            information($query);
            echo '
        </tr>
        <tr>
            <td>G</td>'
;
            information($query);
            echo '
        </tr>
        <tr>
            <td rowspan="2">Q4</td>
            <td>LC</td>'
;
            information($query);
            echo '
        </tr>
        <tr>
            <td>G</td>'
;
            information($query);
            echo '
        </tr>
        <tr>
            <td rowspan="2">Q5</td>
            <td>LC</td>'
;
            information($query);
            echo '
        </tr>
        <tr>
            <td>G</td>'
;
            information($query);
            echo '
        </tr>
        </table>
        '
;
        //$_SESSION['count'] = 0;
    }
    else
    {
        die('Er staat niks in de database!');
    }
}


?>

<html>
<head>
<title>e-sim resources module</title>
<link rel="stylesheet" href="css/stylesheet.css" media="screen" />
</head>
<body>
<?php

resources();

?>

<br />
<a href="insert.php">Invoegen</a>
</body>
</html>


Afbeelding
Gewijzigd op 11/11/2011 19:33:54 door Non Actief
 
PHP hulp

PHP hulp

28/11/2024 03:03:12
 
- Ariën  -
Beheerder

- Ariën -

11/11/2011 18:10:13
Quote Anchor link
Zet je script a.u.b. even tussen code-tags.
 
- SanThe -

- SanThe -

11/11/2011 18:10:41
Quote Anchor link
Volgens mij is je script zeer onlogisch opgebouwd.

Toevoeging op 11/11/2011 18:15:18:

Matthijs Veldhuizen op 11/11/2011 18:02:47:
... ik denk dat dit komt omdat mysql_fetch_assoc() maar één keer kan worden aangeroepen


Dat is niet waar.
Jij roept mysql_fetch_assoc() (door jouw onlogische constructie) misschien wel honderden keren aan. Dat houdt in dat ie allang geen records meer heeft.

Toevoeging op 11/11/2011 18:19:19:

Ik hoop ook dat dit ('WQ1(LC)', 'WQ1(G)', 'WQ2(LC)') geen veldnamen zijn in de database.
 
Non Actief

Non Actief

11/11/2011 19:00:47
Quote Anchor link
- SanThe - op 11/11/2011 18:10:41:
Volgens mij is je script zeer onlogisch opgebouwd.

Toevoeging op 11/11/2011 18:15:18:

Matthijs Veldhuizen op 11/11/2011 18:02:47:
... ik denk dat dit komt omdat mysql_fetch_assoc() maar één keer kan worden aangeroepen


Dat is niet waar.
Jij roept mysql_fetch_assoc() (door jouw onlogische constructie) misschien wel honderden keren aan. Dat houdt in dat ie allang geen records meer heeft.

Toevoeging op 11/11/2011 18:19:19:

Ik hoop ook dat dit ('WQ1(LC)', 'WQ1(G)', 'WQ2(LC)') geen veldnamen zijn in de database.


SanThe,
noem a.u.b. ook verbeteringen i.p.v. alleen kritiek
the $dataa array zijn wel veldnamen in de database.
Gewijzigd op 11/11/2011 19:01:55 door Non Actief
 
- Ariën  -
Beheerder

- Ariën -

11/11/2011 19:10:46
Quote Anchor link
WQ1(LC)', 'WQ1(G)', 'WQ2(LC)

Klinkt als een slecht opgestelde (genormaliseerde) database...
 
Non Actief

Non Actief

11/11/2011 19:12:38
Quote Anchor link
- Aar - op 11/11/2011 19:10:46:
WQ1(LC)', 'WQ1(G)', 'WQ2(LC)

Klinkt als een slecht opgestelde (genormaliseerde) database...


wat zou er speciaal aan moeten zijn dan? :P
btw: heeft iemand ook een eventuele oplossing voor mn probleem? :P
 
- SanThe -

- SanThe -

11/11/2011 19:13:11
Quote Anchor link
Ik wil graag verbeteringen geven, maar het zit, mijns inziens, zo vreemd in elkaar dat het moeilijk te volgen is. Bij die databasenamen zou ik de haakjes weghalen, eventueel vervangen door een underscore. Haakjes horen daar gewoon niet.

$word komt uit het array met de veldnamen. Dus in onderstaand stukje kijk je alleen naar één veld. Dit terwijl je met de while alle records ophaalt. Na de allereerste keer dat je dit doet zijn alle records reeds opgehaald. Dus de tweede keer dat je in deze loop komt zullen er geen records meer zijn. Je zal dat moeten resetten om nognaals alle records op te halen. Maar je begrijpt dat dit een zware belasting gaat worden voor de server. Verzin een andere methode. Misschien moet je eerst alle records in een array zetten en daar verder mee werken.
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
<?php
while($data = mysql_fetch_assoc($query))
{

    if($data[$word] == "" || $data[$word] == 0)
    {

        echo '<td class="empty">&nbsp;</td>';
    }

    else
    {
        echo '<td class="full">'.$data[$word].'</td>';
    }

    $_SESSION['count']++;
}

?>


Toevoeging op 11/11/2011 19:23:22:

Zo te zien trekt deze regel al alle records weg waardoor je daarna niets meer over zal hebben.
while($data2 = mysql_fetch_assoc($query))
Gewijzigd op 11/11/2011 19:14:56 door - SanThe -
 
Non Actief

Non Actief

11/11/2011 19:24:13
Quote Anchor link
Ik had vooral problemen met het verticaal opstellen van de waardes,
horizontaal was geen probleem, maar dat is onduidelijker.

Omdat ik in html geen enkele manier ken om zomaar een hele kolom toe te voegen raakte ik een beetje in de knoop.

Zou iemand mij eventueel kunnen helpen met een manier om een hele kolom toe te voegen, zonder 35 keer de functie information() te moeten herhalen?
Of kan ik dit toch beter horizontaal doen?
 
- SanThe -

- SanThe -

11/11/2011 19:25:24
Quote Anchor link
Als ik zo tel wil jij 14 keer alle records ophalen. Duidelijk geval van overkill.
 
Non Actief

Non Actief

11/11/2011 19:28:05
Quote Anchor link
Hier wel ja,
maar in mijn eerste post vertelde ik ook: "NOTE: de HTML is verkort!"
In totaal is het dus 36 keer, inderdaad overkill.

Ik zal de horizontale manier wel toepassen, dan hoef ik het maar 1 keer op te vragen.
Zou het volgens jullie wel mogelijk kunnen zijn om dit überhaupt verticaal te doen?
 
- SanThe -

- SanThe -

11/11/2011 19:45:23
Quote Anchor link
Ik ben aan het kijken of ik er uit kom om het zo te doen wat jij wilt. Dus wel even geduld. Leuke uitdaging, dat wel.

Toevoeging op 11/11/2011 19:58:15:

Gooi niet gelijk je eigen script weg want ik heb niks kunnen testen.

Je moet zelf bij elke information(...); even de juiste parameter neerzetten.
En dat kan zo:
information($field_array[0]);
of de veldnaam:
information('Currency');

Ik hoop dat het werkt.

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
44
45
46
47
48
49
50
51
52
53
54
55
<?php
function information($field)
{

    global $records_array;
    foreach($records_array as $record)
    {

        if($record[$field] == "" || $record[$field] == 0)
        {

            echo '<td class="empty">&nbsp;</td>';
        }

        else
        {
            echo '<td class="full">'.$record[$field].'</td>';
        }
    }
}

function
resources()
{

    global $records_array;
    $field_array = array('Currency', 'Iron', 'Iron2', 'Grain', 'Grain2', 'WQ1(LC)', 'WQ1(G)', 'WQ2(LC)', 'WQ2(G)', 'WQ3(LC)', 'WQ3(G)', 'WQ4(LC)', 'WQ4(G)', 'WQ5(LC)', 'WQ5(G)', 'GQ1(LC)', 'GQ1(G)', 'GQ2(LC)', 'GQ2(G)', 'GQ3(LC)', 'GQ3(G)', 'GQ4(LC)', 'GQ4(G)', 'GQ5(LC)', 'GQ5(G)', 'FQ1(LC)', 'FQ1(G)', 'FQ2(LC)', 'FQ2(G)', 'FQ3(LC)', 'FQ3(G)', 'FQ4(LC)', 'FQ4(G)', 'FQ5(LC)', 'FQ5(G)');
    $con = mysql_connect('localhost', 'root', 'password') or die(mysql_error());
    mysql_select_db('matman_test', $con) or die(mysql_error());
    $query = mysql_query("SELECT * FROM resources");
    if(mysql_num_rows($query) != 0)
    {

        $records_array = array();
        while($data = mysql_fetch_assoc($query))
        {

            $records_array[] = $data;
        }

        echo '
        <table cellspacing="0" border="0" class="content">
        <tr>
            <td colspan="3">Land:</td>'
;
            foreach($records_array as $record)
            {

                echo '<td class="full">'.$record['Country'].'</td>';
            }

            echo '
        </tr>
        <tr>
            <td align="center">Currency</td>
            <td colspan="2">LC in G</td>'
;
            information($field_array[0]);
            echo '
        </tr>
        <tr>
            <td rowspan="2">Iron:</td>
            <td>&nbsp;</td>
            <td>LC</td>'
;
            information($field_array[1]);
// enzovoort

?>
Gewijzigd op 11/11/2011 20:41:46 door - SanThe -
 
Non Actief

Non Actief

11/11/2011 20:34:14
Quote Anchor link
Heb hem even getest, dit is het resultaat:
Afbeelding

Met 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
function information($field)
{

    global $records_array;
    foreach($records_array as $record)
    {

        echo '<td class="full">'.$record['Country'].'</td>';
        if($record[$field] == "" || $record[$field] == 0)
        {

            echo '<td class="empty">&nbsp;</td>';
        }

        else
        {
            echo '<td class="full">'.$record[$field].'</td>';
        }
    }
}

function
resources()
{

    global $records_array;
    $field_array = array('Currency', 'Iron', 'Iron2', 'Grain', 'Grain2', 'WQ1(LC)', 'WQ1(G)', 'WQ2(LC)', 'WQ2(G)', 'WQ3(LC)', 'WQ3(G)', 'WQ4(LC)', 'WQ4(G)', 'WQ5(LC)', 'WQ5(G)', 'GQ1(LC)', 'GQ1(G)', 'GQ2(LC)', 'GQ2(G)', 'GQ3(LC)', 'GQ3(G)', 'GQ4(LC)', 'GQ4(G)', 'GQ5(LC)', 'GQ5(G)', 'FQ1(LC)', 'FQ1(G)', 'FQ2(LC)', 'FQ2(G)', 'FQ3(LC)', 'FQ3(G)', 'FQ4(LC)', 'FQ4(G)', 'FQ5(LC)', 'FQ5(G)');
    $con = mysql_connect('localhost', 'root', 'password') or die(mysql_error());
    mysql_select_db('matman_test', $con) or die(mysql_error());
    $query = mysql_query("SELECT * FROM resources");
    if(mysql_num_rows($query) != 0)
    {

        $records_array = array();
        while($data = mysql_fetch_assoc($query))
        {

            $records_array[] = $data;
        }

        echo '
        <table cellspacing="0" border="0" class="content">
        <tr>
            <td colspan="3">Land:</td>'
;
            foreach($records_array as $record)
            {

                echo '<td class="full">'.$record['Country'].'</td>';
            }

            echo '
        </tr>
        <tr>
            <td align="center">Currency</td>
            <td colspan="2">LC in G</td>'
;
            information($field_array[0]);
            echo '
        </tr>
         <tr>
            <td align="center">Iron</td>
            <td colspan="2">LC</td>'
;
            information($field_array[1]);
            echo '
        </tr>
        </table>'
;
// enzovoort
    }
}

?>

<html>
<head>
<title>e-sim resources module</title>
<link rel="stylesheet" href="css/stylesheet.css" media="screen" />
</head>
<body>
<?php

resources();

?>

<br />
<a href="insert.php">Invoegen</a>
</body>
</html>


De tabel wordt niet helemaal goed weergegeven,
hij zet steeds het land erbij? :S

Zou je ook eventueel een toelichting bij je code kunnen geven?
Aardig ingewikkeld :P
 
- SanThe -

- SanThe -

11/11/2011 20:43:09
Quote Anchor link
Ha, regel 7 moet weg.
Deze dus:
echo '<td class="full">'.$record['Country'].'</td>';
 
Non Actief

Non Actief

11/11/2011 20:52:32
Quote Anchor link
Hij doet het! :D
Nu moet ik alleen nog wat van de code snappen;
zou je me kunnen helpen? :-)
 
- SanThe -

- SanThe -

11/11/2011 20:57:30
Quote Anchor link
Regel 28-32: Daar zet ie alle gevonden records uit de database in een array().
Regel 37-40: Daar loop je door het array en echo je alleen de Country's.
Verder spring je naar de function information met de veldnaam als parameter. In de function loop je weer helemaal door het array, maar daar echo je alleen de waarden die bij de veldnaam horen.
Ik hoop dat je het een beetje snapt.
 
Non Actief

Non Actief

11/11/2011 21:05:09
Quote Anchor link
Ja ik snap het nu,
kwam een aantal dingen tegen die ik nog nooit heb gebruikt,
maar die ik zeker ga toepassen!

Hartstikke bedankt voor de hulp,
en een fijn weekend toegewenst!
 
- SanThe -

- SanThe -

11/11/2011 21:07:34
Quote Anchor link
Matthijs Veldhuizen op 11/11/2011 21:05:09:
en een fijn weekend toegewenst!


Jij ook en succes.
 



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.