Afbeelding uploaden naar database

Status
Niet open voor verdere reacties.

istiti

Gebruiker
Lid geworden
26 aug 2013
Berichten
50
Hallo,

Ik ben een beginner in php.
Graag zou ik een script maken om een afbeelding van op de website te uploaden naar de database. Ik hanteer verschillende boeken, maar heb 2 boeken van dezelfde schrijver waarin verschillende scripts staan. Jammer genoeg werken beide niet.

Ik vermoed dat het aan mijn pad ligt, maar hoe moet ik het pad juist vormen? En wat loopt er verder nog mis in het script?

PHP:
<?php
include 'core/init.php';
?>

<?php
if ($_POST["knop"]) {
$pad = "/image/";
if(is_upload_files($_FILES['AFBEELDING']['tmp_name'])) {
	$artikelid = $_POST["artikelid"]; //controleer grootte
	if ($_FILES['AFBEELDING']['size'] > 45000) {
		print "het bestand is te groot!";
		exit;
	}// controleer extensie
	if(!ereg("((.gif|.jog)$)", $_FILES['AFBEELDING']['name'], $extensie)) {
		print "Het bestand is niet van het juiste type.";
		exit; 
	}
	$extensie = $extensie[0];
	$sql = "INSERT INTO AFBEELDING (ARTIKEL_ID, Bestandstype) VALUES ($artikelid, '$extensie')";
	if (!mysql_query($sql)) {
		print "Het bijwerken van de database is mislukt."; 
	}
	$doelbestandsnaam = mysql_insert_id().$extensie; //naam bestaat uit sleutel en extensie
	if (!move_uploaded_file($_FILES['AFBEELDING']['tmp_name'], $pad.$doelbestandsnaam)) {
		print "Bestand kan niet verplaatst worden. "; 
	}
	print "Uw bestand".$_FILES['AFBEELDING']['name']." is geupload";
} else {
	print "Het bestand uploaden is mislukt";
}
} else {
?>

<p><div class="big">Afbeelding uploaden bij artikel</div><br>
<form enctype="multipart/form-data" action="<?php print $_SERVER["PHP_SELF"] ?>" method="post">
Selecteer een artikel: <select name="artikelid">
<?php 
$sql = "SELECT * FROM ARTIKEL";
$resultaat = mysql_query($sql); // voer sql code uit
while ($rij = mysql_fetch_array($resultaat)) {
	print "<option value=\"";
	print $rij["ARTIKEL_ID"]."\"";
	// link tussen artikeloverzicht en afb. uploaden
	if ($_GET["artikelid"] == $rij["ARTIKEL_ID"]) { 
	print "selected";
	}
	print ">";
	print $rij["Naam"]."</option>\n";
}
?>
</select><br>
<input type="hidden" name="MAX_FILE_SIE" value="45000">
Upload afbeelding: <input name="afbeelding" type="file">
<input type="submit" value="Verzend" name="knop">
</form>
<?php
}
?>
 
PgVincent er wordt geen afbeelding toegevoegd in de database. Ook niet in de map waar het pad naartoe gaat.

Als ik bewust een te grote afbeelding toevoeg krijg ik ook geen melding dat de afbeelding te groot is.
Met andere woorden, er gebeurd eigenlijk niets. Maar hij meld ook niets.
 
Zet bovenaan het script je error_reporting eens aan met

error_reporting(E_ALL);

en controleer desnoods de instellingen in php.ini, want je maakt een paar fouten die absoluut een melding geven tenzij die door je configuratie worden onderdrukt.

if ($_POST["knop"]) {

Dit moet een undefined index warning geven want als je het formulier nog niet verstuurd hebt bestaat $_POST['knop'] helemaal niet.


if(is_upload_files($_FILES['AFBEELDING']['tmp_name'])) {

De functie is_uploaded_files() bestaat niet, is_uploaded_file() wel, zonder 's' dus. Dat is fatal error die hoort te komen als je submit.
 
Inderdaad ik krijg volgende melding:
De "s" heb ik overal weggedaan , dus deze zal opgelost zijn.

Wat if ($_POST["knop"]) { betreft , ik krijg inderdaad volgende melding:
Notice: Undefined index: knop in /customers/c/4/d/pastelequipment.com/httpd.www/admin/artikel_afbeelding.php on line 7

Wat moet ik doen om dit op te lossen?
Alvast bedankt!
 
Lees over isset(), daarmee kun je controleren of een variabele of een index in een array bestaat.
 
Dank je PgVincent! Ondertussen lukt het , de afbeeldingen worden in de database opgeslaan.
Alleen krijg ik nog steeds errors te zien als de error reporting aanstaat. Ik kan ook nog een afbeelding invoegen die te zwaar is.
 
Alleen krijg ik nog steeds errors te zien als de error reporting aanstaat.

Dan moet je die oplossen :-) Als je wilt dat iemand je daaarmee helpt dan zul je moeten vertellen welke meldingen je krijgt (eigenlijk wel logisch he :-) )

Ik kan ook nog een afbeelding invoegen die te zwaar is.

Afbeeldeingen zijn niet zwaar, het bestand is groot (in kilobytes, de afmeting van het plaatje in pixels is iets anders)

Als je heel korft googlet naar hoe uploaden in PHP werkt dan kom je tegen dat PHP de maximale afmeting van bestanden instelt op ergens rond de 2MB. Dat staat ook in de handleiding en daar staat ook hoe je dat kunt aanpassen.
 
Ja inderdaad , stom van mij. Mijn excuses.
Op het upload formulier zelf krijg ik geen errors meer te zien. Eenmaal de afbeelding is geuploaded krijg ik het volgende :

Notice: Undefined index: AFBEELDING in /customers/c/4/d/pastelequipment.com/httpd.www/admin/artikel_afbeelding.php on line 11 Deprecated: Function ereg() is deprecated in /customers/c/4/d/pastelequipment.com/httpd.www/admin/artikel_afbeelding.php on line 15 Notice: Undefined variable: _FILE in /customers/c/4/d/pastelequipment.com/httpd.www/admin/artikel_afbeelding.php on line 25 Bestand kan niet verplaatst worden. Notice: Undefined variable: _FILE in /customers/c/4/d/pastelequipment.com/httpd.www/admin/artikel_afbeelding.php on line 28 Uw bestand is geupload


Wat de grootte betreft heb ik volgend stukje code :

$artikelid = $_POST["artikelid"]; //controleer grootte
if ($_FILES['AFBEELDING']['size'] > 10) {
print "<font color=\"red\" het bestand is te groot!</font>";
exit;
}

In het handboek stond dit op 45000 dus dacht ik 10 is zeker te klein, dan krijg ik de melding wel te zien... niet dus. Ik google even verder.
 
De errors zijn weg :-) ik had

$artikelid = $_POST["artikelid"]; //controleer grootte
if ($_FILES['AFBEELDING']['size'] > 10) {
print "<font color=\"red\" het bestand is te groot!</font>";
exit;
}

Moet zijn
$artikelid = $_POST["artikelid"]; //controleer grootte
if ($_FILES['afbeelding']['size'] > 10) {
print "<font color=\"red\" het bestand is te groot!</font>";
exit;
}
 
Nu is het enkel die grootte nog. Met die error weg te werken , laat hij geen afbeeldingen toe groter dan 10kb , maar hij meldt niet dat de afbeelding te groot is ...
 
Hij doet het ! :-) :-)

Ik had mijn <font color niet afgesloten.

Dank je voor de hulp!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan