Uploaden mit mehreren Feldern ( Fehler )

Habe es in beiden Varianten gemacht wie Sie mir das sagten, leider bekomme ich immer den Fehler

Parse error: syntax error, unexpected '.' in /mnt/web3/42/81/51163381/htdocs/upload/upload_offiziel.php on line 16


PHP:
<html>
<head><title>Hundeschule Red Bone UploadSkript|Ergebniss</title>
        
<body bgcolor="#FFD39B">
<font 

size="5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n

bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><u>Herzlich Wilkommen im Upload System der Hundeschule Red
Bone<br><center>Ergebnis des Uploads</center></u></b></font>
<?php
echo '
<p>';
if(is_uploaded_file($_FILES['datei']['tmp_name']))
if(file_exists($datei))
{
   $upload_dir.$_FILES['file']['name'].'2';  //Hier wird zum Dateinamen 2 angehängt. Du kannst natürlich dazugeben was du 
willst...
   echo 'Dateiname bereits vorhanden! Die Datei wurde unter '.$datei.' abgespeichert!';
}

//Hier dann den Fileupload mit Hilfe von $datei ausführen....  

if (isset($_FILES['datei'])) {
    $uploaddir = $_SERVER['DOCUMENT_ROOT'].'/upload/';
    
    $uploadfile = $uploaddir.$_FILES['datei']['name'];
    $filename = $_FILES['datei']['name'];
$datei = $upload_dir.$_FILES['file']['name'];
    if (move_uploaded_file($_FILES['datei']['tmp_name'], $uploadfile)){
echo "<p style='color:#CD7054'>Sie haben soebend<br>http://hundeschule-redbone.de/upload/<strong>$filename</strong> 

<br>erfolgreich hochgeladen.<a  href='/upload/$filename'>Voransicht</a><br>Zum Einfügen ins Forum können  Sie auch folgende 

Cods benutzen:<br><hr>[ img]  http://hundeschule-redbone.de/upload/$filename
[ /img]<br><hr>[grafik]
http://hundeschule-redbone.de/upload/$filename
[/grafik]";
    } else {
        echo "<p style='color:#c00'>$filename konnte  <strong>nicht</strong> hochgeladen  

werden!".$_FILES['userfile']['error']."</p>";
    }
}

echo '
<br><hr>

Könnten Sie sich das Erklären?
 
oh mein gott, sag doch bitte nicht SIE zu mir, ich bin doch erst 17 :D

änder mal das
PHP:
$upload_dir.$_FILES['file']['name'].'2';
auf das:
PHP:
$upload_dir.='2'; //Hier wird dann 2 dazugeschrieben

und
PHP:
$uploaddir = $_SERVER['DOCUMENT_ROOT'].'/upload/';
schreib ganz oben hin
 
So würde es dann aussehen;
PHP:
<?php
echo '
<p>';
$uploaddir = $_SERVER['DOCUMENT_ROOT'].'/upload/';
if(file_exists($datei))
{
   $upload_dir.='2'; //Hier wird dann 2 dazugeschrieben 
   echo 'Dateiname bereits vorhanden! Die Datei wurde unter '.$datei.' 

abgespeichert!';
}

//Hier dann den Fileupload mit Hilfe von $datei ausführen....  

if (isset($_FILES['datei'])) {
if(is_uploaded_file($_FILES['datei']['tmp_name']))

    $uploadfile = $uploaddir.$_FILES['datei']['name'];
    $filename = $_FILES['datei']['name'];
$datei = $upload_dir.$_FILES['file']['name'];
    if (move_uploaded_file($_FILES['datei']['tmp_name'], $uploadfile)){
echo "<p style='color:#CD7054'>Sie haben 

soebend<br>http://hundeschule-redbone.de/upload/<strong>$filename</strong

> 

<br>erfolgreich hochgeladen.<a  

href='/upload/$filename'>Voransicht</a><br>Zum Einfügen ins Forum können  

Sie auch folgende 

Cods benutzen:<br><hr>[ img]  

http://hundeschule-redbone.de/upload/$filename
[ /img]<br><hr>[grafik]
http://hundeschule-redbone.de/upload/$filename
[/grafik]";
    } else {
        echo "<p style='color:#c00'>$filename konnte  

<strong>nicht</strong> hochgeladen  

werden!".$_FILES['userfile']['error']."</p>";
    }
}

echo '
<br><hr>

Dort ist aber alles noch ohne Wirkung geblieben.
Hast du noch eine Lösung?

Nagit, dann "dutze" ich dich mal.:)
 
Das Problem ist denke ich mal, dass er bei der file_exists() Abfrage gar noch nicht weiß, was $datei ist.

Versuch's mal mit dem:
PHP:
<?php
echo '<p>';
$upload_dir = $_SERVER['DOCUMENT_ROOT'].'/test/';  //Hier hast du '_' vergessen
if (isset($_FILES['datei']))
{
	if(is_uploaded_file($_FILES['datei']['tmp_name']))
	{
		$datei = $upload_dir.$_FILES['datei']['name'];  //du hast des öfteren statt $_FILES['datei] $_FILES['file'] geschrieben...
		if(file_exists($datei))
		{
			$dateiname = explode(".",$_FILES['datei']['name']);
			$dateiname[0] .= "2.";
			$datei = $upload_dir.$dateiname[0].$dateiname[1];
			echo 'Dateiname bereits vorhanden! Die Datei wurde unter '.$datei.' abgespeichert!';
		}
		//$uploadfile = $uploaddir.$_FILES['datei']['name']; Wozu diese Zeile? $uploadfile = $datei - weg damit...
		
		if (move_uploaded_file($_FILES['datei']['tmp_name'], $datei))
		{
			echo "<p style='color:#CD7054'>Sie haben .... usw.";
		}
	}
}
?>

Man darf nicht einfach zum Dateipfad bzw. -namen 2 dazuschreiben, denn sonst würde die Datei z.B. xyz.txt2 heißen. Der 2er muss aber vor dem Punkt dazugeschrieben werden.

Dieser Teil
PHP:
$dateiname = explode(".",$_FILES['datei']['name']);
$dateiname[0] .= "2.";
$datei = $upload_dir.$dateiname[0].$dateiname[1];
bewirkt folgendes:
explode gibt ein Array zurück. Im $dateiname[0] steht der Teil vor dem Punkt (also z.B. xyz) und im $dateiname[1] steht "txt". Mit $dateiname[0] .= "2."; wird aus "xyz" > "xyz2."

Dann werden die beiden Elemente wieder zusammengefügt, sodass "xyz2.txt" entsteht.

Du musst aber bedenken, dass das nur EINMAL funktioniert, wenn die Datei bereits vorhanden ist, da hier die Konstante 2 verwendet wird. Solltest du es für mehrere Fälle wollen, musst du vorher noch überprüfen, wieviele "gleichnamige" Datein bereits vorhanden sind...

Lg
 
Leider wieder der Fehler
Parse error: syntax error, unexpected $end in /mnt/web3/42/81/51163381/htdocs/upload/upload_offiziel.php on line 93

Das Skript sieht nun so aus;
PHP:
<?php
echo '<p>';
$upload_dir = $_SERVER['DOCUMENT_ROOT'].'/upload/';  
if (isset($_FILES['datei']))
{
    if(is_uploaded_file($_FILES['datei']['tmp_name']))
    {
        $datei = $upload_dir.$_FILES['datei']['name'];  
        if(file_exists($datei))
        {
            $dateiname = explode(".",$_FILES['datei']['name']);
            $dateiname[0] .= "2.";
            $datei = $upload_dir.$dateiname[0].$dateiname[1];
            echo 'Dateiname bereits vorhanden! Die Datei wurde unter 

'.$datei.' abgespeichert!';
        }      
        if (move_uploaded_file($_FILES['datei']['tmp_name'], $datei))
        { 
echo "<p style='color:#CD7054'>Sie haben 

soebend<br>http://hundeschule-redbone.de/upload/<strong>$filename</strong

> 

<br>erfolgreich hochgeladen.<a  

href='/upload/$filename'>Voransicht</a><br>Zum Einfügen ins Forum können  

Sie auch folgende 

Cods benutzen:<br><hr>[ img]  

http://hundeschule-redbone.de/upload/$filename
[ /img]<br><hr>[grafik]
http://hundeschule-redbone.de/upload/$filename
[/grafik]";
    } else {
        echo "<p style='color:#c00'>$filename konnte  

<strong>nicht</strong> hochgeladen  

werden!".$_FILES['userfile']['error']."</p>";
    }
}

echo '
<br><hr>
 
Muss mich entschuldigen, funktioniert doch, nur jetzt zeigt er mir den kompletten Pfad an

Dateiname bereits vorhanden! Die Datei wurde unter /home/strato/www/hu/www.hundeschule-redbone.de/htdocs/upload/grafik.gif abgespeichert!

Und als Ergebniss zeigt er mir nicht den geänderten Namen an, genau wie bei der Voransicht.;



Du musst aber bedenken, dass das nur EINMAL funktioniert, wenn die Datei bereits vorhanden ist, da hier die Konstante 2 verwendet wird. Solltest du es für mehrere Fälle wollen, musst du vorher noch überprüfen, wieviele "gleichnamige" Datein bereits vorhanden sind...

Wenn es jetzt nicht zu weit geht, kannst du mir auch sagen wie ich das Überprüfen kann wieviele der Dateien mit diesen Namen vorhanden sind, also das auch mehr als 2 gleiche Namen hochgeladen werden können und nicht das es nur einmal funktioniert.
 
Zuletzt bearbeitet:
PHP:
$filename = $dateiname[0].$dateiname[1];
echo 'Dateiname bereits vorhanden! Die Datei wurde unter '.$filename.' abgespeichert!';
So sollte nur der Dateiname angezeigt werden.

Und was wird nicht richtig angezeigt?
 
Ja, jetzt wird es richtig angezeigt.

Ich meine, das man nicht nur einmal den Namen mit 2 erweitert, sondern wenn es nun schon z.b. grafik.gif und grafik2.gif gibt das er automatisch dann die nächste zahl nimmt, oder das er dann das Uploaden komplett verweigert, denn wenn schon zwei Grafiken ( also jetzt z.B. grafik.gif und grafik2.gif ) vorhanden sind, und dann einer auch eine Grafik mit dem Namen grafik.gif hochladen will dann überschreibt er ja die grafik2.gif. Er soll aber entweder die Datei dann grafik3.gif nennen oder den Upload verweigern wegen dem Grund das beide Namen vorhanden sind.
Hoffe das ich es ordentlich erklärt habe und du es verstehst.
 
So, hab mir mal ein skript für deine Zwecke aus der Hand gschüttelt :D

PHP:
<?php
$upload_dir = $_SERVER['DOCUMENT_ROOT'].'/test/';
if (isset($_FILES['datei']))
{
	if(is_uploaded_file($_FILES['datei']['tmp_name']))
	{
		$datei = $upload_dir.$_FILES['datei']['name'];
		$dateiname = $_FILES['datei']['name'];
		if(file_exists($datei))
		{	
			$file = "count.txt";
			$fp = fopen($file,"r");
			$count = fread($fp,filesize($file));
			fclose($fp);
			$help = explode("|",$count);
			$lastFileName = $help[1];	
			if($dateiname == $lastFileName)
			{
				$dateiname = explode(".",$_FILES['datei']['name']);
				$addedNum = getCount();
				incCount($addedNum);
				$dateiname[0] .= $addedNum.".";
				$datei = $upload_dir.$dateiname[0].$dateiname[1]; 
				$filename = $dateiname[0].$dateiname[1];
				echo '<span style="color:red">Dateiname bereits vorhanden!</span> Die Datei wurde unter '.$filename.' abgespeichert!';  
			} else {
				$file = "count.txt";
				$fp = fopen($file,"w");
				$offset = 0;
				for($i=1; $i<10; $i++)
				{
					$dateiname = explode(".",$_FILES['datei']['name']);
					$dateiname[0] .= "_".$i.".";
					$dateiname = $upload_dir.$dateiname[0].$dateiname[1];				
					if(file_exists($dateiname))
					{
						$offset = $i+1;
					} else {
						$i=101; //Einfach zum Zweck, dass man aus der Schleife kommt
					}
				}
				if($offset == 0) 
				{
					$name = "_1|".$_FILES['datei']['name'];
					$datei = $_FILES['datei']['name'];
				} else {
					$name = "_".$offset."|".$_FILES['datei']['name'];
				}
				fwrite($fp,$name);
				fclose($fp);
				$dateiname = explode(".",$_FILES['datei']['name']);
				$addedNum = getCount();
				incCount($addedNum);
				$dateiname[0] .= $addedNum.".";
				$datei = $upload_dir.$dateiname[0].$dateiname[1];
				$filename = $dateiname[0].$dateiname[1];
				echo '<span style="color:red">Dateiname bereits vorhanden!</span> Die Datei wurde unter '.$filename.' abgespeichert!';
			}
			
		} else {
			$file = "count.txt";
			$fp = fopen($file,"w");
			$name = "_1|".$_FILES['datei']['name'];
			fwrite($fp,$name);
			fclose($fp);
		}
		
		if (move_uploaded_file($_FILES['datei']['tmp_name'], $datei))
		{
			echo '<p>Upload erfolgreich</p>';
		}
	}
}

function getCount()
{
	$file = "count.txt";
	$fp = fopen($file,"r");
	$count = fread($fp,filesize($file));
	$count = explode("|",$count);
	fclose($fp);
	
	return $count[0];
}

function incCount($anz)
{
	$file = "count.txt";
	$count = substr($anz,1);
	$count++;
	$fp = fopen($file,"w");
	$name = "_".$count."|".$_FILES['datei']['name'];
	fwrite($fp,$name);
	fclose($fp);	
}
?>

Erklären will ich das jetzt aber wirklich nicht, weil sonst sitz ich noch bis morgen da :D

WICHTIG!
Du musst eine LEERE Datei anlegen, die "count.txt" heißt, und Schreibrechte besitzt!
Die Dateinamen dürfen auf keinen Fall "_" oder "." enthalten.


Das ganze wäre mit einer DB um ein Vielfaches einfacher gewesen, aber so funktionierts ja auch. Habe das Skript bei mir erfolgreich getestet.
Das Ganze kann man sicher auch eleganter lösen, aber ich will ja keinen Preis gewinnen :)

Ach ja, und für eine positive Bewertung wäre ich jetzt sehr dankbar ;)

Lg Andi
 
Erstmal möchte ich mich schonmal sehr bei dir bedanken, das ist einfach klasse das du dich dafür so einsetzt. Du bekommst auf jedenfall eine positive Bewertung von mir, nur ein aber habe ich noch;

Nun speichert er es aber immer mit einen "_" ab.
Dateiname bereits vorhanden! Die Datei wurde unter Evenzo_.gif abgespeichert!
Dies überschreibt er dann auch immer wieder.

Habe der Datei volle Rechte ( 777 ) gegeben, oder ist das entscheidend das diese nur Schreibrechte bekommt?
 
Zurück