<body>
<?php
	$con=mysqli_connect("","","","");
		// Check connection
		if (mysqli_connect_errno())
		  {
		  echo "Failed to connect to MySQL: " . mysqli_connect_error();
		  }
?>

	<div id='box'>
    	<form method="post" enctype="multipart/form-data" >
         <?php
			//print_r ($_FILES['file']);
			if(isset($_FILES['file'])){
			
				//$name = $_FILES['file']['name'];
				$name = $_POST["name"];
				$extension = explode('.', $name);
				$extension = end($extension);
				$type = $_FILES['file']['type'];
				/*$size = $_FILES['file']['size'];*/
				$random_name = rand();
				$tmp = $_FILES['file']['tmp_name'];
				
				
				if ((strtolower($type) != "image/png") && (strtolower($type) != "image/jpg") && (strtolower($type) != "image/jpeg")&& (strtolower($type) != "application/octet-stream"))
				{
					$message= "Image format is not supported !";
					
    			}/*elseif($size >= 20971520)
				{
					$message="File must not greater than 20mb";
				}*/else
				{
					move_uploaded_file($tmp, 'images/'.$random_name.'.'.$extension);	
					mysqli_query($con, "INSERT INTO vid_entry VALUES('', '$name' , '$random_name.$extension')");
					$message="Image has been successfully uploaded !";
				}
				echo "$message <br/> <br/>";
				/*echo "size: $size mb<br/>";*/
				echo "random_name: $random_name <br/>";
				echo "name: $name <br/>";
				echo "type: $type <br/><br/>";
			}
	
		?>
            <!--<input name="UPLOAD_MAX_FILESIZE" value="20971520"  type="hidden"/>--->
			Name: <input type="text" name="name" value="<?php echo $name;?>"><br />
            <label for="image_uploads">Choose image to upload!</label>
            <input type="file" name="file" id="image_uploads" style="opacity: 0;"/>
            <br/><br/>
            <input type="submit" value="Upload" />
        </form>
	</div>
    
   
    <div id='box'>
		<?php
			$query = mysqli_query($con, "SELECT * FROM vid_entry");
			while($row = mysqli_fetch_array($query)){
			
		?>
        <div id='url'>
		<a href="view-image.php?image=<?php echo $row['url']; ?>">
			<?php echo $row['name'];?>
		</div>
        <a/>
		<?php
		}
		mysqli_close($con);
		?>
    </div>


Ik wil graag zelf naam meegeven aan mijn upload.
Dit gaat nog niet helemaal zoals ik wil, zou iemand mij hier bij kunnen helpen.
Hier zet je de naam uit het formulier in een var: $name = test_input($_POST["name"]);
En hier maak je de naam van het bestand: $random_name = rand();

Kwestie van combineren lijkt mij.
Wat zou het dan wel volgens jou moeten zijn?
Je gebruikt rand() voor een willekeurige bestandsnaam. Zonder argumenten produceert deze functie een getal tussen 0 en getrandmax(). Ik denk niet echt dat dat een handige keuze is.

Wat het makkelijkste een optie zou zijn is dat het bestand gewoon onder de gewenste naam toegankelijk is? Dus i.p.v. move_uploaded_file($tmp, 'images/'.$random_name.'.'.$extension) gebruik je move_uploaded_file($tmp, 'images/'.$name.'.'.$extension). Hierbij zou je natuurlijk wel moeten controleren of je geen bestaande afbeelding overschrijft.

Ook zou je kunnen overwegen om het bestand gewoon onder het auto-increment id van het record op te slaan, op die manier heb je nooit botsingen in naamgevingen.

<?php
if ((strtolower($type) != "image/png") && (strtolower($type) != "image/jpg") && (strtolower($type) != "image/jpeg")&& (strtolower($type) != "application/octet-stream"))
{
    $message= "Image format is not supported !";
}
?>

Dit is een nogal vreemde controle. Je kunt niet zoveel afleiden uit wat een bestand niet is. In plaats van het bouwen van een blacklist (een lijst maken van wat niet toegestaan is) kun je beter een lijst bouwen van wat wel toegestaan is (whitelist). Een blacklist verliest namelijk direct zijn waarde op het moment dat je een case vergeet.
EDIT: logisch gezien klopt 'ie wel, maar ik zou het anders aanpakken. Zoiets als:
<?php
if (in_array($extensie, $whitelist) === false) {
    // type wordt niet ondersteund
}
?>


Daarbij is het MIME-type ($_FILES['file']['type']) vaak simpelweg gebaseerd op de extensie van het bestand. Dit biedt dus weinig garanties dat het daadwerkelijk een afbeelding betreft. Je zou bijvoorbeeld gebruik kunnen maken van getimagesize() en dan controleren of deze een "mime" veld retourneert. Of beter, zoals op die pagina ook wordt voorgesteld: gebruik de File Info(rmation) extensie.

Misschien is het ook handig/verstandig om meer aandacht te besteden aan de validatie van formulierdata, en informatie te verzamelen in een errors-array op het moment dat er dingen niet kloppen zodat je dit kunt terugkoppelen aan de gebruiker.
Thomas bedankt voor je snelle reactie.

Dit is als hij hem upload alleen extensie .jpg, .png, enz. komt er niet achter te staan als ik die link aan klik.


{
					move_uploaded_file($tmp, 'images/'.$name.'.'.$extension);	
					mysqli_query($con, "INSERT INTO vid_entry VALUES('', '$name' , '$extension')");
					$message="Image has been successfully uploaded !";
				}




Ja dan zul je even moeten uitzoeken waar dat vandaan komt. $name komt oorspronkelijk uit $_POST['name'], zou dat niet $_FILES['file']['name'] moeten zijn?

Tenzij je dus in $_POST['name'] een volledige bestandsnaam opgeeft, inclusief extentie. Maar dat lijkt mij nogal onzinnig want dan zou je blaat.jpg kunnen hernoemen naar whatever.png (en net kunnen doen alsof het een ander bestandstype heeft). Het zou wat mij betreft logischer zijn dat je de extentie uit de oorspronkelijke bestandsnaam vist.

Dit had je waarschijnlijk ook makkelijk zelf kunnen zien aan de data in je database? Naar alle waarschijnlijkheid was de extentiekolom leeg?
Nu ik dit heb veranderd komt er geen .jpg meer achter te staan .$extension werkt nu niet meer.
Maar je gaf zelf al aan dat $extension sowieso niet werkte (deze bleef om een of andere reden leeg).

Wat ik zou doen: dump eens wat data op je scherm voordat je deze weg probeert te schrijven naar je database. Debug hiertoe $_POST en $_FILES om te zien wat hier precies in zit.

Ik vermoed dat hier het probleem niet echt het probleem is, maar meer het ontbreken van een strategie om te achterhalen wat er aan de hand is en wat de toestand van je variabelen is.

Stap 1 daartoe is simpelweg kijken welke waarden deze variabelen hebben zodat je voor jezelf overzicht creƫert.
Thomas het is gelukt, bedankt voor je hulp.

Reageren