Beste PHP-ers.

Ik ben bezig met een script waar , gelijk bij het uploaden, 3 thumbnails gemaakt worden. kan ik natuurlijk een het script 3 keer aanroepen op 1 pagina en daarin de verschillende breedtes, hoogtes en mapnaam in opgeven. Maar ik wou eigelijk dat zoiets met een for-lus (of iets dergelijks) kon gebeuren. Hieronder staat de code wat ik geprobeerd heb.


<?php

if(isset($_POST['submit']) && isset($_POST[afbeeldingen])) 
{
    $filename = $_FILES['afbeeldingen']['name'];
	$tmp_name = $_FILES['afbeeldingen']['tmp_name'];
	
	$map_naam[0] = "klein";
	$map_naam[1] = "middel";
	$map_naam[2] = "groot";
	
	$image_breedte[0] = "100";
	$image_breedte[1] = "250";
	$image_breedte[2] = "500";
	
	for($i=0;$i<3;$i++){
	
        if(!empty($filename)) {
		
		
		
            if(is_uploaded_file($tmp_name)) 
            {           
                if(move_uploaded_file($tmp_name,'uploads/'.$filename)) {
                    $sFile = 'uploads/'.$filename;  
					$sFile2 = 'uploads/'.$map_naam[$i].'/';              
                 	chmod($sFile2,0777);
                    
                    list($width, $height) = getimagesize($sFile);
                    $newwidth = $image_breedte[$i];
                    $newheight = ($height/$width) *$newwidth;
					$sExt = explode('.',$filename);
                    $thumb = imagecreatetruecolor($newwidth, $newheight);
                    switch($sExt[1]) {
                        case 'gif':
                        $source = imagecreatefromgif($sFile);
                        $error = false;
                        break;
                        case 'jpg':
                        $source = imagecreatefromjpeg($sFile);
                        $error = false;
                        break;
                        case 'jpeg':
                        $source = imagecreatefromjpeg($sFile);
                        $error = false;
                        break;
                        case 'png':
                        $source = imagecreatefrompng($sFile);
                        $error = false;
                        break;
                        default:
                        $error = true;
                    }
                    if(!$error) {
                        imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
                        switch($sExt[1]) {
                            case 'gif':
                            imagegif($thumb, 'uploads/'.$map_naam[$i].'/'.$filename.'',100);
                            break;
                            case 'jpg':
                            imagejpeg($thumb, 'uploads/'.$map_naam[$i].'/'.$filename.'',100);
                            break;
                            case 'jpeg':
                            imagejpeg($thumb, 'uploads/'.$map_naam[$i].'/'.$filename.'',100);
                            break;
                            case 'png':
                            imagepng($thumb, 'uploads/'.$map_naam[$i].'/'.$filename.'',100);
                            break;
                        }
                        
                        echo '<img src="uploads/'.$map_naam[$i].'/'.$filename.'" alt="'.$filename.'" /><br />';
						
                    }
                }
            }
			
        }
        }             
} else {
    ?>
    <form action="" method="post" enctype="multipart/form-data"> 
    <input type="file" name="afbeeldingen" /><br /> 
 
    <input type="submit" name="submit" value="Verstuur!" />
    <?php
}
?>
Een switch inbouwen voor de breedte en hoogte?

<?php
switch($i)
{
    case 0:
        $newwidth = 50;
        $newheight = 50;
    break;
    case 1:
        $newwidth = 100;
        $newheight = 100;
    break;
    default:
        $newwidth = 150;
        $newheight = 150;
}


Edit
Een veel kortere manier, met Ternary Operator:

<?php
$newwidth = $i == 0 ? 50 : ($i == 1 ? 100 : 150);
$newheight = $i == 0 ? 50 : ($i == 1 ? 100 : 150);

0 = 50
1 = 100
? = 150

Wat doet het? Hier in een if/else statement:

<?php
if($i == 0)
{
	$newwidth = 50;
}
else
{
	if($i == 1)
	{
		$newwidth = 100;
	}
	else
	{
		$newwidth = 150;
	}
}


En dus NIET dit:
<?php
if($i == 0)
{
	$newwidth = 50;
}
elseif($i == 1)
{
	$newwidth = 100;
}
else
{
	$newwidth = 150;
}


Ook al is het resultaat hetzelfde ;)

Maar iig, ik zou voor de Ternary Operator gaan :), kort en vooral krachtig

Edit again
Wat OOK kan, is een functie maken met de functionaliteit van het thumbnailen :)
En als parameters de breedte en hoogte mee geven etc. Dan heb je een for-loop die die functie herhaalt.

Maar dan verplaats je de code eigenlijk alleen, het is een optie.
Dankjewel voor de tips!;)

Het systeempje werkt alleen nog niet. Hij heeft het één keer gedaan. Ik weet niet meer wat ik toen veranderd heb zodat hij het nu niet meer doet.
Zo werkt het (gedeeltelijk) wel. Het programma maakt nu alleen een kleine thumbnail:( dus de andere thumbs niet!

<?php
error_reporting(E_ALL);
ob_start();
if(isset($_POST['submit'])) 
{
    $filename = $_FILES['afbeeldingen']['name'];
	$tmp_name = $_FILES['afbeeldingen']['tmp_name'];
	
	
	
	
	for($i=0;$i<3;$i++){
	
			if(!empty($filename)) {
			
			
				
				if(is_uploaded_file($_FILES['afbeeldingen']['tmp_name'])) 
				{
				    
					$mapnaam = $i == 0 ? 'klein' : ($i == 1 ? 'middel' : 'groot');
					
					if(move_uploaded_file($tmp_name,'./uploads/'.$mapnaam.'/'.$filename)) {
						
					
					
					
						$sFile = 'uploads/'.$mapnaam.'/'.$filename;  
						$sFile2 = 'uploads/'.$mapnaam.'';              
						
						
						list($width, $height) = getimagesize($sFile);
						
						$newwidth = $i == 0 ? 50 : ($i == 1 ? 100 : 150);
						$newheight = ($height/$width) * $newwidth;
						$sExt = explode('.',$filename);
						$thumb = imagecreatetruecolor($newwidth, $newheight);
						switch($sExt[1]) {
							case 'gif':
							$source = imagecreatefromgif($sFile);
							$error = false;
							break;
							case 'jpg':
							$source = imagecreatefromjpeg($sFile);
							$error = false;
							break;
							case 'jpeg':
							$source = imagecreatefromjpeg($sFile);
							$error = false;
							break;
							case 'png':
							$source = imagecreatefrompng($sFile);
							$error = false;
							break;
							default: true;
						}
						if(!$error) {
							imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
							switch($sExt[1]) {
								case 'gif':
								imagegif($thumb, 'uploads/'.$mapnaam.'/'.$filename,100);
								break;
								case 'jpg':
								imagejpeg($thumb, 'uploads/'.$mapnaam.'/'.$filename,100);
								break;
								case 'jpeg':
								imagejpeg($thumb, 'uploads/'.$mapnaam.'/'.$filename,100);
								break;
								case 'png':
								imagepng($thumb, 'uploads/'.$mapnaam.'/'.$filename,100);
								break;
							}
							
							echo '<img src="uploads/'.$mapnaam.'/'.$filename.'" alt="'.$filename.'" /><br />';
							
						}else{
								echo 'Errors gesignaleerd!';
							}
					}
				}
				
			}
        }             
} else {
    ?>
    <form action="" method="post" enctype="multipart/form-data"> 
    <input type="file" name="afbeeldingen" /><br /> 
 
    <input type="submit" name="submit" value="Verstuur!" />
    <?php
}
?>

Reageren