Überprüfung einer Datei ob diese schon inder der Datenbank vorhanden ist ..

Ikkunaprincessa

Grünschnabel
Was ich will ist meine Datei vor dem upload zu überprüfen ob diese bereits in der Datenbank vorhanden ist und sollte dies der fall sein soll mir Php automatisch zum dateinamen _01, _02, _03 usw dazuhängen.

Weiters würde ich gerne überprüfen lassen ob es sich um eine Bild datei handelt die ich rauflade und wenn nicht sollte er mir ausgeben echo " Bitte nur Bilddateien"

Könnt ihr mir bitte helfen?!
Hier mal mein Php Code:

Code:
if($_POST['Send'] && $_FILES['Datei']['tmp_name'])
{
 echo "Ihre Datei ("",$_FILES['Datei']['name'],"") ist",
 $_FILES['Datei']['size']," Bytes gross und hat den ",
 $_FILES['Datei']['type']," Datentyp. <br><br>";

 $eintrag = "INSERT INTO bilder (name, datum) VALUES ('$daten', '".time()."')";
 $eintragen = mysql_query($eintrag);
 move_uploaded_file($_FILES['Datei']['tmp_name'], "files/" .$_FILES['Datei']['name'] );

}

Bitte um schnelle Hilfe :) Danke
 
Vorher musst du einfach ersteinmal überprüfen ob so eine Datei vorhanden ist. Im Moment speicherst du sie nur, nicht mehr..

Ordner auslesen -> vergleichen mit der Hochgeladenen Datei (dateiname), wenn irgentwann gleich ist _XX anhängen und abspeichern

Testen ob es ein Bild ist, kannst du über den Typus machen, einfach mit der selben Variable mit der du auch schon den Typ ausgibst....
 
dh. ich soll die datenbank abfragen ?
Code:
$abfrage_neu = "SELECT * FROM bilder";
$abfragen_neu = mysql_query($abfrage_neu);
$row_neu = mysql_fetch_array($result);

so etwa .. und dann vergleichen ? wie macht man das ?
und wo kann ich dann die _01, _02 usw. dazuhängen ?
 
Wenn du mich fragst wie man einen Vergleich macht, dann, behaupte ich jetzt einfach mal, ist es für dich noch zu früh, soetwas heikles wie einen Dateiupload zu Programmieren.


vergleichen wohl am besten mit if().

die _XX werden dort angehängt, wo du die Datei unter ihrem Namen abspeicherst, einfach an den namen ."_XX"; anhängen
 
Wenn du mich fragst wie man einen Vergleich macht, dann, behaupte ich jetzt einfach mal, ist es für dich noch zu früh, soetwas heikles wie einen Dateiupload zu Programmieren.
vergleichen wohl am besten mit if().

die _XX werden dort angehängt, wo du die Datei unter ihrem Namen abspeicherst, einfach an den namen ."_XX"; anhängen

ja ne is klar, das man vergleiche mit if macht mir gehts EINFACH darum das mir hier irgentjemand endlich mal sagen kann WO genau ich bei meinem Code die _XX dran hänge.

Ja, da wo ich meinen Namen aspeichere das ist ja in dem fall $_FILES['Datei']['name'] oder ?
 
Hi,

wie wäre es so:
PHP:
$tmp_name = $_FILES['Datei']['name'];
$i = 1;
while( true ){
   $qry = mysql_query("SELECT * FROM Bilder WHERE name = '".$tmp_name."'");
   if( mysql_numrows($qry) == 1 ){ // gibt es schon
      $tmp_name = $_FILES['Datei']['name'].'__'.$i;
   }
   else{ // gibt es noch nicht
      $dateiname = $tmp_name;
      break;
   }
   $i++;
}
//In die Datenbank eintragen ($dateiname)
//Datei auf dem Server speichern
 
Der Code gehört in hierzwischen:
PHP:
if( isset($_POST['Send']) && isset($_FILES['Datei']['tmp_name']) ){ // isset() ist eine besser Variante um zu überprüfen ob die Buttons gedrückt wurden
//der code
//In die Datenbank eintragen ($dateiname)
//Datei auf dem Server speichern

So sollte es funktionieren.
 
Hi,

wie wäre es so:
PHP:
$tmp_name = $_FILES['Datei']['name'];
$i = 1;
while( true ){
   $qry = mysql_query("SELECT * FROM Bilder WHERE name = '".$tmp_name."'");
   if( mysql_numrows($qry) == 1 ){ // gibt es schon
      $tmp_name = $_FILES['Datei']['name'].'__'.$i;
   }
   else{ // gibt es noch nicht
      $dateiname = $tmp_name;
      break;
   }
   $i++;
}
//In die Datenbank eintragen ($dateiname)
//Datei auf dem Server speichern

Puh, das aber crazy, ist es nicht performanter, einfach ne zufalls zahl zu generieren und zu schauen ob die datei (inkl. zufallszahl), schon vorhanden ist, als evtl. unmengen von querys abzufeuern?

Ich mach sowas in der Regel so:

PHP:
class Lib {

	protected static $ac_file_name = null;

	static public function setFileName($original_name, $path) {
		srand ( microtime () * 1000000 );
		$zufall = rand ( 45, 100 );
		/**
		 * @todo unschön, fixen
		 */
		self::$ac_file_name = $zufall . '_' . $original_name;
		$save_path = $path . self::$ac_file_name;
		if (file_exists ( $save_path )) {
			self::setFileName ( $original_name, $path );
		}
		return $save_path;
	}
}
 
Zurück