Scripts

Afbeelding uploaden & resizen

Op veler verzoek, hierbij het aangepaste script om een afbeeling in je database te laden en meteen online een afbeelding te resizen en met BB filter + een blader functie! Voorbeeld upload script: http://www.heathernova.us/image_resize/upload_afbeelding.php Voorbeeld browser: http://www.heathernova.us/image_resize/browse.php Veel plezier, Cynthia Toegevoegd: Een voorbeeld van .htaccess voor als je een groter bestand dan 2 mb wilt uploaden.... Het filter heb ik veranderd, alleen .gif en .jpg mogen nu nog geupload worden. Het filter was : function afbeeldingen ($file_name) { return(ereg('[]0-9a-zA-Z_[-]+(.jpg)|(.gif)|(.bmp)|(.png)', $file_name)); } Gewijzigd Filter.php Filter.php kijkt nu ook naar schadelijke extensies zoals bijvoorbeeld de extensie .php Upload_afbeelding.php Schadelijke extensies, zoals de toevoeging van .php: bijvoorbeeld hallowereld.jpg.php wordt nu geweerd. Upload_afbeelding.php Toegevoegd :

afbeelding-uploaden-en-resizen
.httaccess
[code]
php_value upload_max_filesize 4M
php_value post_max_size 5M
php_value memory_limit 16M
[/code]


--- config.php ---
[code]
<?php

# configuratie bestand van mijn persoonlijke database
# waarin adres bestanden e.d. geplaatst kan worden.

// $user = je gebruikersnaam voor mysql 
// $password = het wachtwoord 
// $host = het adres van je mysql server, normaliter is dit localhost
// $dbname = de naam van je mysql database

$user= "root";
$password="";
$host="localhost";
$dbname="cynthia";

$db = mysql_connect ($host, $user, $password) or die ("Kan geen verbinding maken met de database ");
mysql_select_db ($dbname,$db);
[/code]

--- install.php ----
[code]
<?php
# voorbeeld database installatie script

// lees de waarden in van het configuratie bestand 

require_once("config.php");

// Maak de hoofd database
$resultaat = "CREATE TABLE afbeelding (nummer INT(10) NOT NULL 
                    AUTO_INCREMENT, omschrijving mediumtext, 
                   afbeelding VARCHAR(50) NOT NULL, thumbnail VARCHAR(50) NOT NULL, PRIMARY KEY (nummer))";
              
   if (mysql_query($resultaat)){
       echo "Hoofddatabase is gemaakt!";
        } else {
           echo "Het is helaas niet gelukt een tabel te maken";
       }    

?> 
[/code]

--- Upload_afbeelding.php ---

[code]
<?php
# De verwerking van de gegevens doen we gewoon 
# met een eenvoudig formulier.

# Procedure geschreven door Cynthia Fridsma
// verbind de server


// Error reporting aan 
error_reporting (E_ALL);

require_once("config.php");

// gebruik het filter voor de afbeeldingen
include ("filter.php");

# als het formulier nog niet eerder is gebruikt dan 
# wordt er een formulier getoond op je scherm.



?>
<br><br><br>
<form name="form1" method="post" action="<?php $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">

<!-- Hier komt het verborden veld 'go met de waarde 'go' -->
   <input name="go" type="hidden" value="go">
       <table width="450" border="0" bgcolor="#99CCFF" align="center">
       <tr><td bgcolor="#99CCFF">Omschrijving</td>
       <td><textarea name="omschrijving" cols="50" rows="15" id="omschrijving"></textarea></td>
    </tr>
    <tr>
      <td bgcolor="#99CCFF">Afbeelding</td>
      <td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
	    <input type="hidden" name="MAX_FILE_SIZE="100000"> 
    </tr>
    <tr>
      <td bgcolor="#99CCFF">&nbsp;</td>
      <td><input type="submit" name="Submit" value="Verzenden">
      <input type="reset" name="Reset" value="Herstellen"></td>
    </tr>
  </table>
  <p>&nbsp;</p>
</form>

<?php 


// Deze procedure wordt aangeroepen nadat men op verzenden heeft gedrukt

if (isset($_POST['go'])):

# Deze procedure zordt ervoor dat de afbeeldingen
# op je server worden geplaatst en tevens in je 
# mysql database.

// bepaal de huidige directory
$hello = getcwd();

# hier komen de afbeeldingen, als je 
# het script in de directory hallo hebt geinstalleerd
# dan worden de afbeeldingen in hallo/images/ 
# geplaatst en de thumbnails in de directory
#hallo/images/thumb/

$file_dir = ($hello . "/images/");
$thumb_dir=($hello . "/thumb/");


# converteer omschrijving en verwijder ongewenste HTML tags

// eerst gebruiken we de BB filter om de BB codes om te 
// zetten in geldige HTML varianten.
$stap1 = qcms_tags($_POST['omschrijving']);

// toegestane html tags
$allow="<b><i><u>";

// verwijder ongewenste html tags
$stap2= strip_tags($stap1, $allow);

// converteer een return in een <br> code (voor HTML).
$omschrijving = nl2br($stap2);

# we moeten natuurlijk wel zeker weten 
# dat de directory bestaat. Dit controleren wij
# met de opdracht is_dir via de volgende routine :

if (is_dir ($file_dir)) {
//  print "<br><br>++directorty bestaat";  
  }  else {  
//  print "<br><br>--Directory bestaat nog niet" . $file_dir;  
    $newpage = $file_dir;
//    echo ("<br>we gaan daarom de directory aanmaken");
    mkdir ($newpage, 0777);    
  }  


// en de thumbnail directory moet natuurlijk ook bestaan
if (is_dir ($thumb_dir)) {
  print "<br><br>++Thumbnail directorty bestaat";  
  }  else {  
  print "<br><br>--Thumbnail directory bestaat nog niet" . $thumb_dir;  
    $newpage2 = $thumb_dir;
    echo ("<br>we gaan daarom de directory aanmaken");
    mkdir ($newpage2, 0777);    
  }  


// toon de systeem datum in Nederlands formaat.
echo date("d/m/y G.i:s");


echo ("<br><br>");

# Ik heb besloten om $_FILES als een array te
# laden, zodat je (eventueel) meer afbeeldingen via
# een formulier op je server kunt plaatsen.

foreach($_FILES as $file_name => $file_array) {
       
       # Verander de bestandsnaam zodat het een geldig bestandsnaam wordt 
       # in een Linux omgeving. (Een Mac en een Windows omgeving zijn
       # veel relaxer met bestandsnaam m.b.t. spaties, hoofdletters en 
       # een mengeling van beide, maar dit geldt niet voor Linux, bovendien
       # zijn bestanden in een Linux omgeving hoofdletter gevoelig.
       
       $file_name=str_replace("'", "_", $file_array['name']);
       $file_name=str_replace("php", "_", $file_array['name']);
	   $file_name=str_replace("js", "_", $file_array['name']);
       $file_name=str_replace("asp", "_", $file_array['name']);
       $file_name=str_replace("`", "_", $file_array['name']);
 	   $file_name=str_replace(".php", "_", $file_array['name']);	
       $file_name=str_replace(" ", "_", $file_array['name']);
       $file_name=stripslashes ($file_name);
       $file_name=trim($file_name);       
       $file_name=strtolower($file_name);    
                 
       echo "path: " .$file_array['tmp_name'] . "<br>\n";
       echo "name: " .$file_name . "<br>\n";    
       echo "type: " .$file_array['type'] ."<br>\n";
       echo "size: " .$file_array['size'] ."<br>\n";
       
	   
	   # grootte van de afbeelding
	   $size =  $file_array['size'];
	   
	   if ($size >100000) :
	  		echo "Sorry maar deze afbeelding is te groot,<br>\nEen 
				  afbeelding mag maximaal 1 Mb groot zijn!";
				  
			else:		  
				  

	   
	   
       # gebruik de functie afbeeldingen (zie filter.php) om te
       # controleren of het om een afbeelding gaat.
       # de waarde van $test wordt 1 indien het een afbeelding betreft,
       # in alle andere gevallen is $test leeg.


		// beveiliging tegen uploaden van scripts
      $test_scripts = stout($file_name);      
	   if ($test_scripts ==""):
	  
	   
	   $test = afbeeldingen($file_name);	   
       if ($test !=""):
	   

	   
           echo $file_name . " dit is een afbeelding<br>";
            if (is_uploaded_file($file_array['tmp_name'])) {
			// Content type
            move_uploaded_file($file_array['tmp_name'], "$file_dir/$file_name") or die ("Couldn't copy");	 			

			# einde				 	 
				 
                 echo "Afbeelding staat op de server<br><br>";
                 // voeg de locatie + omschrijving van de afbeelding toe in de database

                 $afbeelding = "images/" . $file_name;
				 $thumbnail = "thumb/" . $file_name;
                 $query = "INSERT INTO afbeelding (nummer, omschrijving, afbeelding, thumbnail) VALUES ('', '$omschrijving','$afbeelding', '$thumbnail')";    
                    if(!mysql_db_query($dbname,$query,$db)) die(mysql_error());                      
                        echo $afbeelding . " is toegevoegd aan de database met als omschrijving : <br>";                    
									# thumbnail

			// alle afbeeldingen worden geresized op 50%
			$percent = 0.5;

	
			// Nieuwe afmetingen
			list($width, $height) = getimagesize($afbeelding);
			$newwidth = $width * $percent;
			$newheight = $height * $percent;

			// Laden van de afbeelding
			$thumb = imagecreatetruecolor($newwidth, $newheight);
			$source = imagecreatefromjpeg($afbeelding);
			
			// Resize
			imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

			// Afbeedling opslaan in de thumbs directory
			imagejpeg($thumb, $thumbnail, 75); 
			echo $_POST['omschrijving'] ;
            }

	       endif;  
		  endif;
		  // beveiliging tegen uploaden scripts
		  if ($test_scripts  !=""):
		       echo $file_name . " dit is geen afbeelding en wordt daarom niet op de server geplaatst<br>\n";      
		  endif;
		endif;
	  }

	endif;


?>

</body></html>
[/code]

---- filter.php -----

[code]

<?php
<?php
#Filter.php
# 
# Je kan deze functie zelf verder uitbreiden door
# de functie afbeeldingen te kopiƫren en aan te passen
# aan je eigen wensen.
 
# procedure geschreven door Cynthia Fridsma

// functie voor het testen van de file extensies 

function afbeeldingen ($file_name)  { 
   return(ereg('[]0-9a-zA-Z_[-]+(.jpg)|(.gif)|(.bmp)|(.png)', $file_name));   

}


// beveiliging tegen uploaden van scripts.
function stout ($file_name)  { 
   return(ereg('[]0-9a-zA-Z_[-]+(.php)|(.js)|(js)|(php)', $file_name));   

}


/*

Als je de functie gaat kopieren, dan hoef je alleen de functie naam 
aan te passen + de extensies. Bijvoorbeeld :

function geluid ($file_name)  { 
   return(ereg('[]0-9a-zA-Z_[-]+(.mp3)|(.wav)|(.wma)|(.snd)', $file_name));   

}

*/
[/code]

---- browse.php -----


[code]

<?php
# Blader functie
#
# php script ontworden door Cynthia Fridsma



error_reporting (0);
require_once("config.php");

# We gaan even overschakelen naar HTML om een stylesheet te laden
# en een Javascript om een schaduw rondom een afbeelding te tekenen
		
# Deze stylesheet en javascript heb ik gevonden op http://www.dynamicdrive.com/style/ 
# Tja, ik kan natuurlijk niet alles weten ;-)

?>
<style type="text/css">
/*Credits: Dynamic Drive CSS Library */
/*URL: http://www.dynamicdrive.com/style/ */

.shadow{
border:1px solid silver;
font:10pt arial;
position:relative;
display:inline;
background:white;
z-index:100
}

.shadow_inner{
overflow:hidden;
position:absolute;
top: -1000px;
filter:alpha(Opacity=10); /*modify to change the shade solidity/opacity, same as below*/
opacity:0.1; /*firefox 1.5 opacity*/
-moz-opacity:0.1; /*mozilla opacity*/
-khtml-opacity:0.1; /*opacity*/
z-index:10
}

</style>

<script type="text/javascript">

var gradientshadow={}
gradientshadow.depth=6 //Depth of shadow in pixels
gradientshadow.containers=[]

gradientshadow.create=function(){
var a = document.all ? document.all : document.getElementsByTagName('*')
for (var i = 0;i < a.length;i++) {
	if (a[i].className == "shadow") {
		for (var x=0; x<gradientshadow.depth; x++){
			var newSd = document.createElement("DIV")
			newSd.className = "shadow_inner"
			newSd.id="shadow"+gradientshadow.containers.length+"_"+x //Each shadow DIV has an id of "shadowL_X" (L=index of target element, X=index of shadow (depth) 
			if (a[i].getAttribute("rel"))
				newSd.style.background = a[i].getAttribute("rel")
			else
				newSd.style.background = "black" //default shadow color if none specified
			document.body.appendChild(newSd)
		}
	gradientshadow.containers[gradientshadow.containers.length]=a[i]
	}
}
gradientshadow.position()
window.onresize=function(){
	gradientshadow.position()
}
}

gradientshadow.position=function(){
if (gradientshadow.containers.length>0){
	for (var i=0; i<gradientshadow.containers.length; i++){
		for (var x=0; x<gradientshadow.depth; x++){
  		var shadowdiv=document.getElementById("shadow"+i+"_"+x)
			shadowdiv.style.width = gradientshadow.containers[i].offsetWidth + "px"
			shadowdiv.style.height = gradientshadow.containers[i].offsetHeight + "px"
			shadowdiv.style.left = gradientshadow.containers[i].offsetLeft + x + "px"
			shadowdiv.style.top = gradientshadow.containers[i].offsetTop + x + "px"
		}
	}
}
}

if (window.addEventListener)
window.addEventListener("load", gradientshadow.create, false)
else if (window.attachEvent)
window.attachEvent("onload", gradientshadow.create)
else if (document.getElementById)
window.onload=gradientshadow.create

</script>
<?php


// bepaal de positie
if (isset($pos)==0)
    $pos=0;
	$count = 1;	
	
// lees record nummer
//if (isset($_GET['pos'])):
//   $record = $_GET['pos'] + 1;
//   echo "<h2>$record</h2>";
//   else:
//   $record=1;
//   echo "<h2>record = 1 $record</h2>";
//endif;

$b = $_GET['pos'] + 1;


	# databse: 	 nummer, omschrijving,	 afbeelding, thumbnail

	// totaal aantal afbeeldingen: 
 	$an_id=@mysql_query("SELECT nummer, omschrijving, afbeelding, thumbnail FROM afbeelding WHERE 
	nummer='$b' ORDER BY nummer DESC LIMIT  $pos, $count");
		
	$result=@mysql_query("SELECT nummer FROM afbeelding WHERE nummer >0");
	$total = @mysql_num_rows($result);		
	if ($total == 0):
	    echo "Er zijn nog geen afbeeldingen beschikbaar....";		
		else: 
		
		# We zijn weer terug in de vertrouwde PHP omgeving :-)
		

     	echo "<table width=\"550\" border=\"0\" align=\"center\">
			  <caption><b>Mijn foto album</b></caption>
			  <tr>
			    <td>Aantal afbeeldingen: $total</td></tr>
				<td>";
	
		if ($_GET['pos']>0):		
		echo "<a href=" . chr(34) . "?pos=";
			echo $a=$b-2;					
			echo chr(34) . " >Terug</a> ";
		endif;
		if (mysql_num_rows($an_id)>$b || $b<$total):
			echo "<a href=\"?pos=$b \">Volgende</a>";				
		endif;
		echo "</td></tr>";
		
		// haal de gegevens op uit de database
		# databse: 	 nummer, omschrijving,	 afbeelding, thumbnail
 	    while ($row = @mysql_fetch_object($an_id)) : 
		  	$nummer = $row->nummer;
		  	$omschrijving= $row->omschrijving;
			$afbeelding=$row->afbeelding;
			$thumbnail=$row->thumbnail;
	   endwhile;

	  # met deze gegevens maken we een tabel!		
		echo "<tr><td><a href=\"$afbeelding\" title=\"klik hier voor de voledige afbeelding\" 
			target=\"_blank\"><img src=\"$thumbnail\" border=\"0\" class=\"shadow\" rel=\"black\"></a>
			<br></td></tr>
	  <tr><td>$omschrijving </td></tr><tr><td>";
		
		# De blader functie
		
		if ($_GET['pos']>0):		
			echo "<tr><td><a href=\"?pos=$a=$b-2\">Terug</a>";
		endif;
		if (mysql_num_rows($an_id)>$b || $b<$total):
		echo "&nbsp;<a href=\"?pos=$b\">Volgende</a></td></tr></table>";				
		endif;
		
		
	endif;
	
[/code]

Reacties

0
Nog geen reacties.