Upload und Daten-Verwertung für DB im gleiche Formular?

dsturm

Erfahrenes Mitglied
Hallo,

bin gerade dabei ein Uploadskript zu basteln, und stelle mir nun die Frage:

ist es möglich im selben Formular Dateien hochzuladen && Daten einer Datenbank zu übergeben? Durch 'enctype="multipart/form-data"' wird das mit den Daten ja verhindert...

Hatte ein Formular zum DBbefüllen erstellt und wollte nun mitten im Formular einen Upload ermöglichen. 'Ne Idee? Verständlich ausgedrückt? Falls nicht, tut's mir leid, sitze schon einige Stündchen vor der dummen Kiste :eek:
 
ich weiß nicht, was du genau meinst, aber ich hab mal ein Programm geschireben, mit dem man Dateien hochladen kannst:

PHP:
<?php
	define("INFOFILE","dateien/dateien");
	define("DATEIEN","dateien/");
	define("PASSWD","hallo, das ist das passwort");
	global $msg_g;
	global $msg_s;

	if (!empty($_POST['enterup'])) uploadfile();
	init_var();
	if (!empty($_POST['enterdelall'])) {
		if ($_POST['passwd']==PASSWD){
			deleteall(); 
			init_var();
			$msg_g="Alle Dateien wurden erfolgreich gel&ouml;scht";
			}else{
			$msg_s="Falsches Passwort";
			}
		}
	if (!empty($_POST['enterdel'])) {
		if ($_POST['passwd']==PASSWD){
			delete(); 
			init_var();
			$msg_g="Makierte Dateien wurden erfolgreich gel&ouml;scht";
			}else{
			$msg_s="Falsches Passwort";
			}
		}
	if (!empty($_GET['datid'])) loadfile($_GET['datid']);


        function loadfile($id){
                global $werte;
                global $anzahl;
                for ($a=0;$a<$anzahl;$a++){
                        if ($werte[$a][0]==$id){
                                header("Content-type: application");
                                header('Content-Disposition: attachment; filename="'.$werte[$a][3].'"');
                                $datei=fopen(DATEIEN.$id,"r");
                                while (!feof($datei)) echo fgets($datei,1000);
                                fclose($datei);
                                $werte[$a][7]=$werte[$a][7]+1;
                                $werte[$a][7]=$werte[$a][7]." ";

                                $datei=fopen(INFOFILE,"w");
                                for ($b=0;$b<$anzahl;$b++){
                                        $werte[$b][7]=substr($werte[$b][7],0,strlen($werte[$b][7])-1);
                                        fputs($datei,$werte[$b][0]."|".$werte[$b][1]."|".$werte[$b][2]."|".$werte[$b][3]."|".$werte[$b][4]."|".$werte[$b][5]."|".$werte[$b][6]."|".$werte[$b][7].chr(10));
                                }
                                fclose($datei);
                        }
                }
		exit();
        }

	function makefile($quelle,$ziel){
		if (file_exists($ziel)) return false;
		copy ($quelle,$ziel);
		return true;
	}

	function makeeintrag($nummer,$user,$typ,$originalname,$kommentar,$grose){
		$datum=Date("Y-m-d H:i:s");
		$datei=fopen(INFOFILE,"a");
		fputs($datei,longzahl($nummer,4)."|".$user."|".$typ."|".$originalname."|".$kommentar."|".$grose."|".$datum."|0".chr(10));
		fclose($datei);
	}

	function lastnummer(){
		$datei=fopen(INFOFILE,"r");
		while (!feof($datei)) $zeile=fgets($datei,1000).$zeile;
		$zeile=substr($zeile,0,4);
		while (strpos(" ".$zeile,"0")==1) $zeile=substr($zeile,1);
		return $zeile;
	}

	function longzahl($zahl,$lange){
		$null="";
		for ($a=0;$a<$lange-strlen($zahl);$a++) $null=$null."0";
		return $null.$zahl;
	}

	function init_var(){
		global $werte;
		global $anzahl;		
		$datei=fopen(INFOFILE,"r");
		$zeile=fgets($datei,1000);
		$anzahl=0;
		while (!feof($datei)){
			$werte[$anzahl]=explode("|",$zeile);
			if (strpos(" ".$werte[$anzahl][0],chr(10))>0) $werte[$anzahl][0]=substr($werte[$anzahl][0],1);
			$zeile=fgets($datei,1000);
			$anzahl++;
		}
		fclose($datei);
		return;
	}

	function delete(){
		global $werte;
		global $anzahl;
		$datei=fopen(INFOFILE,"w");
		for ($a=0;$a<$anzahl;$a++){
			if ($_POST['act'.$a]=="act")  unlink(DATEIEN.$werte[$a][0]);
			if (empty($_POST['act'.$a]))  {
				$werte[$a][7]=substr($werte[$a][7],0,strlen($werte[$a][7])-1);
				fputs($datei,$werte[$a][0]."|".$werte[$a][1]."|".$werte[$a][2]."|".$werte[$a][3]."|".$werte[$a][4]."|".$werte[$a][5]."|".$werte[$a][6]."|".$werte[$a][7].chr(10));
				}
		}
		fclose($datei);
		return true;
	}

	function deleteall(){
		global $werte;
		global $anzahl;
		$datei=fopen(INFOFILE,"w");
		for ($a=0;$a<$anzahl;$a++){
			unlink(DATEIEN.$werte[$a][0]);
		}
		fclose($datei);
		return true;
	}

	function uploadfile(){
		global $msg_g;
		global $msg_s;
		$temp_name=$_FILES['bild']['tmp_name'];
		$file_name=$_FILES['bild']['name'];
		if (!empty($temp_name)){
			$nummer=lastnummer()+1;
			$extension=substr(strrchr($file_name,"."),1);
			$dateiname=longzahl($nummer,4);
			if (makefile($temp_name,DATEIEN.$dateiname)){
				$file_size=round(filesize(DATEIEN.$dateiname) /(1024*1024),2);
				$file_size_end="MB";
				if ($file_size<0.2){
					$file_size=round(filesize(DATEIEN.$dateiname) /(1024),0);
					$file_size_end="KB";
				}
				makeeintrag(longzahl($nummer,4),$_POST['user'],$extension,$file_name,$_POST['kommentar'],$file_size." ".$file_size_end);
				$msg_g="Das hochladen der Datei <b>".$file_name."</b> war erfolgreich";
			} 
			else $msg_s="Das hochladen der Datei <b>".$file_name."</b> hat einen unbekannten Fehler verursacht. Bitte wenden Sie sich an den <a href='mailto:europhil2000@hotmail.com'>Webmaster</a>";
		}
	}
?>
<html>
	<head>
		<title>Verwaltung</title>
	</head>
	<body>
		<p class="erfolg"><?php echo $msg_g; ?></p>
		<p class="fehler"><?php echo $msg_s; ?></p>
		<h1 align="center">Verwaltung</h1>
		<form action="manage.php" method="post" name="manage" enctype="multipart/form-data">
			<h2 align="center"><u>Datei hochloaden</u></h2>
			<table border="0" align="center">
				<tr>
					<td class="uberschrift">Besitzer</td>
					<td class="uberschrift" colspan="2">Bild</td>
					<td class="uberschrift">Kommentar</td>
					<td class="uberschrift"></td>
				</tr>
				<tr>
					<td class="uberschrift"><input type="text" size="20" maxlength="30" name="user" value=""/></td>
					<td class="uberschrift" colspan="2"><input type="file" size="20" name="bild" accept="*" value="" /></td>
					<td class="uberschrift"><input type="text" size="20" maxlength="30" name="kommentar" value=""/></td>
					<td class="uberschrift"><input type="submit" name="enterup" value="Hinzuf&uuml;gen" /></td>
				</tr>
			</table>
				<br />
				<h2 align="center"><u>Vorhandene Dateien<br /></u></h2>
			<table border="0" align="center">
				<tr>
					<td></td>
					<td class="uberschrift">ID</td>
					<td class="uberschrift">Besitzer</td>
					<td class="uberschrift">Typ</td>
					<td class="uberschrift">Dateiname</td>
					<td class="uberschrift">Kommentar</td>
					<td class="uberschrift">Gr&ouml;&szlig;e</td>
					<td class="uberschrift">DL</td>
					<td class="uberschrift">Datum</td>
				</tr>	
				<?php
					for ($a=0;$a<$anzahl;$a++){
						echo "<tr>";
						echo "<td class='sp2'> <input type='checkbox' name='act".$a."' value='act'> </input> </td>";
						echo "<td class='sp1'>".$werte[$a][0]."</td>";
						echo "<td class='sp2'>".$werte[$a][1]."</td>";
						echo "<td class='sp1'>".$werte[$a][2]."</td>";
						echo "<td class='sp2'> <a href='manage.php?datid=".$werte[$a][0]."' class='download'>".$werte[$a][3]."</a></td>";
						echo "<td class='sp1'>".$werte[$a][4]."</td>";
						echo "<td class='sp2'>".$werte[$a][5]."</td>";
						echo "<td class='sp1'>".$werte[$a][7]."</td>";
						echo "<td class='sp2'>".$werte[$a][6]."</td>";
						echo "</tr>";
						}
				?>
			</table>

<?php
if ($_GET['showdel']=='ja')
		echo '
			<p align="center">
				<input type="password" name="passwd">
				<input type="submit" name="enterdel" value="Markierte l&ouml;schen">
				<input type="submit" name="enterdelall" value="Alle l&ouml;schen">
			</p>
		';
?>
		</form>
	</body>
</html>

das Ergebnis des ganzen siehst du unter meiner HP

es verwaltet die dateien leider nicht in einer DB
 
Hui, danke für die Antwort.

Leider habe ich mich wohl tatsächlich nicht klar ausgedrückt. Also, mein Formular soll sowohl Dateien hochladen können, wie aber auch Datei-unabhängige Daten in einer DB abspeichern... Aber da muss ich mir dann auch nochmal dein Skript erstmal durchlesen.

Beispiel:

Ich habe ein Table mit Themen, in der ID, Texte, Links, ... zu jedem Thema stehen. Im CMS kann ich diese Info's ändern, aber auch bsp. pdf's hochladen. Da meine CMS-Seite aus einem Formular besteht in denen die Info's bearbeitet werden können und in dem auch eine Datei hochgeladen werden kann, wollte ich wissen, ob man es umgehen kann, dass das Formular nur eine Methode unterstützt.
Ein "normaler" <form>-Tag speichert mir die Infos in die Datenbank ab, mit 'enctype="multipart/form-data"' kann das Formular Daten hochladen -> ABER niemals funktioniert beides gleichzeitig.
Ich hatte zwischenzeitlich in dem "Info's-Formular", ein "Upload-Formular", mit 'enctype="multipart/form-data"' im Tag, eingefügt. Aber das funktioniert so auch nicht...

Falls ich es geschafft haben sollte, mein Problem zu verdeutlichen :-D Falls nicht, werde ich wohl eine andere Lösung finden (müssen)...

Auf jeden Fall schonmal vielen Dank
 
Zuletzt bearbeitet:
Ok, hab's!! Das ganze war ein Fehler meinerseits! Das kommt davon wenn man zu lange auf ein Wust am Krypten schaut... Srry ^^

Nochmal vielen Dank!
 
Ich weiß nicht ob ichs genau kapiert hab oder nicht.
Also:
es gibt 2 Funktionen auf dem Formular?
1. Infos ändern?
2. Datei uploaden?

das währe damit zu machen, wenn du zwei verschiedene Formulare machst:

1.
PHP:
<form action="manage.php?type=info" method="post" name="manage">
...
</form>

2.
PHP:
<form action="manage.php?type=upload" method="post" name="manage" enctype="multipart/form-data">
...
</form>

und das wertest du dann aus mit
PHP:
if ($_GET['type']=="info"){
//info ändern
}else{
//datei uploaden
}
 
^^ Naja, ich müsste leider das Upload-Formular IM Info-Formular aufgrund Layoutbeschränkungen einbauen.

Habe überlegt das Info-Formular zu splitten, aber wie übergebe ich dann die Werte von Info1 UND Info2 mit einem Button?

Aber wie gesagt, es funktioniert, widererwarten, doch mit enctype...
 
Zuletzt bearbeitet:
Zurück