output van Switch Case geeft niet alle waardes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Thomas de vries

thomas de vries

26/11/2013 09:21:27
Quote Anchor link
Goedemorgen PHPers,

Ik zit met het volgende

In de Database heb ik 2 velden met een x waarde erin.
Nu haal ik deze waardes op en plaats ze in een switch case.
Als ik deze ga echoën in dat script zelf dan krijg ik idd 2 gegevens te zien.
Echter als ik deze script include in een andere script dan krijg ik maar 1 waarde te zien.

Hieronder een voorbeeld


[defineAttribute.php]
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
<?php
database("ITEM_DBF");
$sql = "SELECT dwDestParam1,dwDestParam2,nAdjParamVal1,nAdjParamVal2 FROM ITEM_TBL WHERE [Index] = '".$Func->Escape($_GET['sid'])."'";
if(!$res = mssql_query($sql))
{

    echo mssql_get_last_message();
}

else
{
    $test1 = mssql_fetch_assoc($res);
    $test2 = array(
    $test1['dwDestParam1'] => $test1['nAdjParamVal1'],
    $test1['dwDestParam2'] => $test1['nAdjParamVal2']
    );

    
    foreach( $test2 AS $key => $val)
    {

        switch($key)
        {
            case
1: $stat = "STR"; break;
            case
2: $stat = "DEX"; break;
        }

        
        echo $stat.$val // Geeft als output STR 25 DEX 30
                $Attri = $stat.$val; //Om weer te geven in attribute.php
    }
}

?>


[attribute.php]
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
<?php
database("ITEM_DBF");
$sql = "SELECT * FROM ITEM_TBL WHERE [Index] = '".$Func->Escape($_GET['sid'])."'";
if(!$res = mssql_query($sql))
{

    echo mssql_get_last_message();
}

else
{
    $result = mssql_fetch_assoc($res);
    
    include('inc/defineAttribute.php');
    
    echo '<td><textarea name="effects">'.$Attri.'</textarea></td>'; //Deze geeft echter maar 1 waarde aan en dat is de eerste
}
?>


Kan dit komen omdat ik de foreach include ipv deze eerst aan te maken in attribute.php om daarna in die foreach de defineAttribute.php te includen?

Met vriendelijke groet

Thomas de Vries
Gewijzigd op 26/11/2013 09:22:26 door Thomas de vries
 
PHP hulp

PHP hulp

23/04/2024 08:57:58
 
Kris Peeters

Kris Peeters

26/11/2013 09:54:43
Quote Anchor link
Ik zie dit in de foreach:

$Attri = $stat.$val; // Om weer te geven in attribute.php

Bij elke iteratie van de lus wordt die waarde overschreven

-----

Wat is de bedoeling? Alles achter mekaar printen?

Dan doe je dit, in defineAttribute.php
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
<?php
...
$Attri = '';
    foreach( $test2 AS $key => $val)
    {

        switch($key)
        {
            case
1: $stat = "STR"; break;
            case
2: $stat = "DEX"; break;
        }

        
        echo $stat.$val // Geeft als output STR 25 DEX 30
        $Attri .= $stat.$val;  //door die .= wordt de waarde telkens geplakt aaan de vorige //Om weer te geven in attribute.php
    }
...

?>
 
Thomas de vries

thomas de vries

26/11/2013 22:16:40
Quote Anchor link
Bedankt Kris dit heeft inderdaad geholpen.

Ik zit nu echter met het volgende probleem
Ik ben er achter gekomen dat een array met key waarde niet dezelfde key kan bevatten.

ik bedoel dan dit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$test2
= array(
        $result['dwDestParam1'] => $result['nAdjParamVal1'], //Geeft 10003 => 90
        $result['dwDestParam2'] => $result['nAdjParamVal2'], //Geeft 52 => 10
        $result['dwDestParam3'] => $result['nAdjParamVal3'], //Geeft 10 => 15
        $result['dwDestParam4'] => $result['nAdjParamVal4'], //geeft 20 => 5
        $result['dwDestParam5'] => $result['nAdjParamVal5'], //Geeft 20 => 8
        $result['dwDestParam6'] => $result['nAdjParamVal6']  //Geeft 20 => 100
    );
?>


dan doe ik dit

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
<?php
foreach( $test2 AS $key => $val)
    {

        switch($key)
        {
            case
0: $stat = "NULL"; break;
            case
52: $stat = "STR"; break;
            case
10: $stat = "DEX"; break;
            case
20: $stat = "INT"; break;
            case
10003: $stat = "All Stats"; break;
            
            default:
$stat = ""; break;
        }

        
        echo $stat.$val //
    }
?>


Echter geeft dit alleen de eerste 3 waardes van de array door.

Hoe kan ik dit toch goed krijgen?
 
Kris Peeters

Kris Peeters

27/11/2013 10:26:38
Quote Anchor link
Thomas de vries op 26/11/2013 22:16:40:
Ik ben er achter gekomen dat een array met key waarde niet dezelfde key kan bevatten.


Ja, dat klopt. Daar kan je niets aan veranderen.

als je $test2[20] opvraagt, wil je maar 1 waarde krijgen. Je kan daar geen twee of drie waarden tegelijk steken.

----

Dus... je zal het anders moeten aanpakken.

Wat ben je eigenlijk aan het maken? Wat moet het eindresultaat zijn?
 
Thomas de vries

thomas de vries

27/11/2013 10:50:37
Quote Anchor link
Hmm ok dan moet ik het inderdaad anders doen.

Nou ik zal het proberen uit te leggen.

in de database ITEM_DBF is een tabel ITEM_TBL met een x aantal fields zal er een paar opnoemen die ik ook nodig heb.
dwDestParam1, dwDestParam2, dwDestParam3, dwDestParam4, dwDestParam5, dwDestParam6 en
nAdjParamVal1, nAdjParamVal2, nAdjParamVal3, nAdjParamVal4, nAdjParamVal5, nAdjParamVal6

de dwDestParam velden hebben een int value bijvoorbeeld 1, 2, 10003, 6, 7, 9
de nAdjParamVal hebben ook een int value bijvoorbeeld 40, 10, 20, 20, 30, 5

de DestParam moeten worden gelinkt aan een string dus zo
1 staat voor STR
2 staat voor DEX
10003 staat voor All Stats Up enz

Daarvoor had ik dus die switch statement

de AdjParamVal zijn de values voor de strings
Dus krijgen we dit
STR 40
DEX 10
All Stats Up 20 enz...

echter in een text veld kunnen dus meerdere strings met values staan.
Dus als ik het oproep dan krijgen we bijvoorbeeld dit

SELECT (de velden) FROM ITEM_TBL WHERE Index = '1'
{ rest van de code }

dan wil ik via een textarea veld de gegevens inladen
<textarea name="attribute">'.$result.'</textarea>

Hopelijk is dit te begrijpen wat ik hier neer heb gezet.

Met vriendelijke groet,

Toevoeging op 27/11/2013 11:30:46:

Ik heb het gevonden. Dit werkt zoals het hoort

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
<?php

include("../inc/config.php");
database("ITEM_DBF");
$sql = "SELECT * FROM ITEM_TBL WHERE [Index] = '20360'";
if(!$res = mssql_query($sql))
{

    echo 'Error';
}

else
{
    $test = mssql_fetch_assoc($res);
    
    $intAttributeArray = array();
    if($test['dwDestParam1'] != '-1')
    {

        $intAttributeArray[$test['dwDestParam1']] = $test['nAdjParamVal1'];
    }

    if($test['dwDestParam2'] != '-1')
    {

        $intAttributeArray[$test['dwDestParam2']] = $test['nAdjParamVal2'];
    }

    if($test['dwDestParam3'] != '-1')
    {

        $intAttributeArray[$test['dwDestParam3']] = $test['nAdjParamVal3'];
    }

    if($test['dwDestParam4'] != '-1')
    {

        $intAttributeArray[$test['dwDestParam4']] = $test['nAdjParamVal4'];
    }

    if($test['dwDestParam5'] != '-1')
    {

        $intAttributeArray[$test['dwDestParam5']] = $test['nAdjParamVal5'];
    }

    if($test['dwDestParam6'] != '-1')
    {

        $intAttributeArray[$test['dwDestParam6']] = $test['nAdjParamVal6'];
    }

    
    $test4 = $intAttributeArray;
    
    foreach($intAttributeArray AS $key => $val)
    {

        //include("../inc/defineAttribute.php");
        switch($key)
        {
            case
9: $stat = "STR:"; break;
            case
24: $stat = "DEX:"; break;
            case
77: $stat = "SPEED:"; break;
            case
52: $stat = "HP Rate %"; break;
            case
10003: $stat = "All Stats Up:"; break;
            default:
$stat = ""; break;
        }

        echo $stat.'&nbsp;'.$val.'&nbsp;<br />';
    }

    echo serialize($intAttributeArray);
}

?>
Gewijzigd op 27/11/2013 10:51:35 door thomas de vries
 



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.