php, img upload, checken ob datei überschreiben?

  1. mores

    mores Thread StarterMacUser Mitglied

    Mitglied seit:
    23.12.2003
    Beiträge:
    3.557
    Zustimmungen:
    106
    also ich steh hier grad voll an.

    ich bau grad ein cms, mit bilder-upload, funktioniert einwandfrei, nur würde ich gerne eine möglichkeit einbauen, beim bilder-upload den dateinamen zu überprüfen und gegebenenfalls zu ändern (datei_1.jpg, wenn datei.jpg existiert)

    hier ist mein code:
    PHP:
    if(isset($_POST['F_OK'])){
        
    $db mysql_connect("localhost""username""password");
        
    mysql_select_db("datenbankname",$db);

        
    $sql "INSERT INTO `projekte` (`id`, `projektname`, `description`, `kunde`, `auftraggeber`, `kategorie`, `pic`, `link`, `target`, `width`, `height`) 
                                    VALUES ('', '
    $projektname', '$description', '$kunde', '$auftraggeber', '$kategorie', '$pic', '$link', '$target', '$width', '$height');";
        
    mysql_query($sql);
        
        
    chdir("../img_projekte/");

        
    // das normale pic verschieben.
        
    move_uploaded_file($_FILES['pic']['tmp_name'],$_FILES['pic']['name']);
        
        echo(
    "neues projekt hinzugefügt!<br>");

    ich habe natürlich aus php.net oder so ein paar anleitungen gelesen, die bei mir aber irgendwie nicht hinhauen und genau nix tun.

    könnt ihr mir helfen?
     
    mores, 13.07.2006
  2. PowerBookGrafik

    PowerBookGrafikMacUser Mitglied

    Mitglied seit:
    12.03.2005
    Beiträge:
    812
    Zustimmungen:
    5
    Ungetestet aber sollte funken ... alle datein mit ner schleife in ein array einlesen ... array vergleichen mit dem neuen filename ... filenname unbennenn wenn gleich ...

    lG dein arbeitnehmer

    PHP:
    <?php

    if(isset($_POST['F_OK'])){ 
        
    $db mysql_connect("localhost""username""password"); 
        
    mysql_select_db("datenbankname",$db); 

        
    $sql "INSERT INTO `projekte` (`id`, `projektname`, `description`, `kunde`, `auftraggeber`, `kategorie`, `pic`, `link`, `target`, `width`, `height`)  
                                    VALUES ('', '
    $projektname', '$description', '$kunde', '$auftraggeber', '$kategorie', '$pic', '$link', '$target', '$width', '$height');"
        
    mysql_query($sql); 
         
         
        
        
        
    $vorhandenedatein = array();
        
        
    $ordner "../img_projekte/"
        
    $action=opendir($ordner); 
        
        while(
    $datei=readdir($action)){ 
            if(!
    preg_match("!(\.|\..)$!"$datei)){ 
                
    array_push($vorhandenedatein$datei);
            }
        }
            
        
        
        
         
        if(
    $_FILES['pic']['name'] == $vorhandenedatein){
        
        
        
    chdir("../img_projekte/"); 

        
    // das normale pic verschieben. 
        
    move_uploaded_file($_FILES['pic']['tmp_name'],strlen($_FILES['pic']['name']) - 4)."_2.jpg"); 
         
        echo(
    "neues projekt hinzugefügt!<br>");  
        }
        else{
          
    chdir("../img_projekte/"); 

        
    // das normale pic verschieben. 
        
    move_uploaded_file($_FILES['pic']['tmp_name'],$_FILES['pic']['name']); 
         
        echo(
    "neues projekt hinzugefügt!<br>");  
        }
      
        
        
        
    ?>
     
    PowerBookGrafik, 13.07.2006
  3. mores

    mores Thread StarterMacUser Mitglied

    Mitglied seit:
    23.12.2003
    Beiträge:
    3.557
    Zustimmungen:
    106
    werd ich gleich mal testen, vielen dank!

    mensch, ich glaub ich sollte mir die arrays mal ansehen. scheinen ganz nützlich zu sein. irgendwie check ich sie nicht.
     
    mores, 13.07.2006
  4. PowerBookGrafik

    PowerBookGrafikMacUser Mitglied

    Mitglied seit:
    12.03.2005
    Beiträge:
    812
    Zustimmungen:
    5
    wart nochmal kurz =) muss noch schnell was ändern
     
    PowerBookGrafik, 13.07.2006
  5. PowerBookGrafik

    PowerBookGrafikMacUser Mitglied

    Mitglied seit:
    12.03.2005
    Beiträge:
    812
    Zustimmungen:
    5
    PHP:
    if(isset($_POST['F_OK'])){ 
        
    $db mysql_connect("localhost""username""password"); 
        
    mysql_select_db("datenbankname",$db); 

        
    $sql "INSERT INTO `projekte` (`id`, `projektname`, `description`, `kunde`, `auftraggeber`, `kategorie`, `pic`, `link`, `target`, `width`, `height`)  
                                    VALUES ('', '
    $projektname', '$description', '$kunde', '$auftraggeber', '$kategorie', '$pic', '$link', '$target', '$width', '$height');"
        
    mysql_query($sql); 
         
         
        
        
        
    $vorhandenedatein = array();
        
        
    $ordner "../img_projekte/"
        
    $action=opendir($ordner); 
        
        while(
    $datei=readdir($action)){ 
            if(!
    preg_match("!(\.|\..)$!"$datei)){ 
                
    array_push($vorhandenedatein$datei);
            }
        }
        
        
        
        
        
        
        
    $pruefen true;
         for(
    $i=0$i<100$i++) {
              
              
                        if(
    $_FILES['pic']['name'] == $vorhandenedatein[$i] && $pruefen == true){
                                
    chdir("../img_projekte/"); 
                                
    // das normale pic verschieben. 
                                
    move_uploaded_file($_FILES['pic']['tmp_name'],strlen($_FILES['pic']['name']) - 4)."_2.jpg"); 
                                echo(
    "neues projekt hinzugefügt!<br>");
                                
    $pruefen false;  
                
                    
                
                }
                
        if(
    $pruefen == false){
                                 
    chdir("../img_projekte/"); 
                            
                                
    // das normale pic verschieben. 
                                
    move_uploaded_file($_FILES['pic']['tmp_name'],$_FILES['pic']['name']); 
                                 
                                echo(
    "neues projekt hinzugefügt!<br>");  
                        }
    jetzt sollte es gehen ... hab ich dir aber eh schon mal per email geschrieben lG
     
    PowerBookGrafik, 13.07.2006
  6. Manjo

    ManjoMacUser Mitglied

    Mitglied seit:
    25.07.2005
    Beiträge:
    903
    Zustimmungen:
    22
    Da Du den tatsächlichen Dateinamen ja in der DB ablegst, geht es auch über die DB (ist u.U. auch schneller):
    PHP:
    function DateinameBereitsVergeben($filename)
    {
        global 
    $db;
        
        if (
    $filename == '')
        {
            return 
    false;
        }
        
        
    $sql "SELECT id FROM projekte WHERE pic = '" str_replace("'""''"basename($filename)) . "' LIMIT 1";
        if (!(
    $result= @mysql_query($sql$db)))
        {
            die (
    'Lesen aus File-Tabelle');
        }

        return (
    mysql_fetch_array($result)) ? true false;
    }
    Dann das Ganze in einer Schleife aufrufen, bis man eine Kombination aus ehem. Dateiname und einer 3-stelligen Zufallszahl gefunden hat. Fertig. Den Dateinamen musst Du vorher aufspalten in name und erweiterung.

    PHP:
    do
    {
        
    $attach_filename $filename '_' substr(rand(), 03) . '.' $file_extension;
    }
    while (
    DateinameBereitsVergeben($attach_filename));

    Alles so mal eben zusammenkopiert und aus dem Kopf. Ungetestet. Bei mir schauen die DB-Anweisungen anders aus, weil ich dafür eine eigene Klasse gebastelt habe, die mir viel Arbeit abnimmt. Ich hoffe, das ist so richtig zusammengebastelt.
     
    Manjo, 13.07.2006
  7. mores

    mores Thread StarterMacUser Mitglied

    Mitglied seit:
    23.12.2003
    Beiträge:
    3.557
    Zustimmungen:
    106
    --- gelöscht, weil mittlerweile änderungen und PLAN B gepostet wurden :) ---
     
    mores, 13.07.2006
  8. PowerBookGrafik

    PowerBookGrafikMacUser Mitglied

    Mitglied seit:
    12.03.2005
    Beiträge:
    812
    Zustimmungen:
    5
    danke für den hinweis =)

    die methode mitd er datenbank geht auch aber wenne s für einen kunden ist und er vl via ftp oder sonst ein anderer was raufladet hast du schon ein problem
     
    PowerBookGrafik, 13.07.2006
  9. mores

    mores Thread StarterMacUser Mitglied

    Mitglied seit:
    23.12.2003
    Beiträge:
    3.557
    Zustimmungen:
    106
    @PBgrafik: nö, geht leider noch immer nicht.
    response nach dem eintragen ist ein lange liste von "projekt wurde hinzugefügt", aber weder in der DB noch im zielordner steht das neue bild.

    :(

    nachdem "der kunde" nicht per FTP hochladen soll ist die db-version okay, ich werd die mal durchgehen.

    danke auch für deinen tipp, manjo.
    du stellst mich zwar vor relativ grosse hürden mit deinen voraussetzungen (ich muss dateinamen aufsplitten, und in schleife laufen lassen), aber ich check das mal aus.

    PBgrafik ... ich find da keine mail mit dem code.
    hab ich möglicherweise verschlampt oder IRGENDWO archiviert. sorry.
     
    mores, 13.07.2006
  10. PowerBookGrafik

    PowerBookGrafikMacUser Mitglied

    Mitglied seit:
    12.03.2005
    Beiträge:
    812
    Zustimmungen:
    5
    thats the new one
    PHP:
            $vorhandenedatein = array(); 
         
        
    $ordner "../img_projekte/";  
        
    $action=opendir($ordner);  
         
        while(
    $datei=readdir($action)){  
            if(!
    preg_match("!(\.|\..)$!"$datei)){  
                
    array_push($vorhandenedatein$datei); 
            } 
        } 
        
    $pruefen 1
        for(
    $i=0$i<100$i++) { 
        
        
        
        
        
    //####################
            
    if($_FILES['pic']['name'] == $vorhandenedatein[$i] && $pruefen == 1){ 
                
    chdir("../img_projekte/");  
            
    // das normale pic verschieben.  
                
    $filenamelengh strlen(($_FILES['pic']['name'])) - 4;
                
    $newfilename substr($_FILES['pic']['name'], 0$filenamelengh)."_2.jpg";
                for(
    $i=0$i<200$i++) { 
                if(
    $newfilename == $vorhandenedatein[$i]){
                
    $filenamelengh strlen(($_FILES['pic']['name'])) - 4;
                
    $newfilename substr($_FILES['pic']['name'], 0$filenamelengh)."_3.jpg";
                }
                if(
    $newfilename == $vorhandenedatein[$i]){
                
    $filenamelengh strlen(($_FILES['pic']['name'])) - 4;
                
    $newfilename substr($_FILES['pic']['name'], 0$filenamelengh)."_4.jpg";
                }
        
                
                }
                
                
    move_uploaded_file($_FILES['pic']['tmp_name'],$newfilename);  
                echo(
    "neues projekt hinzugefügt und dateinamen geändert!<br>"); 
                
    $pruefen 2;   

            } 
        
    //####################

          
        
    }    if($pruefen == 1){
            
    $pruefen 3;
        }
            if(
    $pruefen == 3){ 
                 
    chdir("../img_projekte/");  
                
    // das normale pic verschieben.  
                
    move_uploaded_file($_FILES['pic']['tmp_name'],$_FILES['pic']['name']);  
                  
                echo(
    "neues projekt hinzugefügt!<br>");   
            }
    }
    habe leider keine bessere methode um das mehrmalige prüfen zu umgehen
     
    PowerBookGrafik, 13.07.2006
Die Seite wird geladen...
Ähnliche Themen - php img upload
  1. mampfi
    Antworten:
    7
    Aufrufe:
    260
  2. simusch
    Antworten:
    2
    Aufrufe:
    187
    simusch
    04.05.2017
  3. Saugkraft
    Antworten:
    27
    Aufrufe:
    1.614
  4. alex1000
    Antworten:
    5
    Aufrufe:
    358
  5. blalalama
    Antworten:
    29
    Aufrufe:
    1.453