• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Upload zdjęć z ajaxem i wyslanie formularza Codeigniter

+1 głos
82 wizyt
pytanie zadane 7 czerwca 2020 w PHP przez gambi Początkujący (350 p.)

Tworzę formularz dodawania ogłoszenia, gdzie wpisuje sie kilka inputów tekstowych, a pod nimi miejsce z dodawaniem zdjęć i o ile było to zwykłe dodawanie zdjęć bez przeładowywania strony - działało, po prostu wybierałem zdjęcia i jednym przyciskiem submit wysyłało mi caly formularz, wgrywało zdjęcia na serwer i dodawalem nazwy zdjęć do bazy. Ale chciałbym aby ten formularz był bardziej użyteczny i żeby był podgląd tych zdjęć przed wysłaniem calego formularza, więc dodalem skrypt ajaxowy. I problem jest taki że w momencie wybrania zdjęć i ich wgrania na serwer nie wiem jak przekazac je do formularza głownego.

Próbowalem dodać na końcu funkcji upload $this->create($photos) i odebrać je w funkcji create. I je przekazuje, ale od razu po przeładowaniu pierwszym strony przez ajaxa gdy je wgrywa. W momencie gdy następnie wypełnię  pola tekstowe formularza i nacisnę wyslij formularz to wtedy $photos jest NULL i nie wiem jak przekazac i  zapisac te dane w bazie? Jak zrobić żeby to działalo?

Funkcja create

public function create()
	{

		if ( !empty( $_POST ) )
		{

			if ( $this->form_validation->run( 'site_ads_create' ) == true )
			{
				$activate_code = random_string();

				if ( logged_in() == true ) 
				{
				$data = array(
					'title' => $this->input->post( 'title' , true ),
					'description' => $this->input->post( 'description' , true ),
					'category_id' => $this->input->post( 'subcat' , true ),
					'city_id' => $this->input->post( 'city_id' , true ),
					'price' => $this->input->post( 'price' , true ),
					'contact' => $this->input->post( 'contact' , true ),
					'email' => $this->session->userdata( 'email' ),
					'phone' => $this->input->post( 'phone' , true ),
					'user_ip' => getUserIpAddr(),
					'created' => time(),
					'active' => 1,


					
				);

				}
				else
				{
				$data = array(
					'title' => $this->input->post( 'title' , true ),
					'description' => $this->input->post( 'description' , true ),
					'category_id' => $this->input->post( 'subcat' , true ),
					'city_id' => $this->input->post( 'city_id' , true ),
					'price' => $this->input->post( 'price' , true ),
					'contact' => $this->input->post( 'contact' , true ),
					'email' => $this->input->post( 'email' , true ),
					'phone' => $this->input->post( 'phone' , true ),
					'user_ip' => getUserIpAddr(),
					'created' => time(),
					'active' => 0,
					'activate_code' => $activate_code,
					

				);	
	
				}

				$add = $this->Site_model->create( 'ads' , $data );

				$this->session->set_flashdata( 'alert' , 'Ogłoszenie zostało dodane.' );
				//redirect( '/dodaj-ogloszenie' );



			}
			else
			{
				$this->session->set_flashdata( 'alert' , validation_errors() );
				//refresh();
			}
		}

		$data['cities'] = $this->Site_model->get_cities('cities', 'name', 'asc');
		$data['categories'] = $this->Site_model->get_categories();
		$this->load->view( 'create' , $data );
		
	}

funkcja upload

public function upload()
	{

if($_FILES["files"]["name"] != '')
  {
   $output = '';

   		$path = BASEPATH . '../images/'. date('y').'_'.date('m').'/';
  		
  		if ( !file_exists( $path ) )
				{
					mkdir( $path , 0777 );
				}

   $config['upload_path'] = 'images/'. date('y').'_'.date('m').'/'; 
   $config["allowed_types"] = 'gif|jpg|png';
   $this->load->library('upload', $config);
   $this->upload->initialize($config);
   for($count = 0; $count<count($_FILES["files"]["name"]); $count++)
   {
    $_FILES["file"]["name"] = $_FILES["files"]["name"][$count];
    $_FILES["file"]["type"] = $_FILES["files"]["type"][$count];
    $_FILES["file"]["tmp_name"] = $_FILES["files"]["tmp_name"][$count];
    $_FILES["file"]["error"] = $_FILES["files"]["error"][$count];
    $_FILES["file"]["size"] = $_FILES["files"]["size"][$count];
    if($this->upload->do_upload('file'))
    {
     $data = $this->upload->data();
     $output .= '
     <div class="col-md-3">
      <img src="'.base_url().'images/'. date('y').'_'.date('m').'/'.$data["file_name"].'" class="img-responsive img-thumbnail" />
     </div>
     ';
     $photos[] = $this->upload->data();
    }
   }
   echo $output;   
  }
}

i formularz ze skryptem ajax

<form method='post' action='<?php echo base_url();?>ads/create' enctype='multipart/form-data'>

</ tu caly formularz z inputami ktorego nie wklejam i dalej na koncu formularza skrypt ajax do wgrywania zdjec>

<div class="container">
 <br /><br /><br />
 <h3 align="center">Upload Multiple Files in Codeigniter using Ajax JQuery</h3><br />
 
 <div class="col-md-6" align="right">
  <label>Select Multiple Files</label>
 </div>
 <div class="col-md-6">
  <input type="file" name="files" id="files" multiple />
 </div>
 <div style="clear:both"></div>
 <br />
 <br />
 <div id="uploaded_images"></div>
</div>

<script>
$(document).ready(function(){
 $('#files').change(function(){
  var files = $('#files')[0].files;
  var error = '';
  var form_data = new FormData();
  for(var count = 0; count<files.length; count++)
  {
   var name = files[count].name;
   var extension = name.split('.').pop().toLowerCase();
   if(jQuery.inArray(extension, ['gif','png','jpg','jpeg']) == -1)
   {
    error += "Invalid " + count + " Image File"
   }
   else
   {
    form_data.append("files[]", files[count]);
   }
  }
  if(error == '')
  {
   $.ajax({
    url:"<?php echo base_url(); ?>ads/upload", 
    method:"POST",
    data:form_data,
    contentType:false,
    cache:false,
    processData:false,
    beforeSend:function()
    {
     $('#uploaded_images').html("<label class='text-success'>Uploading...</label>");
    },
    success:function(data)
    {
     $('#uploaded_images').html(data);
     $('#files').val('');
    }
   })
  }
  else
  {
   alert(error);
  }
 });
});
</script>

  <?php echo form_close(); ?>

 

1 odpowiedź

0 głosów
odpowiedź 8 czerwca 2020 przez VBService VIP (137,950 p.)
wybrane 8 czerwca 2020 przez gambi
 
Najlepsza
Może w trakcie wczytywania obrazka zapamiętaj jego nazwę (lub ścieżkę do obrazka na serwerze) w zmiennej sesyjnej
np.: $_SESSION['ads_pic_1'] = $data["file_name"]; itp.
a po przesłaniu formularza odczytaj z tej zmiennej i zapisz do bazy.
1
komentarz 8 czerwca 2020 przez gambi Początkujący (350 p.)
Geez dzieki czlowiek szuka tak daleko a to jest tak blisko:)

Podobne pytania

0 głosów
1 odpowiedź 131 wizyt
pytanie zadane 14 maja 2020 w Python przez bbbbbbbb Użytkownik (950 p.)
0 głosów
0 odpowiedzi 159 wizyt
pytanie zadane 16 września 2018 w PHP przez Zbigniew Andrysiak Bywalec (2,440 p.)
0 głosów
1 odpowiedź 164 wizyt

85,875 zapytań

134,647 odpowiedzi

298,917 komentarzy

56,743 pasjonatów

Advent of Code 2021

Top 15 użytkowników

  1. 1048p. - rucin93
  2. 1042p. - Whistleroosh
  3. 982p. - Mateusz Bogdan
  4. 926p. - Mikbac
  5. 912p. - nidomika
  6. 876p. - adrian17
  7. 867p. - Michal Drewniak
  8. 859p. - CC PL
  9. 854p. - Argeento
  10. 704p. - ScriptyChris
  11. 692p. - s. Dorota Kowalewska
  12. 683p. - tokox
  13. 660p. - Vinox
  14. 645p. - TheLukaszNs
  15. 628p. - WhiskeyTaster
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...