webForumDet fria alternativet

hjälp med unikt filnamn

PHP

2 svar · 257 visningar · startad av egxezex

Medlem sedan jan. 200786 inlägg
Frågan#1

Hej. Håller på och försöka få servern att byta namn på en uppladdat fil om filnamnet redan finns. Hittade en kodsnutt, men ska jag vara ärlig så förstår jag mej inte på den :) .
Här är min kod iaf:

if (isset($_FILES['uplfile'])) {
	

	// Kontrollera att det angavs en fil
	if(empty($_FILES['uplfile']['name']))
		die('Ingen fil har valts');

	// Kontrollera storleken
	if($_FILES['uplfile']['size'] > $maxsize)
		die('Filen du valde är för stor. Maxstorleken är '.(string)($maxsize/1024).' KB.');

	// Kontrollera filtypen
	$types = explode(',', $filetypes);
	$file = explode('.', $_FILES['uplfile']['name']);
	$extension = $file[sizeof($file)-1];
	if(!in_array(strtolower($extension), $types))
		die('<br><br><STRONG>Du har en felaktig filtyp. Endast .jpg,gif,png,doc,zip,ppt,txt,pdf är tillåtet!</STRONG>');
	

	// Generera unikt filnamn
	$bokstav = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6');
	$thefile = $_FILES['uplfile']['name'];
	while (file_exists($upload_dir_mark.$thefile)) { $img = $bokstav[rand(0, count($bokstav)-1)].$thefile; }
	
	

	if (isset($_POST['komment'])) {
		if ($_POST['kategori'] && $line[user] != NEWSLETTER){
		
		$query3 = "INSERT INTO UserFiles (filename, RefID, Kommentar, Date) VALUES ('$thefile','$RefID','$komment3', $date)";
		mysql_query($query3) or die('Query failed query3: ' . mysql_error());
			
			$selected_radio = $_POST['kategori'];
			
				if($selected_radio == 'marketing'){
	
				if (is_uploaded_file($_FILES['uplfile']['tmp_name']) && move_uploaded_file($_FILES['uplfile']['tmp_name'],$upload_dir_mark.$thefile)) {
				
					echo"<br><strong><p class=\"warning\">Success!</strong><p>";
					echo "<br>Filen <strong>$thefile</strong> har nu laddats upp till användaren <strong>$line[user]</strong> <br> med kommentaren: <strong>$komment3 </strong>";

				}
				$query5 = "UPDATE UserFiles SET Kategori='marketing' WHERE Filename = '$thefile' ";
				mysql_query($query5) or die('Query failed query5: ' . mysql_error());
			}	
	
			
			if($selected_radio == 'purchase'){
	
				if (is_uploaded_file($_FILES['uplfile']['tmp_name']) && move_uploaded_file($_FILES['uplfile']['tmp_name'],$upload_dir_purc.$thefile)) {
				echo"<br><strong><p class=\"warning\">Success!</strong><p>";
					echo "<br>Filen <strong>$thefile</strong> har nu laddats upp till användaren <strong>$line[user]</strong> <br> med kommentaren: <strong>$komment3 </strong>";
				}
				$query5 = "UPDATE UserFiles SET Kategori='purchase' WHERE Filename = '$thefile' ";
				mysql_query($query5) or die('Query failed query5: ' . mysql_error());
			}	
	
			if($selected_radio == 'development'){
	
				if (is_uploaded_file($_FILES['uplfile']['tmp_name']) && move_uploaded_file($_FILES['uplfile']['tmp_name'],$upload_dir_deve.$thefile)) {
				echo"<br><strong><p class=\"warning\">Success!</strong><p>";
					echo "<br>Filen <strong>$thefile</strong> har nu laddats upp till användaren <strong>$line[user]</strong> <br> med kommentaren: <strong>$komment3 </strong>";
				}
				$query6 = "UPDATE UserFiles SET Kategori='development' WHERE Filename = '$thefile' ";
				mysql_query($query6) or die('Query failed query6: ' . mysql_error());
			}	
			
			

			}	
			

		if ($_POST['submit'] && $line[user] == NEWSLETTER){
					
				$query3 = "INSERT INTO UserFiles (filename, RefID, Kommentar, Date) VALUES ('$thefile','$RefID','$komment3', $date)";
				mysql_query($query3) or die('Query failed query3: ' . mysql_error());
						
								
						
				if (is_uploaded_file($_FILES['uplfile']['tmp_name']) && move_uploaded_file($_FILES['uplfile']['tmp_name'],$upload_dir_news.$thefile)) {
					echo"<br><strong><p class=\"warning\">Success!</strong><p>";
					echo "<br>Filen <strong>$thefile</strong> har nu laddats upp till  <strong>alla</strong> <br> med kommentaren: <strong>$komment3 </strong>";
					}
					$query7 = "UPDATE UserFiles SET Kategori='newsletter' WHERE Filename = '$thefile' ";
					mysql_query($query7) or die('Query failed query7: ' . mysql_error());
			
 					$query8 = "UPDATE UserFiles SET RefID='all' WHERE Filename = '$thefile' ";
 					mysql_query($query8) or die('Query failed query8: ' . mysql_error());
						
				}

		}
	if (!$_POST['kategori'] && $line[user] != NEWSLETTER){
		echo"<br><br><strong><p class=\"warning\">Du har inte valt någon kategori. Filen laddades INTE upp!</strong><p>";
	}
	}

Någon som orkar hjälpa mej med att anpassa in koden för unikt filnamn så att den funkar.. Det som händer just nu är att om en fil redan finns så skrivs den över.
Som ni kan se i koden finns också 4 olika kategorier man kan få på filerna, vilket hamnar i olika mappar på servern. Så som det ser ut just nu har jag bara testat och lekt lite, så den kollar bara i $upload_dir_mark. De andra mapparna heter $upload_dir_purc , $upload_dir_deve, $upload_dir_news.

Medlem sedan jan. 200786 inlägg
#2

Ingen som vet varför min kod inte fungerar?, eller hur jag kan få den att slumpa till ett tecken om filnamnet redan finns?

Medlem sedan jan. 200786 inlägg
#3

Fick ordning på det själv.

$bokstav = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6');
	$img = $bokstav[rand(0, count($bokstav)-1)];
	if (file_exists($upload_dir.$thefile)) {
		 		$thefile = $img.'_'.$thefile;
255 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)