2016-05-16 11 views
-2

Ich bin unglaublich neu in PHP und MySql, versuche aber für ein Projekt zu lernen. Ich habe dieses Tutorial http://www.formget.com/ajax-image-upload-php/ folgen, um Bilder als Spalten in einer Blob-Tabelle in einer MySQL-Datenbank mit Zeilen wie Bildgröße, ID usw. hochladen können.Bild in Zeile innerhalb der Spalte in der MySQL-Tabelle anstatt als einzelne Spalte einfügen?

Ich habe eine separate Datentabelle, wo ich Spalten für einzelne Benutzer erstellen Konten (jedes Konto hat eine Zeile für Benutzername, Passwort, usw.). Ich habe eine Zeile in diesen Spalten erstellt, um einen Blob zu speichern.

Ich brauche nicht alle Zeilen, die das Tutorial für ihre Bilder erstellt hat (image_type, size, etc), sondern brauche nur die Bildquelle (die Bildzeile). Ich muss dieses Bild in das ROW für Bilder in meiner Kontospalte einfügen (abhängig davon, welches Konto angemeldet ist), NOT müssen neue Spalten für jedes Bild erstellt werden. Ich weiß nicht, wie ich das mit meinem Code machen soll. Hier ist mein JavaScript für meine HTML-Formulare:

$(document).ready(function (e) { 
    //To transfer clicks to divs 
    $(".upload-button").on('click', function() { 
     $("#file").click(); 
    }); 
    $(".save").on('click', function() { 
     $(".submit").click(); 
    }); 


     $("#uploadimage").on('submit',(function(e) { 
     e.preventDefault(); 


     $.ajax({ 
     url: "upload.php", // Url to which the request is send 
     type: "POST",    // Type of request to be send, called as method 
     data: new FormData(this), // Data sent to server, a set of key/value pairs (i.e. form fields and values) 
     contentType: false,  // The content type used when sending data to the server. 
     cache: false,    // To unable request pages to be cached 
     processData:false,  // To send DOMDocument or non processed data file it is set to false 
     success: function(data) // A function to be called if request succeeds 
     { 

     } 
     }); 
     })); 

     // Function to preview image after validation 
     $(function() { 
     $("#file").change(function() { 
     // To remove the previous error message 
     var file = this.files[0]; 
     var imagefile = file.type; 
     var match= ["image/jpeg","image/png","image/jpg"]; 
     if(!((imagefile==match[0]) || (imagefile==match[1]) || (imagefile==match[2]))) 
     { 
     $('.userimg').attr('src','noimage.png'); 

     return false; 
     } 
     else 
     { 
     var reader = new FileReader(); 
     reader.onload = imageIsLoaded; 
     reader.readAsDataURL(this.files[0]); 
     } 
     }); 
     }); 
     function imageIsLoaded(e) { 
     $("#file").css("color","green"); 
     $('#image_preview').css("display", "block"); 
     $('.userimg').attr('src', e.target.result); 
     $('.userimg').attr('width', '250px'); 
     $('.userimg').attr('height', '230px'); 
     }; 
}); 

die dann Referenzen upload.php, die ist, wo Änderungen vorgenommen werden müssen:

<?php 

if(isset($_FILES["file"]["type"])) 
{ 
$validextensions = array("jpeg", "jpg", "png"); 
$maxsize = 99999999; 
$temporary = explode(".", $_FILES["file"]["name"]); 
$file_extension = end($temporary); 
if ((($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/jpeg") 
) && ($_FILES["file"]["size"] < $maxsize)//Approx. 100kb files can be uploaded. 
&& in_array($file_extension, $validextensions)) { 
if ($_FILES["file"]["error"] > 0) 
{ 
echo "Return Code: " . $_FILES["file"]["error"] . "<br/><br/>"; 
} 
else 
{ 
if (file_exists("images/" . $_FILES["file"]["name"])) { 
echo $_FILES["file"]["name"] . " <span id='invalid'><b>already exists.</b></span> "; 
} 
else 
{ 
$sourcePath = $_FILES['file']['tmp_name']; // Storing source path of the file in a variable 
$targetPath = "images/".$_FILES['file']['name']; // Target path where file is to be stored 

$size = getimagesize($_FILES['file']['tmp_name']); 
/*** assign our variables ***/ 
$type = $size['mime']; 
$imgfp = fopen($_FILES['file']['tmp_name'], 'rb'); 
$size = $size[3]; 
$name = $_FILES['file']['name']; 



/*** check the file is less than the maximum file size ***/ 
if($_FILES['file']['size'] < $maxsize) 
{ 
/*** connect to db ***/ 
$dbh = new PDO("mysql:host=localhost;dbname=sqlserver", 'username', 'password'); 

/*** set the error mode ***/ 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

/*** our sql query ***/ 
$stmt = $dbh->prepare("INSERT INTO imageblob (image_type ,image, image_size, image_name) VALUES (? ,?, ?, ?)"); 

/*** bind the params ***/ 
$stmt->bindParam(1, $type); 
$stmt->bindParam(2, $imgfp, PDO::PARAM_LOB); 
$stmt->bindParam(3, $size); 
$stmt->bindParam(4, $name); 

/*** execute the query ***/ 
$stmt->execute(); 
$lastid = $dbh->lastInsertId(); 
//Move uploaded File 
move_uploaded_file($sourcePath,$targetPath) ; // Moving Uploaded file 
if(isset($lastid)) 
{ 
/*** assign the image id ***/ 
$image_id = $lastid; 
    try { 
    /*** connect to the database ***/ 
    /*** set the PDO error mode to exception ***/ 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    /*** The sql statement ***/ 
    $sql = "SELECT image, image_type FROM imageblob WHERE image_id=$image_id"; 

    /*** prepare the sql ***/ 
    $stmt = $dbh->prepare($sql); 

    /*** exceute the query ***/ 
    $stmt->execute(); 

    /*** set the fetch mode to associative array ***/ 
    $stmt->setFetchMode(PDO::FETCH_ASSOC); 

    /*** set the header for the image ***/ 
    $array = $stmt->fetch(); 
    /*** check we have a single image and type ***/ 
    if(sizeof($array) == 2) 
    { 
     //To Display Image File from Database 
     echo '<img src="data:image/jpeg;base64,'.base64_encode($array['image']).'"/>'; 

    } 
    else 
    { 
    throw new Exception("Out of bounds Error"); 
    } 
    } 
    catch(PDOException $e) 
    { 
    echo $e->getMessage(); 
    } 
    catch(Exception $e) 
    { 
    echo $e->getMessage(); 
    } 
    } 
    else 
    { 
    echo 'Please input correct Image ID'; 
    } 
} 
else 
{ 
/*** throw an exception is image is not of type ***/ 
throw new Exception("File Size Error"); 
} 
} 
} 
} 
else 
{ 
echo "<span id='invalid'>***Invalid file Size or Type***<span>"; 
} 
} 

?> 

ich versucht habe versucht, Hinweise auf die Bildgröße zu schneiden, Geben Sie usw. ein, da ich der Meinung bin, dass diese nicht notwendig sind, dies jedoch zu Fehlern führte. Ich habe andere SO-Posts übergossen, kann aber nicht verstehen, wie man einfach ein Bild in eine Spalte innerhalb einer bestehenden Spalte in der mysql-Datenbank einfügt. Ich kann nur neue Spalten für Bilder erstellen.

Wie kann ich das erreichen?

+0

'mysql' und' sql-server' sind nicht dasselbe. Sie verwenden 'mysql' (' neues PDO ("mysql: ..'). Nur weil Sie Ihre Datenbank 'sqlserver' nennen, macht es keinen' sql-server'. – Sean

+1

Wenn Sie das Bild zu einem bestehenden hinzufügen möchten Zeile, müssen Sie Ihre 'INSERT INTO ...' Abfrage in eine 'UPDATE ...' Abfrage ändern.In dieser 'UPDATE' Abfrage müssen Sie einen' WHERE columnName = Wert' verwenden. Der 'columnName = Wert' ist Hier geben Sie Ihren angemeldeten Benutzer an – Sean

+1

Das obige Tutorial zeigt Ihnen deutlich, wie Sie ein Bild als Blob in eine Tabelle einfügen.Sie müssen es nun in eine andere Tabelle einfügen.Alles, was Sie tun müssen, ist anzuwenden, was Sie haben Wenn Sie nicht verstehen, was es tut, dann gehen Sie zurück zum Tutorial und lesen Sie es noch einmal oder stellen Sie eine spezielle Frage, die sich auf das bezieht, was Sie nicht verstehen, aber bitte fragen Sie uns nicht, ein Tutorial neu zu schreiben Code für Ihre Bedürfnisse. – Shadow

Antwort

0

Im Allgemeinen ist das Speichern von Dateien in einer Datenbank not normalerweise recommended aus verschiedenen Gründen. Es gibt zwar einige Ausnahmen von dieser Regel, aber Sie sollten sicher sein, dass dies die beste Lösung für Sie ist.

Stattdessen fragen Sie zuerst, warum Sie dies tun möchten und warum das Speichern von Dateien auf der Festplatte und das Verfolgen des Dateinamens in Ihrer Datenbank nicht die bevorzugte Lösung ist. Sobald Sie Ihren Anwendungsfall rechtfertigen können, (wenn können Sie Ihren Anwendungsfall rechtfertigen), dann sollten Sie fragen, wie Sie es implementieren.