webForumDet fria alternativet

Bilderna laddas inte upp

5 svar · 687 visningar · startad av streetrobban

streetrobbanMedlem sedan jan. 20011 140 inlägg
#1

Tjenare,
sitter med en kod jag hittat här på forumet. Men jag blir inte klok.

Om jag tex. väljer att ladda upp 3 bilder och klickar OK så laddas bara en av dem upp. Inte de andra två.

Kan någon hjälpa mig med den här koden?

<?php
// Mappen där bilderna ska sparas, måste avslutas med / 
$mapp = "bild1/";

// Ladda upp bilderna
if (isset($_POST['filuppladdning']))
{
	if (is_dir("$mapp")) 
{

// Loopa igenom alla poster i formuläret
$keys = array_keys($_POST);     
$i = 0;

while($i < count($keys))
{ 
	if (strlen($_POST[$keys[$i]])>0) 
	{
		// Validera formen
                if(!empty($_FILES['file']['name'])) 
                { 
			// Kopiera värden
			$file = $_FILES['file'];         

			// Kolla filtyp
			$filandelse = explode('.',$file['name']); 
			$sort = count($filandelse) - 1; 
			$so = $filandelse[$sort];

			// Tillåtna filtyper
			if (($so != 'gif') AND ($so != 'jpg') AND ($so != 'jpeg') AND ($so != 'png'))
			{   
				// Vid fel filtyp 
                        	die("<center>Fel filtyp, måste vara jpg, jpeg, gif eller png!<br>\nDu försökte ladda upp en $filandelse[$sort] fil.");
                    	}

			// Skicka filen
			if(is_uploaded_file($_FILES['file']['tmp_name'])) 
			{ 
				// Om det är rätt! 
                        	move_uploaded_file($file['tmp_name'],$mapp . $file['name']); 

                        	echo "<center><b>Klart! Bilderna är uppladdade.</b></center>\n<p>\n";
                        	echo "<table width=\"400\" border=\"0\" align=\"center\" cellspacing=\"0\" cellpadding=\"10\" bgcolor=\"#666699\">\n";
                        	echo "<tr>\n";
                        	echo "<td>Filnamn:</td>\n";
                        	echo "<td>".$file['name']."</td>\n";
                        	echo "</tr>\n";
                        	echo "<tr>\n";
                        	echo "<td>Bytes:</td>\n";
                        	echo "<td>".$file['size']."</td>\n";
                        	echo "</tr>\n";
                        	echo "</table><p>\n";
                    	}
                    	else
                    	{
                    		// Om det är fel!
				echo "<center>Något gick fel!</center><p>\n<pre>\n"; 
				print_r($file); 
                        	echo "</pre>\n";
                    	}
                }
	}
        $i++;
        }
	}
}

if (isset($_GET['ladda_upp']))
{
	?> 
	<form action="<?=$PHP_SELF?>" method="post" enctype="multipart/form-data">
	<input name="filuppladdning" type="hidden">
	<input name="antal" type="hidden" value="<?=$_GET['antal']?>">
	<table width="400" border="0" align="center" cellpadding="10" cellspacing="0" bgcolor="#666699">
	<tr> 
		<td colspan="2">
		<p>Tillåtna filtyper är; jpg, jpeg, gif och png!
		</td>
	</tr>

<?php
for ($antal=1; $antal<=$_GET['antal']; $antal++)
{
	?>
	<tr> 
		<td>
		<input type="file" name="file" value="fil<?=$antal?>">
		</td>
	</tr>
<?php
}
?>

<tr>
	<td>
	<input name="submit" type="submit" value="Ladda upp">
	</td>
</tr>
</table>
</form>

<?php
}
?>

<form action="<?=$PHP_SELF?>" method="get">
<input name="ladda_upp" type="hidden">
<table width="400" border="0" align="center" cellpadding="10" cellspacing="0" bgcolor="#666699">
<tr>
	<td colspan="2">
	Hur m&aring;nga bilder vill du ladda upp?
	</td>
</tr>
<tr> 
	<td width="120">
	<input name="antal" type="text" id="antal" size="2" maxlength="2" />
	</td>
	<td width="280">
	<input name="submit" type="submit" value="Fortsätt">
	</td>
</tr>
</table>
</form>

När jag provar att ladda upp bilder så laddas som sagt bara en bild upp. Sedan skriver den ut följande felmeddelande, på bilden som laddats upp.

Array
(
    [name] => catch_me_if_you_can.jpg
    [type] => image/jpeg
    [tmp_name] => /home/kunder/tmp/xXxxXX
    [error] => 0
    [size] => 4757
)
streetrobbanMedlem sedan jan. 20011 140 inlägg
#2

Jag provade att ändra en kodrad som följer nedan. Eftersom jag antog att varje input måste ha ett unikt namn, men då laddades INGEN bild upp och felmeddelandet försvann.

<input type="file" name="file" value="fil<?=$antal?>" class="input">

mot

<input type="file" name="file<?=$antal?>" value="fil<?=$antal?>" class="input">

Men som sagt, det funkade inte heller.

streetrobbanMedlem sedan jan. 20011 140 inlägg
#3

Jag har märkt att den alltid laddar upp den sista bilden. Oavsett hur många bilder jag laddar upp.
Väljer jag att bara ladda upp en bild så funkar detta, men jag får fortfarande samma felmeddelande.

MatteMedlem sedan aug. 20002 975 inlägg
#4

En variant på hur du kan gå tillväga: http://www.phpportalen.net/viewtopic.php?p=220551#220551

En annan är att sätta name="file[]", då får du det i en array.
Är lite osäker då om det blir $_FILES['file'][0]['tmp_name'] eller $_FILES['file']['tmp_name'][0], men det ser du om du kör print_r() på $_FILES.

streetrobbanMedlem sedan jan. 20011 140 inlägg
#5

Matte: Jag provade att ändra detta:

<input type="file" name="file" value="fil<?=$antal?>" class="input">

till

<input type="file" name="file[<?=$antal?>]" value="fil<?=$antal?>" class="input">

Men då får jag följande felmeddelande :)

Fel filtyp, måste vara jpg, jpeg, gif eller png!
Du försökte ladda upp en Array fil.
MatteMedlem sedan aug. 20002 975 inlägg
#6

Du måste loopa arrayen, t.ex. med foreach.

Eftersom jag inte kommer ihåg exakt hur arrayen ser ut, tycker det borde vara ena varianten men har för mig det är den andra varianten, kan jag inte säga exakt hur din loop ska se ut.

Lägg in följande någonstans i början på din sida.

echo "<pre>";
echo "\$_FILES: ";
print_r($_FILES);
echo "</pre>";

Vad får du utskrivet när du försöker ladda upp flera filer ?

Det räcker med att du använder name="file[]". Finns ingen anledning att lägga in ett index.

134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)