Afbeelding uploaden + in database zetten
Naar aanleiding van een vraag over een file upload, hier op het forum, had ik een script gemaakt en deze heb ik nu verbeterd en voorzien van een filter om te checken of het wel om een afbeelding gaat.
De gegevens worden, indien het om een afbeelding gaat ( er wordt gecontrolleerd op de bestands extensie, een 100% controlle bestaat niet voor zover ik weet), op de server geplaatst en in de database.
Het gaat in totaal om 4 scripts.
P.s. ik vind het trouwens lastig om aan te geven wat het niveau is....
... kleine wijziging in het script upload_afbeelding.php:
Regel 14 was :
$go=$_POST[go];
En is nu geworden :
$go=$_POST['go'];
(ik heb het al in de onderstaande code aangepast ;-) ).
Gesponsorde koppelingen
PHP script bestanden
Er zijn 49 reacties op 'Afbeelding uploaden in database zetten'
Gesponsorde koppelingen
De variabel $go krijgt via $_POST[go] de waarde 'go', daarvoor is $go gewoon leeg en wordt er niets mee gedaan....
Je kan $go = $_POST['go']; ook weglaten en in plaats daarvan op regel 51 het volgende te plaatsen :
Per slot van rekening gaat het erom dat het script weet dat het formulier wordt verzonden.
Edit : voorbeeld hierboven heb ik ook ff gewijzigd.
Leer jezelf aan om tijdens het ontwikkelen alle errors te tonen, door bovenin je PHP-bestand error_reporting( E_ALL ); te zetten kun je dit soort meldingen ook zien.
Verder, kijk eens naar mijn voorbeeld:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<p>Afbeeldingen uploaden, max 1024kb (1mb) per afbeelding:</p>
<input type="hidden" name="MAX_FILE_SIZE" value="1024000">
<input type="file" name="afbeelding1"><br>
<input type="file" name="afbeelding2"><br>
<input type="file" name="afbeelding3"><br>
<input type="file" name="afbeelding4"><br>
<input type="file" name="afbeelding5"><br>
<input type="file" name="afbeelding6"><br>
<input type="file" name="afbeelding7"><br>
<input type="file" name="afbeelding8"><br>
<input type="file" name="afbeelding9"><br>
<input type="file" name="afbeelding10"><br>
<br>
<input type="submit" value="Uploaden!">
</form>
<?
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
function randomgenerator($aantaltekens)
{
$kleineletters = range('a','z');
$groteletters = range('A','Z');
$cijfers = range(0,9);
$karakters = array_merge($kleineletters, $groteletters, $cijfers);
$aantal = count($karakters)-1;
$random = null;
for($i=0; $i < $aantaltekens; $i++) {
$random .= $karakters[mt_rand(0, $aantal)];
}
return $random;
}
foreach($_FILES as $afbeelding)
{
$naam = $afbeelding['name'];
$type = $afbeelding['type'];
$temp = $afbeelding['tmp_name'];
$error = $afbeelding['error'];
$size = $afbeelding['size'];
switch($error)
{
case 0:
if(is_uploaded_file($temp))
{
if($type == 'image/jpeg' || $type == 'image/gif' || $type == 'image/png')
{
if($size >= 1024000)
{
echo '<p>Sorry, dit bestand is te groot om te worden geupload!</p>';
}else{
$random = randomgenerator(5);
$verplaats = move_uploaded_file($temp, 'afbeeldingen/'.$random.'-'.$naam);
if($verplaats == 1)
{
echo '<p>Er is geen error opgetreden. Het bestand is met success geupload</p>';
}else{
echo '<p>Er ging iets mis met het uploaden van '.$naam.', neem contact op met de webmaster.</p>';
}
}
}else{
echo '<p>Sorry, dit bestandsformaat accepteer ik niet!</p>';
}
}else{
echo '<p>Sorry, dit accepteer ik niet!</p>';
}
break;
case 1:
echo '<p>Error: De grootte van het bestand is groter dan wat de server aankan!</p>';
break;
case 2:
echo '<p>Error: De grootte van het bestand is groter dan 1024kb!</p>';
break;
case 3:
echo '<p>Error: Het bestand is maar gedeeltelijk geupload!</p>';
break;
case 4:
//Geen bestand geupload, we doen niks!
break;
}
}
}
?>
$file_name=str_replace(" ", "_", $file_array['name']);
$file_name=stripslashes ($file_name);
De eerste regel word overschreven door de 2de.
Verder moet je natuurlijk niet alleen op extensie controlleren omdat je een .php script oid ook kan renamen naar .jpg en dan staat ie ineens bij jou op de server!
Verder controlleer je nergens op mime type. Arjan doet dit wel maar hij controlleert die van de geuploade file en voor zover ik weet stuurt de browser die info en dus kan een hacker die wijzigen. Als dat 't geval is kun je dus beter getimagesize() gebruiken om 't mime type te bepalen.
Warning: move_uploaded_file(/var/www/g26001/joljol.nl/HTML/images/roek.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /var/www/g26001/joljol.nl/HTML/uploadafbeelding.php on line 64
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/var/www/g26001/joljol.nl/tmp/phpyz5xxe' to '/var/www/g26001/joljol.nl/HTML/images/roek.jpg' in /var/www/g26001/joljol.nl/HTML/uploadafbeelding.php on line 64
Couldn't copy
Zou je me kunnen helpen?
2
3
4
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpwRGIa5' to '/home/Twan/domains/zerox-media.gratishosted.nl/public_html/admin/images//cijfers.gif' in /home/Twan/domains/zerox-media.gratishosted.nl/public_html/admin/upload_afbeelding.php on line 117
Couldn't copy
en
nog eentje
Maar dat komt denk ik door de server toch?
Gebruik het nu ook..
Alleen is het ook mogelijk om b.v.b. 10 foto's tegelijk toe te voegen??
Ik had al onderstaande gedaan maar dat lukte niet.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# De verwerking van de gegevens doen we gewoon
# met een eenvoudig formulier.
# Procedure geschreven door Cynthia Fridsma
// verbind de server
require_once("config.php");
// gebruik het filter voor de afbeeldingen
include ("filter.php");
// lees de waarde van 'go'
$go = $_POST['go'];
# als het formulier nog niet eerder is gebruikt dan
# wordt er een formulier getoond op je scherm.
if ($go ==""):
?>
<br><br><br>
<form name="form1" method="post" action="" 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><input name="omschrijving" type="text" id="omschrijving" size="50"></td>
</tr>
<tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr>
<tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</tr> <tr>
<td bgcolor="#99CCFF">Afbeelding</td>
<td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50">
</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>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
endif;
// Deze procedure wordt aangeroepen nadat men op verzenden heeft gedrukt
if ($go =="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.
$file_dir = ($hello . "/images/");
# 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);
}
// toon de systeem datum
echo date("m/d/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(" ", "_", $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";
# 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.
$test = afbeeldingen($file_name);
if ($test !=""):
echo $file_name . " dit is een afbeelding<br>";
if (is_uploaded_file($file_array['tmp_name'])) {
move_uploaded_file($file_array['tmp_name'], "$file_dir/$file_name") or die ("Couldn't copy");
echo "Afbeelding staat op de server<br><br>";
// voeg de locatie + omschrijving van de afbeelding toe in de database
$afbeelding = "images/" . $file_name;
$query = "INSERT INTO afbeelding (nummer, omschrijving, afbeelding) VALUES ('', '$_POST[omschrijving]','$afbeelding')";
if(!mysql_db_query($dbname,$query,$db)) die(mysql_error());
echo $afbeelding . " is toegevoegd aan de database met als omschrijving : <br>";
echo $_POST[omschrijving] ;
}
endif;
if ($test ==""):
echo $file_name . " dit is geen afbeelding en wordt daarom niet op de server geplaatst<br>\n";
endif;
}
endif;
?>
</body></html>
path: C:\wamp\tmp\php65.tmp
En als ik in die map kijk dan staat er geen php65.tmp
wat is het precies?
En is het ook mogelijk om met zo'n install script de database zelf aan te maken? dus niet via phpmyadmin.
laat maar heb zelf al gevonden.
(Zou idd vet zijn moest je 2 of meer foto's gelijk kunnen uploaden...iemand? :))
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=iso-8859-1">
<TITLE>verwijderen</TITLE>
<script language="JavaScript" type="text/javascript" src="wysiwyg.js"></script>
</HEAD>
<BODY TEXT="#333333" BGCOLOR="#F0F0F0" LINK="#333333" ALINK="#333333" VLINK="#333333">
<font face="verdana" size="1">
<H3>Content verwijderen:<br>...............................</H3>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
include ("config.php");
if(!isset($cmd))
{
//toon content
$result = mysql_query("select * from afbeelding order by nummer");
while($r=mysql_fetch_array($result))
{
//toon titel en nummer
$nummer=$r["nummer"];//toon nummer
$omschrijving=$r["omschrijving"];//toon omschrijving
//maak een link van de omschrijving
echo "<font face='verdana' size='3'>$omschrijving </font> <br> <a href='del.php?cmd=delete&nummer=$nummer'>Delete</a> <hr> ";
echo "<br>";
}
}
?>
2
3
4
5
6
7
8
9
//confirmatie van het gedelete
if($_GET["cmd"]=="delete")
{
$sql = "DELETE FROM afbeelding WHERE nummer=$nummer";
$result = mysql_query($sql);
echo "Inhoud verwijderd <a href=\"upload_afbeelding.php\">Wil u nieuwe inhoud toevoegen?</a>";
}
?>
</BODY>
</HTML>
Graag hulp!
ik heb hem gebruik voor mijn dvd beheer database wat ik voor school moest maken. Wou er nog een extraatje bij doen en toen kwam ik hier op uit.
Heb wel wat aangepast met het formulier, zodat je ook andere gegevens toevoegt aan de DB (titel, omschrijving e.d. )
al met al is dit een erg leuk script!
bedankt!
btw. is er ook iemand die een soort gelijk script heb alleen dan met een resize/tumbnail functie erin ? zodat je 1x foto upload en die in 2 mappen komt en op de index de thumbnail laat zien en dat je klikt op de film oid en dan de rest ziet + grote afbeelding ?
bedankt!
ik heb een tabel gemaakt en wil nu de plaatjes oproepen d.m.v. een script, ik wil graag dan de foto zien en niet de link waar de foto staat zoals ik die nu krijg:
<html>
<head> <title> --- </title> </head>
<body bgcolor="FFFFFF"><center>
<b>Agenda<b>
<br><br>
<table border="1" width="40%" bordercolor="#000000" bgcolor="#96a2d6">
<tr>
<td>
<b><p align="center">nummer<b>
</td>
<td>
<b><p align="center">omschrijving<b>
</td>
<td>
<b><p align="center">afbeelding<b>
</td>
<td>
</center>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$db=mysql_connect("localhost","root","") or die
("Kan niet verbinden");
mysql_select_db("agenda",$db);
$sql="SELECT * FROM afbeelding";
$resultaat=mysql_query($sql);
while($rij=mysql_fetch_array($resultaat)){
echo "<tr>";
echo ("<td>".$rij["nummer"]."</td>");
echo ("<td>".$rij["omschrijving"]."</td>");
echo ("<td>".$rij["afbeelding"]."</td>");
echo "</tr>";
}
mysql_close($db);
?>
</body></html>
Het zal best wel simpel zijn ben alleen nog niet zo heel bekend met alle mogelijkheden van PHP.
alvast bedankt.
Dit stukje code gebruik ik al heel lang voor dit soort oplossingen:
2
3
4
5
6
7
8
9
10
11
12
13
include ("verbinding_lijsten.php");
mysql_connect ("$dbhost","$username","$dbww");
mysql_select_db ("$db") or die ("Fout opgetreden");
$query = "SELECT * FROM reizen WHERE cat='foto' AND actief='1' ORDER BY uithits DESC LIMIT 10";
$uitvoer = mysql_query($query) or die (mysql_error());
while($lijst = mysql_fetch_object($uitvoer))
{
echo "
<a href=foto.php?uit=".$lijst->id." target=\"_blank\"><img src=".$lijst->image." height=\"40\" width=\"78\" />".$lijst->naam."</a>
";
}
?>
Met dit stukje script lees je de inhoud van de database reizen uit en word er een afbeelding geplaatst met daarnaast de naam die beide klikbaar zijn naar een nieuwe pagina.
Hopelijk heb je hier wat aan.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
include ("config/config.php");
print "<table width=40%><tr><th>Naam</th><th>Telefoon</th></tr>";
$sql_details = mysql_query("SELECT * FROM fotos");
while ($row_detail = mysql_fetch_array($sql_details)) {
$afbeelding = $row_detail['afbeelding'];
$omschrijving = $row_detail['omschrijving'];
$prijs = $row_detail['prijs'];
echo "<td>" . $afbeelding->image . "</td>";
print "<td>" . $omschrijving . "</td>";
print "<td>" . $prijs . "</td>";
print "</tr>";
}
print "</table>";
?>
Wie kan mij verder helpen.
Om te reageren heb je een account nodig en je moet ingelogd zijn.
Inhoudsopgave
Labels
- Geen tags toegevoegd.
PHP hulp
0 seconden vanaf nu