php, img upload, checken ob datei überschreiben?

Diskutiere mit über: php, img upload, checken ob datei überschreiben? im Web-Programmierung Forum

  1. mores

    mores Thread Starter MacUser Mitglied

    Beiträge:
    3.575
    Zustimmungen:
    106
    Registriert seit:
    23.12.2003
    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?
     
  2. PowerBookGrafik

    PowerBookGrafik MacUser Mitglied

    Beiträge:
    812
    Zustimmungen:
    5
    Registriert seit:
    12.03.2005
    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>");  
        }
      
        
        
        
    ?>
     
  3. mores

    mores Thread Starter MacUser Mitglied

    Beiträge:
    3.575
    Zustimmungen:
    106
    Registriert seit:
    23.12.2003
    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.
     
  4. PowerBookGrafik

    PowerBookGrafik MacUser Mitglied

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

    PowerBookGrafik MacUser Mitglied

    Beiträge:
    812
    Zustimmungen:
    5
    Registriert seit:
    12.03.2005
    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
     
  6. Manjo

    Manjo MacUser Mitglied

    Beiträge:
    903
    Zustimmungen:
    22
    Registriert seit:
    25.07.2005
    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.
     
  7. mores

    mores Thread Starter MacUser Mitglied

    Beiträge:
    3.575
    Zustimmungen:
    106
    Registriert seit:
    23.12.2003
    --- gelöscht, weil mittlerweile änderungen und PLAN B gepostet wurden :) ---
     
    Zuletzt bearbeitet: 13.07.2006
  8. PowerBookGrafik

    PowerBookGrafik MacUser Mitglied

    Beiträge:
    812
    Zustimmungen:
    5
    Registriert seit:
    12.03.2005
    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
     
  9. mores

    mores Thread Starter MacUser Mitglied

    Beiträge:
    3.575
    Zustimmungen:
    106
    Registriert seit:
    23.12.2003
    @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.
     
    Zuletzt bearbeitet: 13.07.2006
  10. PowerBookGrafik

    PowerBookGrafik MacUser Mitglied

    Beiträge:
    812
    Zustimmungen:
    5
    Registriert seit:
    12.03.2005
    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
     
Die Seite wird geladen...
Ähnliche Themen - php img upload Forum Datum
Werte der gleichen Schlüssel summieren (assoziativen Array) Web-Programmierung 25.08.2016
einfaches php. emailformular bei strato Web-Programmierung 08.08.2015
PHP Array in Google Maps Wegpunkte umwandeln Web-Programmierung 13.03.2015
PHP Update auf 5.6 im Terminal für Localhost (MAMP und Laravel) Web-Programmierung 12.09.2014
PHP-Aufrufe in img-Tags -> kein Bild Web-Programmierung 21.05.2005

Diese Seite empfehlen

Benutzerdefinierte Suche