2017-05-18 3 views
0

ich ein Problem ^^
Meine PHP-Funktion will nicht in meine MySQL-Tabelle speichern,
aber es speichert sie in meinem ausgewählten Ordner. (Verbindung funktioniert (getestet), Sachen in einer anderen Tabelle einfügen auch aus dieser Position arbeitet.)
Ich denke, es hat etwas mit dem Fremdschlüssel zu tun, denn wenn ich als Beispiel ausführen diesen BefehlMySQL/PHP (Fremdschlüssel Fehler?)

INSERT INTO TBilder (BildPfad, BildFreigabe, UserId)VALUES ('asd', 0, 10005); 

es funktioniert. Es macht alles wie vorgesehen.

<div class="image_upload_div"> 
<form action= "#" class="dropzone"></form> 
</div> 

<?php 
        if (!empty($_FILES)) { 
         if (!is_dir($dir . "users") && !is_writable($dir. "users")) { 
          mkdir($dir . "users"); 
         } 
         $temp = $_FILES['file']['tmp_name']; 
         $users = $dir . "users" . $ds; 
         $destination = $users . $_SESSION['userid'] . $ds; 
         $target = $destination . $_FILES['file']['name']; 
         if (!is_dir($destination) && !is_writable($destination)) { 
          mkdir($destination); 
         } 

         move_uploaded_file($temp, $target); 

         $stmt = $pdo->prepare("INSERT INTO TBilder (BildPfad, BildFreigabe, UserId) VALUES (:pfad, :freigabe, :user)"); 
         $stmt->bindparam(":pfad", $target); 
         $stmt->bindparam(":freigabe", 0); 
         $stmt->bindparam(":user", $id); 
         $stmt->execute(); 

        } 

Und meine ganze Datenbank: (siehe getInputParameterDataType() in meinem Code)

DROP DATABASE SonderDB; 
CREATE DATABASE SonderDB; 
use SonderDb; 

DROP TABLE IF EXISTS TUsers; 

CREATE TABLE IF NOT EXISTS TUsers (
    UserId INT AUTO_INCREMENT, 
    UserName VARCHAR(255) NOT NULL, 
    UserPassword VARCHAR(255) NOT NULL, 
    PRIMARY KEY (UserId)) 
    AUTO_INCREMENT = 10000, 
    ENGINE = InnoDB; 



DROP TABLE IF EXISTS TBilder ; 

CREATE TABLE IF NOT EXISTS TBilder (
    BildId INT AUTO_INCREMENT, 
    BildPfad VARCHAR(255) NOT NULL, 
    BildFreigabe INT, 
    UserId INT, 
    PRIMARY KEY (BildId), 
    FOREIGN KEY (UserId) REFERENCES TUsers(UserId) ON UPDATE CASCADE) 
    AUTO_INCREMENT = 10000 
ENGINE = InnoDB; 

Antwort

0
  • Weil BildFreigabe und UserId als INT definiert werden, sollten sie als solche hergestellt werden. Ich glaube 80%, dass dies dein Problem war.
  • Ich würde auch ein Auge auf BildPfad, weil es als NOT NULL definiert ist.
  • Wenn ich kann, würde ich die Verwendung der Ausnahmebehandlung empfehlen, besonders bei db-Operationen.

Ich schrieb mehr Code, um Ihnen eine globale Sicht zu geben, wenn Sie es wünschen. Viel Glück.


<?php 

try { 
    $pdo = getConnection(); 

    $sql = 'INSERT INTO TBilder (BildPfad, BildFreigabe, UserId) VALUES (:pfad, :freigabe, :user)'; 
    $stmt = $pdo->prepare($sql); 

    if (!$stmt) { 
     throw new Exception('The SQL statement can not be prepared!'); 
    } 

    // Bind parameters by checking their datta type too! 
    $stmt->bindparam(":pfad", $target, getInputParameterDataType($target)); 
    $stmt->bindparam(":freigabe", $freigabe, getInputParameterDataType(0)); 
    $stmt->bindparam(":user", $user, getInputParameterDataType($user)); 

    //******************************************************************** 
    // Try with bindValue(), if it's not working with bindParam(). 
    // It should. I normally work with bindValue(). 
    //******************************************************************** 
    // $stmt->bindValue(':pfad', $target, getInputParameterDataType($target)); 
    // $stmt->bindValue(':freigabe', $freigabe, getInputParameterDataType(0)); 
    // $stmt->bindValue(':user', $user, getInputParameterDataType($user)); 
    //******************************************************************** 

    if (!$stmt->execute()) { 
     throw new Exception('The PDO statement can not be executed!'); 
    } 

    $inserted = $stmt->rowCount() > 0 ? TRUE : FALSE; 

    echo $inserted ? 'Inserted successfully' : 'Not inserted!'; 
} catch (PDOException $pdoException) { 
    echo '<pre>' . print_r($pdoException, true) . '</pre>'; 
    exit(); 
} catch (Exception $exception) { 
    echo '<pre>' . print_r($exception, true) . '</pre>'; 
    exit(); 
} 

function getConnection() { 
    $conn = new PDO('mysql:host=localhost;port=36;dbname=[...]', '[...]', '[...]'); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    $conn->setAttribute(PDO::ATTR_PERSISTENT, true); 
    return $conn; 
} 

function getInputParameterDataType($value) { 
    $dataType = PDO::PARAM_STR; 
    if (is_int($value)) { 
     $dataType = PDO::PARAM_INT; 
    } elseif (is_bool($value)) { 
     $dataType = PDO::PARAM_BOOL; 
    } 
    return $dataType; 
} 
Verwandte Themen