[PHP] variabele-naam in een variabele *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Probleem:

ik roep een pagina op: maakzip.php?a=2&1=01.jpg&2=02.jpg


maakzip.php:
##############################
for ($i = 1; $i < ($a+1); $i++)
{
$ffn = $$i;
$handle = fopen ($ffn, "rb");
$filedata = fread($handle, filesize ($ffn));
$zipfile -> addFile($filedata, $$i);
}
##############################


$$i, dat werkt dus niet

$i is de eerste keer "1", de 2de keer als de lus doorlopen wordt "2"

op de plaats waar nu $$i staat moet de eerste keer dus "01.jpg" en de 2de keer "02.jpg" komen.

Maar hoe krijg ik dat nu voor mekaar? Ik ben radeloos!


Alvast bedankt voor de vele reacties :)

Acties:
  • 0 Henk 'm!

  • JaWi
  • Registratie: Maart 2003
  • Laatst online: 20-09 21:57

JaWi

maak het maar stuk hoor...

Statistics are like bikinis. What they reveal is suggestive, but what they hide is vital.


Acties:
  • 0 Henk 'm!

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Gebruik arrays?

$_GET[$i]

of (erg lelijk en gevaarlijk, niet doen ;)), eval:
eval("$" . $i);

[ Voor 11% gewijzigd door Radiant op 28-10-2004 18:44 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
code:
1
$_GET[$i]

Dit is inderdaad een juiste methode. $1, $2, etc zijn geen geldige variablenames volgens PHP. Een simpele oplossing is dus:
code:
1
2
3
4
5
6
7
for ($i = 1; $i < ($a+1); $i++) 
{
$ffn = $_GET[$i];
$handle = fopen ($ffn, "rb"); 
$filedata = fread($handle, filesize ($ffn));
$zipfile -> addFile($filedata, $$i); 
}

[ Voor 11% gewijzigd door GlowMouse op 28-10-2004 18:50 . Reden: dubbel dollarteken weggehaald ]


Acties:
  • 0 Henk 'm!

  • semicolon
  • Registratie: Mei 2004
  • Niet online
Zover ik weet mag een variabel niet beginnen met een cijfer.

-edit en GM was me voor :p
Daarnaast zou ik wel even alle invoer controlleren, want als je dit zo doet wordt het wel makkelijk om andere bestanden in te zippen ;)

[ Voor 64% gewijzigd door semicolon op 28-10-2004 18:51 ]

:D/-<


Acties:
  • 0 Henk 'm!

  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 19-08 08:24

PowerSp00n

There is no spoon

En als je het dan toch wil (al kun je beter een van boven genoemde oplossingen gebruiken).

PHP:
1
2
3
4
5
6
7
<?PHP

$blaat = "blahhh";
$hmmm = "blaat";
echo ${$hmmm};

?>

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Wat ik helemaal niet snap is waarom je dubbele dollartekens gebruikt.

Stel je hebt $_GET['1']="01.jpg";

$$_GET['1'] is dan de variable $01.jpg, terwijl je toch echt de waarde van $_GET['1'] zoekt, en niet de waarde van $01.jpg

[ Voor 12% gewijzigd door GlowMouse op 28-10-2004 18:54 . Reden: typo: is->ik ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt allemaal, ik ben er uit gekomen :)

maakzip.php?a=2&f_1=01.jpg&f_2=02.jpg
code:
1
2
3
4
5
6
7
8
for ($i = 1; $i < ($a+1); $i++)
{
$wat = "f_$i";
$ffn = $_GET[$wat];
$handle = fopen ($ffn, "rb"); 
$filedata = fread($handle, filesize ($ffn));
$zipfile -> addFile($filedata, $ffn);  
}


deze werkt dus!

[ Voor 21% gewijzigd door Verwijderd op 28-10-2004 19:03 ]


Acties:
  • 0 Henk 'm!

  • semicolon
  • Registratie: Mei 2004
  • Niet online
Verwijderd schreef op 28 oktober 2004 @ 19:00:
Bedankt allemaal, ik ben er uit gekomen :)

code:
1
2
3
4
5
6
7
8
for ($i = 1; $i < ($a+1); $i++)
{
$wat = "f_$i";
$ffn = $_GET[$wat];
$handle = fopen ($ffn, "rb"); 
$filedata = fread($handle, filesize ($ffn));
$zipfile -> addFile($filedata, $ffn);  
}


deze werkt dus!
oke dan, zal niet vragen waarom je de handle niet sluit (fclose) of waarom je niet gewoon file_get_contents gebruikt, maar daarvanaf:
zorg er voor dat je je gegevens controlleert, omdat anders je andere 'geheime' bestanden toegankelijk zijn ;)

:D/-<


Acties:
  • 0 Henk 'm!

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07 18:43
Ook met GET en POST kan je arrays meesturen, dat werkt wat prettiger denk ik :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
// maakzip.php?files[]=01.jpg&files[]=02.jpg

$files = $_GET['files'];

if ( is_array( $files ) )
{
    foreach ( $files as $file )
    {
        echo $file;
    }
}
?>
Pagina: 1