Link afbeelding via form uploaden naar DB

Status
Niet open voor verdere reacties.

Triksken59

Gebruiker
Lid geworden
6 dec 2008
Berichten
33
Hallo,
Ik ben met behulp van het complete boek PHP5 een website aan het bouwen, veel is nieuw voor mij. Ik probeer nu via een form, een link te uploaden naar mijn db.
Maar dat lukt niet, ik krijg telkens "Het uploaden is mislukt!"
Mijn formulier ziet er goed uit, ik wil zeggen ik krijg de keuze tussen mijn artikels, ik kan bladeren naar mijn afbeeldingen maar bij verzenden loopt het mis.
In mijn db twee tabellen: artikel en afbeelding.
artikel : art_id begint ai prim key - art_naam varchar 100 - art_omschrijving tekst - art_dat timestamp current timestamp
afbeelding: afb_id begint ai prim key - art_id begint - afb_bestandstype varchar 5.
De afbeeldingen staan in mijn root /wzh/pics_fie/oostduinkerke/oostd_2007_01.jpg.
Hieronder mijn code:
PHP:
<html>
<head>
	<title>Afbeelding uploaden</title>
</head>
<body>
<?php

//if ($_POST["knop"]) {
	if(isset($_POST['insert'])) {
	


$pad = "/wzh/pics_fie/oostduinkerke/";

if (is_uploaded_file($_FILES['afbeelding']['tmp_name'])) {

	// Controleer grootte
	if ($_FILES['afbeelding']['size'] > 60000) {
		echo "Het bestand is te groot!";
		exit;
	}
	// Controleer extensie
	if (!ereg("((.gif|.jpg)$)", $_FILES['afbeelding']['name'], $extensie)) {
		echo "Het bestand is niet van het juiste type";
		exit;
	}
	$extensie = $extensie[0];
	$sql = "INSERT INTO afbeelding (art_id, afb_bestandstype) VALUES (".$_POST["artikelid"].", '$extensie')";
	if (!mysql_query($sql)) {
		echo "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)) {
		echo "Het bestand kan niet verplaatst worden!";
	}
	echo "Uw bestand ".$_FILES['afbeelding']['name']." is geupload";
} else {

	echo "Het uploaden is mislukt!";

}


} else {

?>

<form enctype="multipart/form-data" action="<?php echo $_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)) {
echo "<option value=\"";
echo $rij["art_id"]."\">";
echo $rij["art_naam"]."</option>\n";
	}
?>
</select><br>
<input type="hidden" name="MAX_FILE_SIZE" value="60000">
Upload afbeelding: <input name="afbeelding" type="file">
<input type="submit" value="Verzend!" name="insert">


</form>
<?php

}

?>
</body>
</html>
<?php
mysql_close($mysql_id);
?>

Kan er mij iemand helpen, alvast bedankt.

Ik had iets over het hoofd gezien, ik heb een aanpassing gedaan form value ook op 60000 gezet en ik had bij de insert een verkeerde benaming gebruikt voor bestandstype, moest zijn afb_bestandstype.
Nu krijg ik volgende melding:

Warning: move_uploaded_file(/wzh/pics_fie/oostduinkerke/10.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\wamp\www\wzh\includes\afb_uploaden.php on line 38

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\wamp\tmp\php3D.tmp' to '/wzh/pics_fie/oostduinkerke/10.jpg' in C:\wamp\www\wzh\includes\afb_uploaden.php on line 38
Het bestand kan niet verplaatst worden!Uw bestand oostd_2007_01.jpg is geupload

Mijn tabel afbeelding in mijn db wordt gevuld, met het afb_id art_id en bij afb_bestandsnaam .jpg wat doe ik verkeerd.
 
Laatst bewerkt:
Voor het nette moet je even de volgende zin aanpassen:
HTML:
<form enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">
naar:
HTML:
<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
Dit omdat je al in tussen " aan het werken bent. Vandaar dat ik de $_SERVER["PHP_SELF"] verander heb in $_SERVER['PHP_SELF'].

Je moet even voor: echo "Het uploaden is mislukt!"; het volgende zetten.

echo $_FILES['afbeelding']['error'];

Dit geeft een error nummer aan, en aan de hand van dat nummer kan je zien waarom hij het niet doet.
Betekenis van de upload errors.
 
Laatst bewerkt:
Dank u voor uw reactie.
Ik heb de aanpassingen uitgevoerd zoals gevraagd, ['PHP_SELF'] en heb ook de echo geplaatst, ik kreeg nog steeds dezelfde warning.
Maar intussen is het probleem opgelost.
Het pad was niet juist en dat is nu opgelost:
PHP:
 $pad = "/wzh/pics_fie/oost/";

moest zijn:
PHP:
 $pad = "/wamp/www/wzh/pics_fie/oost/";

Dank nogmaals voor uw reactie.
Ik kan nu weer een stukje verder.
 
afbeelding tonen lukt niet met "/uploadimages/"

Het uploaden van mijn afbeelding lukt, ze wordt goed weggeschreven in de juiste folder, en ik zie ze ook staan in mijn db.
Wanneer ik nu de afbeelding wil weergeven lukt dit niet, ik krijg mijn tabel met de naam en omschrijving en op de plaats waar de afbeelding moet komen heb ik het wit vierkantje met rood kruisje.
Als ik hier de eigenschappen van opvraag, zie ik bij Adress: http://localhost/uploadimages/1.jpg dus zou ik toch de afbeelding moeten zien dacht ik.
PHP:
<h2>afbeelding bekijken</h2>
				<?php
					
					$sitepad = "/uploadimages/";
					$sql = "SELECT * FROM categorie";
					$resultaat  = mysql_query($sql); // voer SQL code uit
					if (mysql_num_rows($resultaat) > 0) {
					echo "<table border=1>";
					echo "<tr><td><b>Naam</b></td><td><b>Omschrijving</b></td><td>Afbeeldingen</td></tr>"; // bovenste regel
					while ($rij = mysql_fetch_array($resultaat)) {
					echo "<tr>";
					echo "<td>".$rij["cat_naam"]."</td>";
					echo "<td>".$rij["cat_omschrijving"]."</td>";
					//echo "<td>".$rij["cat_dat"]."</td>";
					echo "<td>";
					$sql = "SELECT * FROM afbeelding WHERE cat_id=".$rij["cat_id"];
						$afbeeldingen = mysql_query($sql);
						if (mysql_num_rows($afbeeldingen) > 0) {
							while ($afb_rij = mysql_fetch_array($afbeeldingen)) {
									$bestandsnaam = $sitepad.$afb_rij["afb_id"].$afb_rij["afb_bestandstype"];
									echo "<img src=\"$bestandsnaam\">&nbsp;";
								}
						} else {
							
						echo "Geen afbeeldingen voor deze categorie";
						}
					echo "</td></tr>";

					}
					echo "</table>";
					}

					mysql_close($mysql_id);
				?>
 
Blijkbaar staat ie dan niet exact op die locatie. Sowieso is het niet nodig om het http://localhost/ gedeelte op te slaan in je database, das niet handig als je ooit dingen verplaatst.

Als je zelf naar die link gaat, zie je de image dan wel? Of krijg je dan een "page not found" melding?

Kun je het geuploade plaatje zelf openen? Misschien wordt ie niet goed gekopieerd ofzo.
 
Ik had het pad inderdaad niet juist gegeven. De afbeelding staat na het uloaden wel degelijk in de juiste folder, maar bij
PHP:
$sitepad = "/uploadimages/";
had ik het juiste pad moeten invullen. Dit werkt nu.
PHP:
$sitepad = "/wzh/pics_fie/oost/";
. Ik ben nog steeds bezig op mijn localhost en moet dit later nog uploaden naar mijn website. Ik hoop dat alles dan goed verloopt.
Ik moet nog veel leren denk ik.
Alvast bedankt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan