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 :
.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"> </td>
<td><input type="submit" name="Submit" value="Verzenden">
<input type="reset" name="Reset" value="Herstellen"></td>
</tr>
</table>
<p> </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 " <a href=\"?pos=$b\">Volgende</a></td></tr></table>";
endif;
endif;
[/code]
Reacties
0