Ik kan een stukje PHP dat een array oplevert niet in een functie onderbrengen
Hoewel ik al een jaar of 10 met PHP bezig ben en vele forums heb doorgesnuffeld om antwoorden te vinden, heb ik nog nooit een forum gekozen om daar zelf vragen te plaatsen. Nu heb ik iets wat ik nergens kan vinden.
Ik ben nu voor het eerst echt bezig met zaken als PDO en arrays. Heb voor die tijd veel programmaregels geschreven waarvan ik nu weet dat het veel efficienter kan.
Ik heb deze functie gemaakt, komtie:
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
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
function getDataFromDB()
{
//In: nothing at the moment, 4 parameters in future
//Out: array
try{
$stmt = $conn->query('SELECT Countrycode, Country_fr FROM Country');
$Country_data = $stmt->fetchAll(PDO::FETCH_ASSOC);}
catch(PDOException $e) { echo "Country not found ";} //. $e->getMessage()
//echo 'Test'.'<pre>' . print_r($Country_data, true) . '</pre>';
$arrlength = count($Country_data);
for($x = 0; $x < $arrlength; $x++) {
$pc= $Country_data[$x]['Countrycode'];
$qc= $Country_data[$x]['Country_fr'];
$ac[]=$pc;
$bc[]=$qc;
}
$countryarray = array_combine($ac, $bc);
//print_r($countryarray);
return $countryarray;
} //end function GetDataFromDB
het stuk startend met try en eindigend op de returnregel werkt, letterlijk gecodeerd, perfect en wordt verderop in een foreach gebruikt op een invoerpagina.
De eerste print_r levert (klein stukkie):
Array
(
[0] => Array
(
[Countrycode] => A
[Country_fr] => Autriche
)
[1] => Array
(
[Countrycode] => AA
[Country_fr] => AutrrappSousRemarks
)
[2] => Array
(
[Countrycode] => AL
[Country_fr] => Albanie
)
Etc)
De tweede print_r:
Array ( [A] => Autriche [AA] => AutrrappSousRemarks [AL] => Albanie [AND] => Andorre [AO] => Angola [BE] => Belgique etc)
Zet ik het in deze functie (dus 4 regels vooraf en 1 er achteraan, dan krijg ik de array er niet uit, mijn menu blijft zichtbaar en verder is de pagina egaal groen in de gewenste stijl.
Ik probeer de aanroep zo op te pakken, buiten de functie:
$countryarray = getDataFromDB();
Wie kan helpen?
[modedit="- Aar -"]Gelieve in het vervolg bij code de [[b][/b]code][[b][/b]/code]-tags gebruiken.
[url=http://www.phphulp.nl/veel-gestelde-vragen/#bbcode]Hier[/url] kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt![/modedit]
{
//In: nothing at the moment, 4 parameters in future
//Out: array
try{
$stmt = $conn->query('SELECT Countrycode, Country_fr FROM Country');
$Country_data = $stmt->fetchAll(PDO::FETCH_ASSOC);}
catch(PDOException $e) { echo "Country not found ";} //. $e->getMessage()
//echo 'Test'.'<pre>' . print_r($Country_data, true) . '</pre>';
$arrlength = count($Country_data);
for($x = 0; $x < $arrlength; $x++) {
$pc= $Country_data[$x]['Countrycode'];
$qc= $Country_data[$x]['Country_fr'];
$ac[]=$pc;
$bc[]=$qc;
}
$countryarray = array_combine($ac, $bc);
//print_r($countryarray);
return $countryarray;
} //end function GetDataFromDB
het stuk startend met try en eindigend op de returnregel werkt, letterlijk gecodeerd, perfect en wordt verderop in een foreach gebruikt op een invoerpagina.
De eerste print_r levert (klein stukkie):
Array
(
[0] => Array
(
[Countrycode] => A
[Country_fr] => Autriche
)
[1] => Array
(
[Countrycode] => AA
[Country_fr] => AutrrappSousRemarks
)
[2] => Array
(
[Countrycode] => AL
[Country_fr] => Albanie
)
Etc)
De tweede print_r:
Array ( [A] => Autriche [AA] => AutrrappSousRemarks [AL] => Albanie [AND] => Andorre [AO] => Angola [BE] => Belgique etc)
Zet ik het in deze functie (dus 4 regels vooraf en 1 er achteraan, dan krijg ik de array er niet uit, mijn menu blijft zichtbaar en verder is de pagina egaal groen in de gewenste stijl.
Ik probeer de aanroep zo op te pakken, buiten de functie:
$countryarray = getDataFromDB();
Wie kan helpen?
[modedit="- Aar -"]Gelieve in het vervolg bij code de [[b][/b]code][[b][/b]/code]-tags gebruiken.
[url=http://www.phphulp.nl/veel-gestelde-vragen/#bbcode]Hier[/url] kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt![/modedit]
Gewijzigd op 24/02/2015 17:31:30 door - Ariën -
EDIT: ook is $conn waarschijnlijk ongedefinieerd binnen je functie?
Gewijzigd op 24/02/2015 17:20:35 door Thomas van den Heuvel
Aan Thomas: $conn is buiten de functie gedefinieerd. Is dat dan de reden dat het niet werkt?
Ik probeer de vraag nog iets scherper te maken: Waarom werkt het stukje "try" tm return zonder functie er omheen wel goed en datzelfde stuk binnen de functie niet?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$test = 'whatever';
function hoi() {
// deze functie kent het bestaan van $test niet
}
?>
$test = 'whatever';
function hoi() {
// deze functie kent het bestaan van $test niet
}
?>
Je kunt een variabele doorgeven aan een functie via een parameter of via het keyword global toegankelijk maken, al is de laatste manier niet echt aan te raden.
Dit is vrij elementaire theorie die niet echt PHP-specifiek is.
Nou, die $conn is inderdaad de bottleneck. Ondanks dat ik al heel veel jaren met PHP bezig ben en daarvoor met Clipper/dbase en nog eerder met Turbo-Pascal, ben ik geen professional en gaat er soms bijna jaar voorbij zonder dat ik veel regels programma maak. Ik kan het zelf nu niet meer voorstellen, maar ik had heel erg weinig met functies geregeld. Dat is ook precies waarom de website dreigt vast te lopen. Ik ben nu een kwaliteitsslag aan het maken en ondertussen veel bij te leren. Dank voor je hulp!. Het werkt.