Datei-Upload / Datei wird nicht verschoben

folio

Erfahrenes Mitglied
Hi,

ich habe mir gerade ein kleines Script für einen Dateiupload programmiert.

PHP:
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html><!-- InstanceBegin template="/Templates/Redaktions-Seite.dwt" codeOutsideHTMLIsLocked="false" -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<!-- InstanceBeginEditable name="doctitle" -->
<title>Downloads @ statement-online.com // interner Bereich</title>
<!-- InstanceEndEditable -->
<link rel="stylesheet" type="text/css" href="st_formate.css">
<!--[if gte IE 5]>
	<link href="ie5kompatibel.css" rel="stylesheet" type="text/css" media="screen" />	
<![endif]-->
<script type='text/javascript' src="mm_menu.js"></script>
<script type='text/javascript' >
<!--
<?php
require('popup_menu.php');
?>
//-->
</script>
<!-- InstanceBeginEditable name="head" --><!-- InstanceEndEditable -->
</head>

<body>
<script type='text/javascript'>
<!--
mmLoadMenus();
//-->
</script>
<div class="hauptleiste">
<?php
if ($HTTP_SESSION_VARS['valid_user'])
{
// Javascript-Menü
echo "<div class='popupmenu' onMouseOut=\"MM_startTimeout();\"  onMouseOver=\"MM_showMenu(window.mm_menu_1128215905_4,7,26,null,'menu');\">Artikel</div>";
echo "<div class='popupmenu' onMouseOut=\"MM_startTimeout();\"  onMouseOver=\"MM_showMenu(window.mm_menu_1128220109_3,83,26,null,'menu');\">Ideen</div>";
echo "<div class='popupmenu' onMouseOut=\"MM_startTimeout();\"  onMouseOver=\"MM_showMenu(window.mm_menu_1128220113_2,152,26,null,'menu');\">Zitate</div>";
echo "<div class='popupmenu' onMouseOut=\"MM_startTimeout();\"  onMouseOver=\"MM_showMenu(window.mm_menu_1128220120_1,222,26,null,'menu');\">Termine</div>";
echo "<div class='popupmenu' onMouseOut=\"MM_startTimeout();\"  onMouseOver=\"MM_showMenu(window.mm_menu_1128220125_0,309,26,null,'menu');\">Profile</div>";
}
?>
<!-- InstanceBeginEditable name="Inhalt" -->
<?php
ERROR_REPORTING(E_ALL);

require("funktionen.php");
require("download_preferences.php");
echo "<div id='inhalt'>";
if (isset($_SESSION['valid_user']))
{ 
	
	require('daten/mysql_user_login.php');  	   
    echo '<h1>Downloads</h1>';
	
	/*
	if ( isset($HTTP_POST_FILES['userfile']['tmp_name']) && !$HTTP_POST_FILES['userfile']['tmp_name'] )
	{
		echo "<span class='fehler'>Du musst eine Datei auswählen!</span>";
	}	
	*/
	//FORMULAR FÜR NEUE DATEIEN
	//##################################################################
	echo "Hier kannst du verschiedene Dateien deiner Wahl hochladen, die in der statement benötigt werden. Bitte lade hier aber keine Bilder hoch - die Möglichkeit dazu findest du unter dem jeweiligen <a href=\"artikel_anschauen.php\">Artikel</a>.<br /><br /><br /><br/>";
	echo "<form name=\"hinzufuegen\" enctype=\"multipart/form-data\" action=\"$_SERVER[PHP_SELF]\" method=\"post\">";
	echo '<table class="upload">' ."\n"; 
	echo '<tr><td><h3>Datei hochladen</h3></td></tr>';  
	echo '<tr><td rowspan="4"><img src="bilder/upload_big.gif"></td><td class="spalte1">Name</td><td class="spalte2"><input name="name" type="text" size="103"></td></tr>' ."\n";   
	echo '<tr><td>Beschreibung</td><td><textarea name="beschreibung"></textarea></td>';
	echo '<tr><td><input type="hidden" name="MAX_FILE_SIZE" value="5000000">Datei (*)</td><td><input name="userfile" type="file"></td></tr>' ."\n";
	echo '<tr><td></td><td><input type="submit" name="wegdamit" value="Datei hochladen"></td></tr></table></form>' ."\n";
	echo "<span class='fehler'>";
	//##################################################################
	
	
	
	//Nachdem das Formular ABGESCHICKT wurde
	//##################################################################
		if ($_POST['wegdamit'])
		{
		
			$fehler = "<span class='fehler'>";
			
			if ( isset($_POST['userfile']['tmp_name']) && !$_POST['userfile']['tmp_name'] ) $fehler.= "Du musst eine Datei auswählen!<br />";
			//if(!$HTTP_POST_VARS['name'] || !$$HTTP_POST_VARS['beschreibung']) $fehler.= "Bitte fülle alle Felder aus.<br />";
			
			if ("b" == "b")
			{   
				//$name1 ist eine kurzer Name, $beschreibung1 ein ausführlicher Text.
				$name1=stripslashes($_POST['name']);
				$beschreibung1=stripslashes($_POST['beschreibung']);
								
				//Alle Variablen definieren, die in die DB geschrieben werden
				$userfile = $_FILES['userfile']['tmp_name'];	
				$userfile_name = $_FILES['userfile']['name'];	
				$userfile_size = $_FILES['userfile']['size'];
				$userfile_type = $_FILES['userfile']['type'];	  
				$userfile_error = $_FILES['userfile']['error'];
				$urheber = $_SESSION['valid_user'];
				$upfile = "$verzeichnis/$userfile_name";
				

				//Dateityp herausfinden
				if ($userfile_type == "application/msword") $dateiname = "Word-Dokument";
				if ($userfile_type == "text/plain") $dateiname = "reine Textdatei";
				if ($userfile_type == "application/zip") $dateiname = "ZIP-Datei";
				if ($userfile_type == "image/tiff") $dateiname = "TIF-Datei (Bild)";
				if ($userfile_type == "text/css") $dateiname = "CSS-Stylesheet (f&uuml;r Internetseiten)";
				if ($userfile_type == "text/html") $dateiname = "HTML-Datei (f&uuml;r Internetseiten)";
				if ($userfile_type == "text/rtf") $dateiname = "Rich-Text Format (u. A. für Word)";
				if ($userfile_type == "application/x-httpd-php") $dateiname = "PHP-Datei (f&uuml;r Internetseiten)";
				if ($userfile_type == "application/msexcel") $dateiname = "Excel-Datei";
				if ($userfile_type == "application/postscript") $dateiname = "Postscript-Datei";
				if ($userfile_type == "application/pdf") $dateiname = "Adobe PDF-Datei";
				
				//dem Ordner Rechte zuweisen
				@mkdir($verzeichnis,0710);
				
				/*
				if (is_uploaded_file($userfile)) 
				{
				*/
				print($upfile);
				move_uploaded_file($userfile, $upfile);
					
				// }
				
				//Rechte für die Datei setzen
				//chmod($upfile,0740);
			}
			if($fehler != "<span class='fehler'>")
			{
				$fehler.= "</span>";
				//print($fehler);
				
			}
			else
			{
				//Name, Beschreibung und Dateityp an die Datenbank senden
				$anfrage="INSERT INTO st_downloads (name,beschreibung,datum,urheber,dateityp,speicherort)";
				$anfrage .= 'VALUES ("' .$name1 .'","' .$beschreibung1 .'",NOW(),"' .$HTTP_SESSION_VARS['valid_user'] .'","' .$dateiname .'","' .$userfile_name. '");';
				require("daten/mysql_db.php");
				require("daten/mysql_user_login.php");
				mysql_query($anfrage);
				mysql_close($verbunden);
			
				//Fertigmeldung.
				echo 'Datei hochgeladen.';
				echo "</span>";
			}
   
			//POST-Variablen löschen, um doppelte Einträge zu vermeiden
			unset($_POST['name']);
			unset($_POST['beschreibung']);
			
			
		}
	 
	
	

	//Hier AUSGABE der schon hochgeladenen Dateien
	//##################################################################################################
	print("<table width=\"100%\"><tr><td bgcolor=\"#ffcc00\">Name</td><td bgcolor=\"#ddddd\">Datum</td><td>Dateiformat</td><td>Autor</td><td>Download</td>");
	if ($rechte == 0)
	{
		print("<td width=\"25px\"></td>");
	}
	print("</tr>");
	

	$auslesen = "SELECT id,name,beschreibung,datum,urheber,dateityp,speicherort FROM st_downloads";
	require("daten/mysql_db.php");
	require("daten/mysql_user_login.php");
	$schleife = mysql_query($auslesen);
	while($record = mysql_fetch_array($schleife))
	{
		$jetzt = $record[3];
		$zeit = date('d.m.y',$jetzt)." um ".date('H:i',$jetzt)."";
		$downloadlink = "$verzeichnis/$record[6]";
		
		print("<tr><td>$record[1]<br/><span style=\"font-size: 11px;\">$record[2]</span></td><td>$zeit</td><td>$record[5]</td><td>$record[4]</td><td><a href=\"$downloadlink\" alt=\"Download\" title=\"Download\"><img src=\"bilder/download_icon.gif\" border=\"0\" /></a></td>");
				
		//NUR FÜR ADMINS UND AUTOREN DER DATEIEN!
		if($rechte = 0 || $_SESSION['valid_user'] = $record[4])
		{
		// LÖSCHEN
		print("<td><a href=\"$_SERVER[PHP_SELF]?action=delete&was=$record[0]\" title=\"L&ouml;schen\" alt=\"L&ouml;schen\"><img src=\"bilder/delete.gif\" alt=\"L&ouml;schen\" border=\"0\" /></a></td>");
		// EDITIEREN
		print("<td><a href=\"$_SERVER[PHP_SELF]?action=edit&was=$record[0]\" title=\"Editieren\" alt=\"editieren\">Editieren</a></td>");
		}
		print("</tr>");
		
	}
	mysql_close($verbunden);
	print("</table>");
	
	
	//Hier LÖSCHEN von Dateien
	//###############################################################################################
	//Dieser Block gilt nur für Administratoren. Niemand sonst darf dateien löschen (dazu $rechte == 0)
	if($rechte == 0)
	{
		//Prüfen: Wurde diese Datei mit der action "delete" aufgerufen und wurde auch eine id der zu löschenden Datei vergeben?
		
		if($_GET['action'] == "delete" && isset($_GET['was']))
		{
		$anfrage = "SELECT speicherort FROM st_downloads WHERE id = $_GET[was]";
		$erg = mysql_anfrage($anfrage);
		$row = mysql_fetch_row($erg);
		//Mit unlink() die eigentliche Datei löschen. $downloadlink wurde weiter oben konstruiert --> ist ja der gleiche pfad
		// unlink("$uverz);
		//zusätzlich zur datei auch die sachen aus der db löschen
		$anfrage2 = "DELETE FROM st_downloads WHERE id = $_GET[was]";
		$erg = mysql_anfrage($anfrage2);
		//damit bei einem eventuellen reload keine probleme auftauchen, get-variablen löschen
		unset($_GET['action']);
		unset($_GET['was']);
		print('<span class="successful">Die Datei wurde erfolgreich gelöscht!</span>');
		}
		
	
	
	//Hier EDITIEREN von Dateien
	//###############################################################################################
	//Nur für Administratoren und Autoren des jeweiligen Artikels, damit gefälschte GET-Variablen nichts ausrichten können
		if($_GET['action'] == "edit" && isset($_GET['was']))
		{
		$anfrage = "SELECT id,name,beschreibung FROM st_downloads WHERE id = $_GET[was]";
		$erg = mysql_anfrage($anfrage);
		$row = mysql_fetch_row($erg);
		
		print("<h2>Download Nr. $row[0] überarbeiten</h2><table>");
		print("<form action=\"$_SERVER[PHP_SELF]\" method=\"get\"><br /><tr><td>Name</td><td><input type=\"text\" name=\"new_name\" value=\"$row[1]\" /></td></tr><tr><td>Beschreibung</td><td><textarea name=\"new_description\">$row[2]</textarea></td></tr></table>");
		print("<input type=\"submit\" value=\"Informationen &aouml;ndern\"></form>");
		unset($_GET['action']);
		unset($_GET['was']);
		}
		
		if(isset($_GET['new_name']) && isset($_GET['new_description']))
		{
			$anfrage_editnow = "INSERT into id,name,";
		}
		
		
	}
}
?>
<!-- InstanceEndEditable -->
</div>
</body>
<!-- InstanceEnd --></html>

Für mehr Übersicht hab ich es auch noch mal bei paste gepostet:
http://paste.calitrix.de/94

Der eigentliche Upload wird in den Zeilen 81 - 159 durchgeführt. Erst werden alle Felder geprüft usw. und dann mit move_uploaded_file() die Datei in den Ordner verschoben.

Die beiden Parameter für move_uploaded_file lauten wie folgt:
($userfile, $upfile);
$userfile wird in Zeile 96 definiert. $upfile in zeile 102. $verzeichnis wird in der Datei download_preferences.php definiert.

Wenn ich nun $userfile und $upfile ausgebe, kommt folgendes dabei raus:
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\phpB.tmp
/downloads/versetzt_schriftzug.jpg

Ich mache das ganze lokal. Die Datei downloads.php liegt im Ordner C:\xampp\xampp\htdocs\statement\redaktion, die Downloads sollen in den Ordner C:\xampp\xampp\htdocs\statement\redaktion\downloads. Dort kommen jedoch keine Dateien an!

ich hoffe dass mir jemand bei meinem bescheidenen Problemchen helfen kann ;-)
 
ohne jetzt alles zu durchforsten, hat dein Uploadpfad als leztes ein / ? Andernfalls heist dein upload verzeichnisnameUploadname.endung und ist ein Verzeichnis darüber


EDIT: register_globals ist auf on? kann andernfalls sein, das gar nix übergeben wird, das schonmal geprüft?
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück