2015-03-24 4 views
0

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

Я хочу, чтобы иметь возможность загружать изображения в сообщение, а затем загружать сообщение с изображениями. Вот моя попытка:

Таблица изображений базы данныхПолучение идентификатора результата поиска

+-------------------------------------------------+ 
    | image_id | user_id | image_name | post_id | 
    | 1  | 1 | bla  |  2  | 
+-------------------------------------------------+ 

Вид

<script> 
$(function() { 
    $("#imageUpload").submit(function (e) { 
     e.preventDefault(); 
     var formData = new FormData($('#imageUpload')[0]); 
      $.ajax({ 
       url: 'post/create', //Trying to call the controller 
       type: 'post', 
       data: formData, 
       cache: false, 
       contentType: false, 
       processData: false 
      }); 
      return false; 
     }); 
    }); 
</script> 

<form action="<?php echo Config::get('URL');?>post/create" method="post" id="imageUpload" enctype="multipart/form-data"> 
    <input type="text" name="post_text" placeholder="Post something" /> 
    <input type="file" name="images[]" multiple required /> 
    <input type="submit" value='post' autocomplete="off" /> 
</form> 

Контроллер

public function create() 
{ 
    PostModel::createPost(strip_tags($_POST['post_text'])); 
    PostModel::uploadPostImages($_POST['post_id']); 
} 

Я оставляю модель, так как функции там работают нормально.

Как я могу получить идентификатор сообщения, чтобы использовать его в таблице изображений перед публикацией сообщения?

Я был бы благодарен за любую помощь!

UPDATE

<script> 
    $("#imageUpload").submit(function (e) { 
      var fd = new FormData(); 
      var imagefile= document.getElementById('imagefile'); 
      var files = imagefile.files; 

      for (var i = 0; i < files.length; i++) 
      { 
       var file = files[i];     
       fd.append('imagefile[]', file, file.name); 
      } 
      fd.append("post_text", document.getElementById('post_text').value); 
      fd.append("post_id", document.getElementById('post_id').value);  

     $.ajax({ 
      url: 'post/create', 
      type: 'POST', 
      data: fd, 
      cache: false, 
      contentType: false, 
      processData: false 
     }); 
     return false; 
    }); 
}); 
</script> 
<form action="<?php echo Config::get('URL');?>post/create" method="post" id="imageUpload" enctype="multipart/form-data"> 
    <input type="text" name="post_text" id="post_text" placeholder="Post something" /> 
    <input type="file" name="images[]" id="imagefile" multiple required /> 
    <input type="hidden" name="post_id" id="post_id" value="post_id" /> 
    <input type="submit" value='post' autocomplete="off" /> 
</form> 
+0

Вы можете получить идентификатор с поста после его сохранения, например, через '$ mysqli-> insert_id' (в зависимости от того, что вы используете). Это может быть возвращаемое значение вашей функции 'createPost'. Так что информация о вашей модели была бы хорошей ... – empiric

+0

Спасибо! Это то, что я делаю в данный момент. Но я пытаюсь найти способ загрузить изображение в сообщение до того, как сообщение будет загружено. – Schwesi

+1

, если ваше сообщение авто увеличивается, то вы можете попробовать http://stackoverflow.com/questions/6761403/how-to-get-the-next-auto-increment-id-in-mysql –

ответ

1

Вы не можете напрямую загрузить изображение с помощью JQuery AJAX. Кроме того, вы разрешаете загружать несколько файлов через ajax. Вот ваш код. Это позволит вам загружать несколько изображений с введенным текстовым значением.

$("#imageUpload").submit(function (e) { 
      var fd = new FormData(); 
      var imagefile= document.getElementById('imagefile'); 
      var files = imagefile.files; 

      for (var i = 0; i < files.length; i++) 
      { 
       var file = files[i];     
       fd.append('imagefile[]', file, file.name); 
      } 
      fd.append("post_text", document.getElementById('post_text').value); 
      fd.append("post_id", document.getElementById('post_id').value);  

     $.ajax({ 
      url: 'post/create', //Trying to call the controller 
      type: 'POST', 
      data: fd, 
      cache: false, 
      contentType: false, 
      processData: false 
     }); 
     return false; 
    }); 
}); 

Ваш обновленный HTML

<form action="<?php echo Config::get('URL');?>post/create" method="post" id="imageUpload" enctype="multipart/form-data"> 
<input type="text" name="post_text" id="post_text" placeholder="Post something" /> 
<input type="file" name="images[]" id="imagefile" multiple required /> 
<input type="hidden" name="post_id" id="post_id" value="<?=$_GET['post_id']?>" /> 
<input type="submit" value='post' autocomplete="off" /> 

+0

Большое вам спасибо за ваш ответ! Что теперь работает, когда я могу загрузить изображение и сообщение с одной формой. Однако post_id в таблице изображений по-прежнему NULL. – Schwesi

+0

просто добавьте сообщение id в скрытый элемент. il обновить код –

+0

Он по-прежнему не работает. Но, спасибо вам, так или иначе! Теперь я знаю, к какому направлению нужно научиться! – Schwesi

Смежные вопросы