Ikkunaprincessa: Überprüfung einer Datei ob schon vorhanden in Mysql Datenbank

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.

Könnt ihr mir bitte helfen?!

Hier mal mein 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 im Vorraus :)

  1. Könnt ihr mir bitte helfen?!

    nein, denn das ist sogut wie unmöglich

    du kannst höchstens nach dem upload prüfen, ob die datei schon existiert

    sinnigerweise macht man das mit einer streuwertfunktion (wie etwa md5), denn der dateiname allein ist das wohl schlechteste indiz um festzustellen, ob eine datei schon existiert oder nicht

    oder willst du etwa garnicht prüfen, ob die datei schon existiert sondern nur ob der name bereits vergeben ist?

    deine tabelle scheint mir übrigens etwas sinnlos zu sein, wenn sie nur über 2 felder verfügt - das upload-datum lässt sich über das create-date ermitteln und der dateiname ist dir sowieso bekannt

    wennn du dateien schon in einer tabelle referenzieren willst, gib ihnen eine id, speichere den pfad, den originaldateinamen, den namen unter dem sie abgelegt wurde[1],  herkunft/quelle/lizenz[2] und eine prüfsumme

    [1] verwende dafür ggf die id und verzichte auf dieses feld
    [2] solltest du nicht exif oder ähnliches nutzen

    1. oder willst du etwa garnicht prüfen, ob die datei schon existiert sondern nur ob der name bereits vergeben ist?

      Ja ich denke das wollte ich damit ausdrücken.
      Diese Tabelle ist nur für Übungszwecke gedacht da ich ein Anfänger in php und mysql bin.

      Kann man es vlt mit der function file_exists überprüfen ?
      Nur wie schreibe ich dann zu dem datei namen die nummern dazu ?

      lg

      1. Kann man es vlt mit der function file_exists überprüfen ?

        ja, aber das liefert dir nur, ob im dateisystem eine datei mit diesem namen existiert - die tabelle musst du schon brav mit sql afragen

        Nur wie schreibe ich dann zu dem datei namen die nummern dazu ?

        mit stringmanipulation - trenne den dateinamen am letzten punkt (da steht üblicherweise die dateiendung), füge den string wieder zusammen "zeug-vor-dem-punkt + _01 + . + nach-dem-punkt"

        natürlich musst du auch prüfen ob 01 schon vergeben ist und ggf 01 nehmen, oder 03 usw

        die frage ist halt, was du damit bezwecken willst ;) - in vielen fällen ist eben eine id als dateinamenersatz viel praktischer - zb wenns um avatare in foren oder blogs geht, interessiert sich keiner dafür ob die ursprungsgrafik img.png oder new.jpg geheissen hat - das kann ruhig eine willkürliche id sein die nur noch intern in einer datenbank auf den originaldateinamen hinweist

        1. Nur wie schreibe ich dann zu dem datei namen die nummern dazu ?
          mit stringmanipulation - trenne den dateinamen am letzten punkt (da steht üblicherweise die dateiendung), füge den string wieder zusammen "zeug-vor-dem-punkt + _01 + . + nach-dem-punkt"

          Tut mir leid das ich 3 mal nachfrage aber ich kapiers sonst einfach nicht ;)
          also dh. ich muss die Datenbank abfragen mit

            
          $query = "SELECT * FROM bilder WHERE id = ".$id."";  
          $result = mysql_query($query) or die(mysql_error());  
          $row = mysql_fetch_array($result) or die(mysql_error());  
          echo "<img src='files/".$row["name"]."'/><br />";  
          
          

          (ich hab es mit einem input feld gemacht, da ich später eine bestimmte datei auswählen und anzeigen will) und jetzt soll ich zum datei namen das wär in dem fall ja .$row["name"]. ein +_01 + dazufügen ?!

          Danke für die Hilfe!

          1. (ich hab es mit einem input feld gemacht, da ich später eine bestimmte datei auswählen und anzeigen will) und jetzt soll ich zum datei namen das wär in dem fall ja .$row["name"]. ein +_01 + dazufügen ?!

            nein, das musst du schon vorher machen - bevor du die datei speicherst und din der datenbank hinterlegst - du willst ja foo.png und foo_01.png haben und nicht 2x foo.png die sich gegenseitig überschreiben

            1. nein, das musst du schon vorher machen - bevor du die datei speicherst und din der datenbank hinterlegst - du willst ja foo.png und foo_01.png haben und nicht 2x foo.png die sich gegenseitig überschreiben

              achso ok so in der art ?

                
              $abfrage_neu = "SELECT * FROM bilder";  
              $abfragen_neu = mysql_query($abfrage_neu);  
              $row_neu = mysql_fetch_array($result);  
              if ($row_neu["name"] == true)  
              {  
               echo "<img src='files/".$row["name"]. + _01 +"'/><br />";  
              }  
                
              
              

              und dann würde der code kommen den ich hier schon gepostet habe.

              1. und dann würde der code kommen den ich hier schon gepostet habe.

                ja so ähnlich

                am besten probierst dus nochmal aus ;) ich meine dennoch, dass du dir leichter tust, wenn du den tatsachlichen dateinamen in der datenbank speicherst

                1. am besten probierst dus nochmal aus ;) ich meine dennoch, dass du dir leichter tust, wenn du den tatsachlichen dateinamen in der datenbank speicherst

                  Ok Danke für die Hilfe hat mir schon sehr weitergeholfen ;)

        2. Guten Tag,

          mit stringmanipulation - trenne den dateinamen am letzten punkt (da steht
          üblicherweise die dateiendung), füge den string wieder zusammen "zeug-
          vor-dem-punkt + _01 + . + nach-dem-punkt"

          Siehe dazu auch pathinfo() (Link explizit auf die Englische Version des Manuals, da die Deutsche Version grob veraltert ist)

          Gruß
          Christoph Jeschke

          --

          Zend Certified Engineer
          Certified Urchin Admin