Daten abfragen und wenn vorhanden Dateinamen ändern.

Ikkunaprincessa

Grünschnabel
Entschuldigt mich bitte für meinen blöden Titel aber mir fiel nichts besseres ein.
Mein problem is folgendes:

Ich habe ein Formular mit dem ich Daten in eine datenbank laden will aber
ich will zuerst überprüfen ob diese Datei die ich hochlade schon vorhanden
ist und wenn ja soll an dem Dateinamen Zahlen angehängt werden.

Jetzt hab ich das ganze mal versuch mit file exists aber ich kann damit ja nur
überprüfen ob irgenteine Datei am Server ist aber nicht in der Datenbank &
ich stell mir die Frage wie mache ich es mit der Datenbank?
Wie überprüfe ich die ?

Muss ich zuerst die Datenbank abfragen ?
ich bin auch Anfänger und daher bitte leichte lösungen
hier mal ein auszug aus meinem Code:

Code:
if($_POST['Send'] && $_FILES['Datei']['name'])
{
	$filename = $_FILES['Datei']['name'];
	$zaehler = 1;
	
	while (file_exists($filename))
	{
	echo "Filename existiert<br>";
	$filename = $filename."_".$zaehler;
	$zaehler = $zaehler+1;
		
	}
	echo "Der Filename ist jetzt ".$filename;
	
}
Bitte um Hilfe :(
 
Also du lädst mit deinem Formular Dateien hoch und speicherst quasi den Pfad in der DB?
Oder speichert du die gesamte Datei in der DB?

Im ersteren Fall wäre ein file_exist ausreichen, im 2. Fall müsstest du eine DB Abfrage machen.
 
Also ich kann an deiner Lösung erstmal nicht falsches erkennen.
Das einzige was ich glaube ist, dass du file_exists nur den namen lieferst und nicht den kompletten Pfad.

Ich weiß nicht genau wie sich die Funktion dann verhält - müsste man in der Doku nachlesen. Ich gehe mal davon aus, dass die Funktion dann im aktuellen Verzeichnis prüft. Wenn du die Dateien da später auch speichern willst ist dsa okay - ansonsten fehlt der Pfad zu einem Unterverzeichnis und der Dateiname wird immer der selbe bleiben.

Falls du das ganze via Dateisystem ordentlich pflegst dürfte es auch keine Probleme mit doppelten Datensätzen in der Datenbank geben.

Falls du das unbedingt prüfen willst könntest du einen SELECT mit dem aktuellen Dateinamen absetzen und überprüfen wieviele Datensätze die Abfrage zurückliefert.
Das müsste auch in der Schleife geschehen.

Sowas in die Richtung (UNGETESTET):
PHP:
function getFileNameCount($filename) {
	$result = mysql_query("SELECT filename FROM deinetabelle WHERE filename = '$filename'"); 
	return mysql_num_rows($result);
}

if($_POST['Send'] && $_FILES['Datei']['name']){
	$filename = $_FILES['Datei']['name'];
	$zaehler = 1;
	
	while (file_exists($filename) && getFileNameCount($filename)) {
		echo "Filename existiert<br>";
		$filename .= "_".$zaehler;
		$zaehler++;
	}
	
	echo "Der Filename ist jetzt ".$filename;
	
}

Alternativ könnte man natürlich noch mit count() arbeiten usw. Müsste man sich schlau lesen was schneller ist ;)

lg
 
Zuletzt bearbeitet:
Zurück