output van Switch Case geeft niet alle waardes
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)
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
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
}
}
?>
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
}
?>
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
$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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
}
...
?>
...
$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
}
...
?>
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)
1
2
3
4
5
6
7
8
9
10
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
);
?>
$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)
Echter geeft dit alleen de eerste 3 waardes van de array door.
Hoe kan ik dit toch goed krijgen?
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?
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)
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
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.' '.$val.' <br />';
}
echo serialize($intAttributeArray);
}
?>
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.' '.$val.' <br />';
}
echo serialize($intAttributeArray);
}
?>
Gewijzigd op 27/11/2013 10:51:35 door thomas de vries