[PHP5] Beliebig viele Dateien Uploaden?

Romsl

Erfahrenes Mitglied
Ich habe folgendes schon versucht um mehrere Dateien in eine MySQL Datenbank hochzuladen.

store.php5

PHP:
<?php
session_start();
include_once('./include/Connection.inc.php5');
include_once('./include/Add_File.inc.php5');
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Speicherungsscript</title>
</head>
<body bgcolor="#FFFFFF">

<?php
/*
 * Create a new object for database connections.
 */
$con = new Connection();

/*
 * Connect to database.
 */
$con->connect_db();

/*
 * Insert picture to the database.
 */
if ($_POST['submit'])
{
	$form_description = $_POST['form_description_self'];

	if ($_POST['form_description_available'])
	{
		$form_description = $_POST['form_description_available'];
	}

	$add_file = unserialize($_SESSION['add_file']);

	if (!empty($add_file->file_array))
	{
		$file_array = $add_file->file_array;
	
		foreach($file_array as $tmp_file)
		{
			$data = addslashes(fread(fopen($tmp_file[0], "r"), filesize($tmp_file[0])));

   			$result = mysql_query("INSERT INTO misc_pic (description,bin_data,filename,filesize,filetype)
								VALUES ('$form_description','$data','$tmp_file[1]','$tmp_file[2]',
								'$tmp_file[3]')");
	
			$id = mysql_insert_id();
			print "<p>This file has the following Database ID: <b>".$id."</b><br>";
		}
	}

    $data = addslashes(fread(fopen($_FILES['form_data']['tmp_name'], "r"), filesize($_FILES['form_data']['tmp_name'])));

    $result = mysql_query("	INSERT INTO misc_pic (description,bin_data,filename,filesize,filetype)
							VALUES ('$form_description','$data','$form_data_name','$form_data_size',
							'$form_data_type')");
	
    $id = mysql_insert_id();
    print "<p>This file has the following Database ID: <b>".$id."</b>";
}
else
{
	$option_result = mysql_query("SELECT DISTINCT description FROM misc_pic");
?>
    <form method="POST" action="<?php echo $PHP_SELF; ?>" enctype="multipart/form-data">
	    Vorhandene Foto-Serien-Beschreibungen:
		<br>
		<select name="form_description_available">
			<option selected> </option>
<?php
	while ($option = mysql_fetch_row($option_result)) {
		if ($option[0])
		{
			printf("\t\t\t<option>".$option[0]."</option>\n");
		}
	}
?>
		</select>
		<br>
		Eigene Foto-Serien-Beschreibung:
		<br>
		<input type="text" name="form_description_self">
	
    	<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
    	<br>
		File to upload/store in database:<br>
    	<input type="file" name="form_data" size="60">
    	<p>
			<input type="submit" name="add" value="add">
			<input type="submit" name="submit" value="submit">
		</p>
	</form>
<?php
}

if ($_POST['add'])
{
	$add_file = unserialize($_SESSION['add_file']);
	
	$file_array = $add_file->add($_FILES['form_data']['tmp_name'], $_FILES['form_data']['name'], 
							$_FILES['form_data']['size'], $_FILES['form_data']['type']);

	foreach($file_array as $element_array)
	{
		foreach($element_array as $element)
		{
			printf($element." ");
		}
		printf("<br>");
	}
		
	$_SESSION['add_file'] = serialize($add_file);
}
else
{
	$add_file = new Add_File();
	$_SESSION['add_file'] = serialize($add_file);
}


/*
 * Close the database connection.
 */
$con->disconnect_db();
?>
</body>
</html>


Add_File.php5

PHP:
<?php
class Add_File
{
	var $file_array[];
	
	function add($file_data)
	{
		array_push($this->file_array, $file_data);
		
		return $this->file_array;
	}
}
?>

Aber leider funktioniert das nicht weil der Server die temporären Dateien nicht behält :(

Gibt es sonst noch irgend eine andere Möglichkeit um vielleicht den ganzen Ordner einzulesen und dann jede Datei einzeln in die Datenbank speichert? Oder vielleicht mit meinem Ansatz nur nicht über die temporäre Datei?

Ist es Sinnvoll Bilder in einer Datenbank zu speichern? Wenn nein, warum? Und wie mache ich es denn dann?

Ich möchte ein Upload Formular erstellen, das Bilder in eine Datenbank oder sonst wohin auf den Server lädt und anhand von diesen Bildern (Primärschlüsseln eines DB Eintrages + Beschreibung) eben dynamisch Webseiten entwirft. Möchte das Layout gerne selbst bestimmen, da die Webseite schon besteht. Es aber zu aufwendig ist jedesmal die Bilder hart in HTML zu coden.

Danke für eure Hilfe

Romsl
 
Als kleiner Tipp: Du solltest die Bilder nicht direkt in der Datenbank speichern! Speicher den Dateinamen in der DB, die eigentlichen Dateien solltest du aber ganz normal in einem Ordner speichern
 
Wie kann ich per HTML Formular denn ein komplettes Verzeichnis auswählen? Und alle darin enthaltenen Dateien auf den Server laden, die Links + Dateiname dazu in eine MySQL Datenbank eintragen?

Gruß

Romsl
 
Das geht so leider nicht. Alternativ: Erstelle dir ein Archiv mit den Dateien, lade es hoch und verarbeite das dann weiter.
 
Zurück