MySql if(empty($_FILES['files'])){ ...}

king-ich

Mitglied
Hallo.

Ich versuche seit vielen Tagen diesen Code:

PHP:
<?php
$titel = "";
    $art = "";
    $files = "";
    $plz = "";
    $ort = "";
    $vorname = "";
    $nachname = "";
    $gebaeude_art = "";
    $grundstueck = "";
    $zimmer = "";
    $quadrat = "";
    $miete = "";
    $preis_art = "";
    $beschreibung = "";
    $telefon = "";
    $password = "";
    $password2 = "";

if(isset($_POST['submit']) && empty($files)){
   
    $titel = $_POST['titel'];
    $art = $_POST['art'];
    $plz = $_POST['plz'];
    $ort = $_POST['ort'];
    $vorname = $_POST['vorname'];
    $nachname = $_POST['nachname'];
    $gebaeude_art = $_POST['gebaeude_art'];
    $grundstueck = $_POST['grundstueck'];
    $zimmer = $_POST['zimmer'];
    $quadrat = $_POST['quadrat'];
    $miete = $_POST['miete'];
    $preis_art = $_POST['preis_art'];
    $beschreibung = $_POST['beschreibung'];
    $telefon = $_POST['telefon'];
    $password = $_POST['password'];
    $password2 = $_POST['password2'];
   
    if($password != $password2){
       
         $fehler = "Die Passwörter stimmen nicht überein...";
       
    }

$statement = $pdo->prepare("UPDATE objekte SET titel = :titel, art = :art, plz = :plz, ort = :ort, gebaeude_art = :gebaeude_art, grundstueck = :grundstueck, zimmer = :zimmer, quadrat = :quadrat, miete = :miete, preis_art = :preis_art, beschreibung = :beschreibung WHERE id = '{$change}'");
   
$result = $statement->execute(array('titel' => $titel, 'art' => $art, 'plz' => $plz, 'ort' => $ort, 'gebaeude_art' => $gebaeude_art, 'grundstueck' => $grundstueck, 'zimmer' => $zimmer, 'quadrat' => $quadrat, 'miete' => $miete, 'preis_art' => $preis_art, 'beschreibung' => $beschreibung));

    }if(isset($_POST['submit']) && !empty($_FILES['files']))

{
   
    $titel = $_POST['titel'];
    $art = $_POST['art'];
    $files = $_FILES['files'];
    $plz = $_POST['plz'];
    $ort = $_POST['ort'];
    $vorname = $_POST['vorname'];
    $nachname = $_POST['nachname'];
    $gebaeude_art = $_POST['gebaeude_art'];
    $grundstueck = $_POST['grundstueck'];
    $zimmer = $_POST['zimmer'];
    $quadrat = $_POST['quadrat'];
    $miete = $_POST['miete'];
    $preis_art = $_POST['preis_art'];
    $beschreibung = $_POST['beschreibung'];
    $telefon = $_POST['telefon'];
    $password = $_POST['password'];
    $password2 = $_POST['password2'];
   
    if($password != $password2){
       
         $fehler = "Die Passwörter stimmen nicht überein...";
       
    }

$statement = $pdo->prepare("UPDATE objekte SET titel = :titel, art = :art, plz = :plz, ort = :ort, gebaeude_art = :gebaeude_art, grundstueck = :grundstueck, zimmer = :zimmer, quadrat = :quadrat, miete = :miete, preis_art = :preis_art, beschreibung = :beschreibung WHERE id = '{$change}'");
   
$result = $statement->execute(array('titel' => $titel, 'art' => $art, 'plz' => $plz, 'ort' => $ort, 'gebaeude_art' => $gebaeude_art, 'grundstueck' => $grundstueck, 'zimmer' => $zimmer, 'quadrat' => $quadrat, 'miete' => $miete, 'preis_art' => $preis_art, 'beschreibung' => $beschreibung));
   
    $ergebnis = "SELECT FILE_NAME FROM auktion_images WHERE ANGEBOT_ID = '{$change}'";
    $resultat = $pdo->query($ergebnis);
foreach ($resultat as $reihe): ?>
            <?php unlink('image_uploads/'.$reihe["FILE_NAME"]);
            $statement = $pdo->prepare("delete from auktion_images where ANGEBOT_ID = '{$change}'");
            $statement->execute(array());
            endforeach;
   
    $query = "INSERT into auktion_images(`ANGEBOT_ID`, `FILE_NAME`, `FILE_SIZE`,`FILE_TYPE`)
             VALUES(:ANGEBOT_ID, :FILE_NAME, :FILE_SIZE, :FILE_TYPE)";
    $stmt  = $pdo->prepare($query);
   
    foreach($_FILES['files']['tmp_name'] as $key => $error ){
        if ($error != UPLOAD_ERR_OK) {
            $errors[] = $_FILES['files']['name'][$key] . ' wurde nicht hochgeladen.';
            continue;
        }
       
        $file_name = $key.$_FILES['files']['name'][$key];
        $file_size = $_FILES['files']['size'][$key];
        $file_tmp  = $_FILES['files']['tmp_name'][$key];
        $file_type = $_FILES['files']['type'][$key];
        if($file_size > 2097152){
            $errors[] = 'Bilder müssen kleiner als 2 MB sein.';
            continue;
        }
        try{
            $stmt->bindParam( ':ANGEBOT_ID', $change, PDO::PARAM_STR );
            $stmt->bindParam( ':FILE_NAME', $file_name , PDO::PARAM_STR );
            $stmt->bindParam( ':FILE_SIZE', $file_size, PDO::PARAM_STR );
            $stmt->bindParam( ':FILE_TYPE', $file_type, PDO::PARAM_STR );
            $stmt->execute();

            $desired_dir="image_uploads";

            if(is_dir($desired_dir)==false){
                mkdir($desired_dir, 0700);// Create directory if it does not exist
            }
            if(is_file($desired_dir.'/'.$file_name)==false){
                move_uploaded_file($file_tmp,$desired_dir.'/'.$file_name);
            }else{    //rename the file if another one exist
                $new_file=$desired_dir.'/'.$file_name.time();
                move_uploaded_file($file_tmp,$new_file) ;              
            }
        }catch(PDOException $e){
            $errors[] = $file_name . 'nicht in Datenbank gespeichert.';
            echo $e->getMessage();
        }  
    }}

meinen Bedürfnissen anzupassen.

Wenn Bilder neue ausgewählt werden sollen diese in der Datenbank gespeichert werden.

Wenn KEINE neuen Bilder gewählt werden sollen die Bilder die in der Datenbank sind in der Datenbank bleiben.

Kann mir bitte jemand helfen?

(Neue Bilder in die Datenbank speichern funktioniert mit dem Code)
 
Zuletzt bearbeitet von einem Moderator:
Du solltest Kommentare in den Code schreiben.
Und genauer erklären was nicht geht: Fehlerhalten, Fehlermeldung etc.
 
PHP:
 <?php
   $titel = "";
    $art = "";
    $files = "";
    $plz = "";
    $ort = "";
    $vorname = "";
    $nachname = "";
    $gebaeude_art = "";
    $grundstueck = "";
    $zimmer = "";
    $quadrat = "";
    $miete = "";
    $preis_art = "";
    $beschreibung = "";
    $telefon = "";
    $password = "";
    $password2 = "";

if(isset($_POST['submit']) && empty($files)){ //hier sollen nur die "nicht Bilddateien" upgedated werden
  
    $titel = $_POST['titel'];
    $art = $_POST['art'];
    $plz = $_POST['plz'];
    $ort = $_POST['ort'];
    $vorname = $_POST['vorname'];
    $nachname = $_POST['nachname'];
    $gebaeude_art = $_POST['gebaeude_art'];
    $grundstueck = $_POST['grundstueck'];
    $zimmer = $_POST['zimmer'];
    $quadrat = $_POST['quadrat'];
    $miete = $_POST['miete'];
    $preis_art = $_POST['preis_art'];
    $beschreibung = $_POST['beschreibung'];
    $telefon = $_POST['telefon'];
    $password = $_POST['password'];
    $password2 = $_POST['password2'];
  
    if($password != $password2){
      
         $fehler = "Die Passwörter stimmen nicht überein...";
      
    }

$statement = $pdo->prepare("UPDATE objekte SET titel = :titel, art = :art, plz = :plz, ort = :ort, gebaeude_art = :gebaeude_art, grundstueck = :grundstueck, zimmer = :zimmer, quadrat = :quadrat, miete = :miete, preis_art = :preis_art, beschreibung = :beschreibung WHERE id = '{$change}'");
  
$result = $statement->execute(array('titel' => $titel, 'art' => $art, 'plz' => $plz, 'ort' => $ort, 'gebaeude_art' => $gebaeude_art, 'grundstueck' => $grundstueck, 'zimmer' => $zimmer, 'quadrat' => $quadrat, 'miete' => $miete, 'preis_art' => $preis_art, 'beschreibung' => $beschreibung));

    }if(isset($_POST['submit']) && !empty($_FILES['files'])){ //hier sollen alle Dateien upgedated werden
  
    $titel = $_POST['titel'];
    $art = $_POST['art'];
    $files = $_FILES['files'];
    $plz = $_POST['plz'];
    $ort = $_POST['ort'];
    $vorname = $_POST['vorname'];
    $nachname = $_POST['nachname'];
    $gebaeude_art = $_POST['gebaeude_art'];
    $grundstueck = $_POST['grundstueck'];
    $zimmer = $_POST['zimmer'];
    $quadrat = $_POST['quadrat'];
    $miete = $_POST['miete'];
    $preis_art = $_POST['preis_art'];
    $beschreibung = $_POST['beschreibung'];
    $telefon = $_POST['telefon'];
    $password = $_POST['password'];
    $password2 = $_POST['password2'];
  
    if($password != $password2){
      
         $fehler = "Die Passwörter stimmen nicht überein...";
      
    }

$statement = $pdo->prepare("UPDATE objekte SET titel = :titel, art = :art, plz = :plz, ort = :ort, gebaeude_art = :gebaeude_art, grundstueck = :grundstueck, zimmer = :zimmer, quadrat = :quadrat, miete = :miete, preis_art = :preis_art, beschreibung = :beschreibung WHERE id = '{$change}'");
  
$result = $statement->execute(array('titel' => $titel, 'art' => $art, 'plz' => $plz, 'ort' => $ort, 'gebaeude_art' => $gebaeude_art, 'grundstueck' => $grundstueck, 'zimmer' => $zimmer, 'quadrat' => $quadrat, 'miete' => $miete, 'preis_art' => $preis_art, 'beschreibung' => $beschreibung));
  
    $ergebnis = "SELECT FILE_NAME FROM auktion_images WHERE ANGEBOT_ID = '{$change}'";
    $resultat = $pdo->query($ergebnis);
foreach ($resultat as $reihe): ?>
            <?php unlink('image_uploads/'.$reihe["FILE_NAME"]);
            $statement = $pdo->prepare("delete from auktion_images where ANGEBOT_ID = '{$change}'");
            $statement->execute(array());
            endforeach;
  
    $query = "INSERT into auktion_images(`ANGEBOT_ID`, `FILE_NAME`, `FILE_SIZE`,`FILE_TYPE`)
             VALUES(:ANGEBOT_ID, :FILE_NAME, :FILE_SIZE, :FILE_TYPE)";
    $stmt  = $pdo->prepare($query);
  
    foreach($_FILES['files']['tmp_name'] as $key => $error ){
        if ($error != UPLOAD_ERR_OK) {
            $errors[] = $_FILES['files']['name'][$key] . ' wurde nicht hochgeladen.';
            continue;
        }
      
        $file_name = $key.$_FILES['files']['name'][$key];
        $file_size = $_FILES['files']['size'][$key];
        $file_tmp  = $_FILES['files']['tmp_name'][$key];
        $file_type = $_FILES['files']['type'][$key];
        if($file_size > 2097152){
            $errors[] = 'Bilder müssen kleiner als 2 MB sein.';
            continue;
        }
        try{
            $stmt->bindParam( ':ANGEBOT_ID', $change, PDO::PARAM_STR );
            $stmt->bindParam( ':FILE_NAME', $file_name , PDO::PARAM_STR );
            $stmt->bindParam( ':FILE_SIZE', $file_size, PDO::PARAM_STR );
            $stmt->bindParam( ':FILE_TYPE', $file_type, PDO::PARAM_STR );
            $stmt->execute();

            $desired_dir="image_uploads";

            if(is_dir($desired_dir)==false){
                mkdir($desired_dir, 0700);// Create directory if it does not exist
            }
            if(is_file($desired_dir.'/'.$file_name)==false){
                move_uploaded_file($file_tmp,$desired_dir.'/'.$file_name);
            }else{    //rename the file if another one exist
                $new_file=$desired_dir.'/'.$file_name.time();
                move_uploaded_file($file_tmp,$new_file) ;             
            }
        }catch(PDOException $e){
            $errors[] = $file_name . 'nicht in Datenbank gespeichert.';
            echo $e->getMessage();
        } 
    }} ?php

Fehlermeldungen werden keine erzeugt.
 
Zuletzt bearbeitet:
Fehlverhalten?
Oder soll ich mich hinsetzen und deinen ganzen Code analysieren um herauszufinden A) was er eigentlich machen soll, B) wo ein unbekannter, nicht angezeigter Fehler drin ist?
Anschliessend eine Testumgebung aufsetzen um für dich zu debuggen?

Oder du könntest deinen gezeigter Code auf das Wesentliche reduzieren, erklären was er da warum machen soll und was er eben nicht macht.

Ich mache ganz klar nur bei der Zweiten Version mit.
 
PHP:
<?php
$files = "";
//+ weitere Variablen
if(isset($_POST['submit']) && empty($files)){ //hier sollen nur die "nicht Bilddateien" upgedated werden
// Wenn ich keine Bilder auswähle verschwinden die Bilddateien aus der Datenbank,
//obwohl an dieser Stelle die zuvor gespeicherten Bilder  behalten werden sollen.
}if(isset($_POST['submit']) && !empty($_FILES['files'])){ //hier sollen alle Dateien upgedated werden.
//Wenn ich Bilder auswähle werden diese auch im Ordner und in der Datenbank gespeichert.
//So wie es soll.
$files = $_FILES['files'];
...
$query = "INSERT into auktion_images(`ANGEBOT_ID`, `FILE_NAME`, `FILE_SIZE`,`FILE_TYPE`)
             VALUES(:ANGEBOT_ID, :FILE_NAME, :FILE_SIZE, :FILE_TYPE)";
    $stmt  = $pdo->prepare($query);
...
 
ist es Absicht das $files einmal klein und einmal groß geschrieben ist? ok, habs gesehn

was wird in der ersten if-abfrage ausgeführt?
 
Prüfst du extra auf empty($files) und nicht auf empty($_FILES['files'])?
$files ist da immer empty, da du es ja als Leerstring definiert hast
 
auch wenn ich

PHP:
<?php

if(isset($_POST['submit']) && empty($_FILES['files'])){

schreibe, verschwinden die Bildinformationen aus der Datenbank und im Ordner trotzdem :(
 
Zurück