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:

Yaslaw

n/a
Moderator
Du solltest Kommentare in den Code schreiben.
Und genauer erklären was nicht geht: Fehlerhalten, Fehlermeldung etc.
 

king-ich

Mitglied
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:

Yaslaw

n/a
Moderator
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.
 

king-ich

Mitglied
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);
...
 

cliodriver

Mitglied
ist es Absicht das $files einmal klein und einmal groß geschrieben ist? ok, habs gesehn

was wird in der ersten if-abfrage ausgeführt?
 

Yaslaw

n/a
Moderator
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
 

king-ich

Mitglied
auch wenn ich

PHP:
<?php

if(isset($_POST['submit']) && empty($_FILES['files'])){
schreibe, verschwinden die Bildinformationen aus der Datenbank und im Ordner trotzdem :(
 

cliodriver

Mitglied
ah ... jetzt seh ichs. etwas unübersichtlich die ganzen if{}

nur damit ichs verstehe. warum werden alle Variablen mit $titel = $_POST['titel']; übergeben und die $files = $_FILES['files']; ?
 

cliodriver

Mitglied
naja ... ist ja nicht ersichtlich wie, was und von wo es übergeben wird

edit: ich steh heut etwas neben mir wies scheint! habs gefunden, am ende
 
Zuletzt bearbeitet:

Yaslaw

n/a
Moderator
PHP:
foreach($_FILES['files']['tmp_name'] as $key => $error ){
Scheint mir komisch zu sein. Gemäss PHP-Doku sollten $_FILES['files']['tmp_name'] ein Array sein und $_FILES['userfile'] ebenfalls
Ich würde mal $_FILES mit var_dump() ausgeben.

PHP:
    foreach($_FILES['files']['tmp_name'] as $key => $error ){
        if ($error != UPLOAD_ERR_OK) {

//sollte eher so aussehen
    foreach($_FILES['files']['tmp_name'] as $key => $file_tmp ){
        if($_FILES['files']['error'][$key] != UPLOAD_ERR_OK){
 

king-ich

Mitglied
Wenn ich keine Bilder auswähle erzeugt var_dump() folgendes:

Code:
array(5) { ["name"]=> array(1) { [0]=> string(0) "" } ["type"]=> array(1) { [0]=> string(0) "" }
 ["tmp_name"]=> array(1) { [0]=> string(0) "" } ["error"]=> array(1) { [0]=> int(4) } 
["size"]=> array(1) { [0]=> int(0) } }
 

Yaslaw

n/a
Moderator
Code:
array(5) {
    ["name"]=> array(1) {
        [0]=> string(0) ""
    }
    ["type"]=> array(1) {
         [0]=> string(0) ""
    }
     ["tmp_name"]=> array(1) {
         [0]=> string(0) ""
     }
     ["error"]=> array(1) {
          [0]=> int(4)
     }
     ["size"]=> array(1) {
         [0]=> int(0)
     }
}
Ja, empty ist das nicht.
Also prüf doch auf
empty($_FILES['files']['tmp_name'][0])

Nachtrag:
Der Error ist 4. Das ist UPLOAD_ERR_NO_FILE. Darauf kann man auch prüfen
$_FILES['files']['ERROR'][0] == UPLOAD_ERR_NO_FILE
 

ComFreek

Mod | @comfreek
Moderator
Übrigens gibt es auch für PHP Debugger mit Breakpoints, sprich man muss nicht tausend Mal durch den Code gehen und mit prints sich ansehen, was passiert!