Avatar billede mesteren_selv Nybegynder
12. juli 2006 - 19:39 Der er 20 kommentarer og
1 løsning

Variable variable

Hej derude

Jeg arbejder på et tre-trins system til at putte hhv. tekst og billeder ind i en database. På den første side indtaster man grundoplysninger samt hvor mange billeder med tilhørende tekst man vil uploade. På næste side kommer så en form der ved hjælp af en while-løkke viser det antal taste-felter man har valgt foregående:

<form enctype="multipart/form-data" method="post"  action="ny_step3.php?pics=<? echo $pics; ?>&nyid=<?php echo mysql_insert_id(); ?>">
<?php
$antal = isset($tal) ? $tal: 0; //$tal kommer fra forrige side
while ($antal > 0) {
?>
<textarea name="tekst_<?php echo $antal; ?>"></textarea>
<input type="file" name="billede_<?php echo $antal; ?>">
<?php
$antal--;
}
?>
<input type="submit" value="Næste">
</form>

Problemet er så at få dem ind i en tabel på tredje side. Jeg sender naturligvis antallet med (vha. action="side3.php?antal=$tal"), men jeg kan ikke finde ud af at putte dem ind. Også her bruger jeg en while-løkke:

<?
$pics = isset($_GET['antal']) ? $_GET['antal']: 0;

while ($pics > 0) {
move_uploaded_file($billede_{$pics}, "/web/www.domaene.dk/www/blandet/".$billede_{$pics}_name);

mysql_query (
"INSERT INTO tabel (tekst, billede) VALUES ('$tekst_".$pics."', '$billede_".$pics."_name')"
) or die(mysql_error());

$pics--;
}
?>

Tuborg-klammerne var mit bedste bud på en løsning... Men det virker ikke... Hjælp!

På forhånd tak, Mesteren
Avatar billede mesteren_selv Nybegynder
12. juli 2006 - 19:42 #1
Ups... I formens action skulle der stå "side3.php?antal=$tal"
Avatar billede nielle Nybegynder
12. juli 2006 - 19:45 #2
Måske noget i denne stil?

$varName = 'billede_' . $pics;
move_uploaded_file($$varName, "/web/www.domaene.dk/www/blandet/".$billede_{$pics}_name);
Avatar billede nielle Nybegynder
12. juli 2006 - 19:47 #3
... eller den mere lige ud af landevejen:

$billede = $_POST['billede_' . $pics];
Avatar billede mesteren_selv Nybegynder
12. juli 2006 - 19:49 #4
Hmmm.. Kunne være... Men kan man så også lave $$varname_name? Det er jo sådan at move_uploadet_file fungerer, og problemet er også der...
Avatar billede nielle Nybegynder
12. juli 2006 - 20:03 #5
Hvis jeg ellers forstår hvad du menere korrekt:

move_uploaded_file($$varName, "/web/www.domaene.dk/www/blandet/" . $$varName . "_name");
Avatar billede nielle Nybegynder
12. juli 2006 - 20:03 #6
... men du får vel nogle problemer med filens efternavn.
Avatar billede mesteren_selv Nybegynder
12. juli 2006 - 20:04 #7
Den virker virker med $$varName så langt, at den forsøger at uploade billedet, men kommer med fejlmeddelelsen:

/tmp/phpogMXL6
Warning: move_uploaded_file(/web/www.domaene.dk/www/blandet/): failed to open stream: Is a directory in /web/www.domaene.dk/admin/side3.php on line 29

Er det et problem relateret til $$varName, eller er det nu noget andet der er galt?
Avatar billede nielle Nybegynder
12. juli 2006 - 20:07 #8
Prøv med en :

echo "/web/www.domaene.dk/www/blandet/" . $$varName . "_name";

Så ser du at resultatet er noget som godt kunne ligne en biblioteks-sti. Grunden til at koden fejler er at det sidste bibliotek i stien:

"... /" . $$varName . "_name";

sikkert slet ikke findes.
Avatar billede mesteren_selv Nybegynder
12. juli 2006 - 20:08 #9
som jeg plejer at bruge move_uploaded_file fungerer det med $variabel_name. Det er sådan jeg har fået det forklaret i tidernes morgen, altså at den automatisk opretter en variabel med filens korrekte navn og efternavn som det kalder variablens navn + _name.
Det virker mellem side 1 og side 2 hvor der uploades et thumbnail.
Avatar billede mesteren_selv Nybegynder
12. juli 2006 - 20:15 #10
Altså når man bruger type="file" i en form uploader den billedet til en midlertidig mappe på serveren og giver den et midlertidigt navn. I ovenstående fejlmeddelelse "phpogMXL6", med move_uploadet_file flytter du den så til den sti på serveren den skal ligge i og giver den sit rigtige navn igen.
Avatar billede mesteren_selv Nybegynder
12. juli 2006 - 20:22 #11
Jeg tror at problemet ligger i at den jo ikke har dannet en variabel der hedder $$varName_name, men en der hedder $billede_(det tal der nu er tale om)_name. Som det også kan ses på fejlen er der ikke noget navn efter blandet/ hvilket må betyde at variablen ikke findes...
Avatar billede nielle Nybegynder
12. juli 2006 - 20:27 #12
Hvad så med:

$varName = $billede. '_' . $pics . '_name';

echo $varName . "<br>";
echo $$varName . "<br>";
Avatar billede nielle Nybegynder
12. juli 2006 - 20:29 #13
$varName = 'billede_' . $pics . '_name';

echo $varName . "<br>";
echo $$varName . "<br>";
Avatar billede mesteren_selv Nybegynder
12. juli 2006 - 20:29 #14
Jeg har forsøgt mig med følgende:

$varName_name = 'billede_'.$pics.'_name';

move_uploaded_file($$varName, "/web/www.domaene.dk/www/blandet/".$varName_name);

Men i det tilfælde bliver værdien af $varName_name = "billede_(tal)_name"...
Jeg kan åbenbart ikke bruge $$ på den måde... Nogen forslag
Avatar billede nielle Nybegynder
12. juli 2006 - 20:32 #15
Skulle det ikke være:

move_uploaded_file($$varName, "/web/www.domaene.dk/www/blandet/" . $$varName_name);

?
Avatar billede mesteren_selv Nybegynder
12. juli 2006 - 20:38 #16
Nå jo... Det var også det jeg gjorde... Undskyld forvirringen...

Men i det tilfælde lagrer den altså åbenbart billederne under navnet billede_1_name, osv.

Jeg synes det virker mærkeligt for som jeg har forstået det skulle det behandle det som en variabel af navnet f.eks. $billede_1_name, ikke sandt?
Avatar billede mesteren_selv Nybegynder
12. juli 2006 - 20:42 #17
Ahhhhhh... Det virker!

Det var i den del der satte det ind i tabellen jeg havde glemt et $!

Point?
Avatar billede nielle Nybegynder
12. juli 2006 - 20:45 #18
De to sidste linjer i denne kodeblok udsktriver det samme:

$varName = "billede_1_name";
$$varName = "xxx";

echo $$varName . "<br>";
echo $billede_1_name . "<br>";


Variablen $varName indeholder nemlig værdien "billede_1_name", og derfor udskriver $$varName værdien af variablen billede_1_name.
Avatar billede nielle Nybegynder
12. juli 2006 - 20:45 #19
Svar :^)
Avatar billede mesteren_selv Nybegynder
12. juli 2006 - 20:49 #20
Og mange tak for hjælpen :*)
Avatar billede nielle Nybegynder
12. juli 2006 - 20:49 #21
Selv tak :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester