Как Param связать изображение с помощью PHP? - PullRequest
0 голосов
/ 09 июля 2019

Редактировать: Мой Ajax для отправки данных изображения это

  var Image = $('#PostSection').find('input[name="Image2"]').val();

    var fd = new FormData();
    var files = $('#Image2')[0].files[0];
    console.log(files);
    fd.append('Image',files);
    fd.append('username',username);
    fd.append('posts',posts);
    fd.append('backText3',backText3);
    fd.append('poll',poll);
    fd.append('option1',option1);
    fd.append('option2',option2);
    fd.append('option3',option3);
    fd.append('option4',option4);
    $.ajax({
        url: '../Admin/Posts/Post.php',
        type: 'post',
        data: fd,
        contentType: false,
        processData: false,
        success:  function() {
     $('#AllPosts').prepend($('<div>').load(location.href + " 
#AllPosts>*"));
  $('#PostSection')[0].reset();
     var x = document.getElementById("snackbar2");
  x.className = "snackbar show";
  setTimeout(function(){ x.className = x.className.replace("show", ""); }, 
3000);

Имейте в виду, я показываю только переменные для изображения, поскольку это относится к моему вопросу. Мне не нужно сообщать о коде для имени пользователя, сообщений, опросов и т. Д. Это не имеет отношения к моему вопросу.

Мое изображение получается так

  $tmpName  = $_FILES['Image']['tmp_name'];
  $fp = fopen($tmpName, 'r');
  $Image = fread($fp, filesize($tmpName));
  $Image = addslashes($Image);
  fclose($fp); 

и мой код вставки такой

$stmt = $conn3->prepare("INSERT INTO `$Username` (Username,RepostedBy,RepostedId,Texts,Img,backText,Dates,TimeUploaded,EditedVersion,Likes,Repost,Tags,Poll)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)");

$stmt->bind_param("ssssbssssssss",$Username,$RepostedBy,$RepostedId,$Texts,$Image,$BackText,$Date,$Time,$EditedVersion,$Likes,$Shares,$Tags,$Poll);

По какой-то причине это не работает. Моя колонка для моих изображений - longblob. Все остальное вставлено, но изображение почему-то вставлено неправильно. Файл вставляется, но это не изображение. Пожалуйста, обратите внимание , прежде чем комментировать, как я уже говорил, все вставлено как следует, за исключением того, что изображение вставлено неправильно. Мне не нужны никакие ответы, спрашивающие меня о моем соединении с моей базой данных или о том, что любая из моих переменных равна нулю. Спасибо!

Вставляемые файлы являются изображениями, и в моей базе данных для некоторых из них указано 129 Кбайт, когда изображение не должно быть настолько большим в хранилище. Я попробовал непрофессиональный способ сделать это

$sql = "INSERT INTO `$Username` (Username,RepostedBy,RepostedId,Texts,Img,backText,Dates,TimeUploaded,EditedVersion,Likes,Repost,Tags,Poll) 
VALUES ('$Username','$RepostedBy','$RepostedId','$Texts','$Image','$BackText','$Date','$Time','$EditedVersion','$Likes','$Shares','$Tags','$Poll');";

и это работает, но это не готовое утверждение, поэтому оно не является идеальным или профессиональным, потому что я не хочу делать инъекции SQL.

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

НЕ рекомендуется хранить изображения в базе данных, медленный поиск, медленное все.

Что люди делают, так это сохраняют изображение в CDN, AWS S3 или любом другом поставщике, которого вы предпочитаете, а затем в базе данных вы сохраняете URL.

На самом деле не рекомендуется делать то, что вы пытаетесь сделать.

0 голосов
/ 09 июля 2019

Убедитесь, что содержимое полностью прочитано.fread размер буфера должен быть точным, чтобы полные данные изображения были действительными.Попробуйте с file_get_contents один раз.

$Image = addslashes(file_get_contents($_FILES['Image']['tmp_name']));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...