Upload & edit image di ci

Saya mendapat referensi dari https://www.petanikode.com/codeigniter-upload/ dan telah berhasil melakukan proses upload image. Sekarang saya terkendala di proses update(). saya menggunakan array (berbeda dengan referensi yang saya cantumkan)

dari referensi mengatakan perlu menambah yang dibawah ini didalam upload()

if (!empty($_FILES["image"]["name"])) {
    $this->image = $this->_uploadImage();
} else {
    $this->image = $post["old_image"];
}

karena saya menggunaka array saya ubah menjadi seperti dibawah ini

function UpdateMobil(){

        $dFormDist = array(
                   'nmr_polisi'   => $this->input->post('nmr_polisi',true),
                   'merk'         => $this->input->post('merk',true),
                   'tipe'         => $this->input->post('tipe',true),
                   'warna'        => $this->input->post('warna',true),
                   'seat'         => $this->input->post('seat',true),


                   if (!empty($_FILES["foto_mobil"])) {
                        'foto_mobil' = $this->_uploadImage()
                        } else {
                                'foto_mobil' = $post["old_image"];
                                    }

                   'bbm'          => $this->input->post('bbm',true),
                   'kps_bbm'      => $this->input->post('kps_bbm',true),
                   'knsum_bbm'    => $this->input->post('knsum_bbm',true),
                   'kps_mesin'    => $this->input->post('kps_mesin',true),
                   'tahun_klr'    => $this->input->post('tahun_klr',true),
                   'tgl_pajak'    => date("Y-m-d H:i", strtotime($this->input->post('tgl_pajak',true))),
                   'asuransi'     => $this->input->post('asuransi',true),
                   'tgl_asuransi' => date("Y-m-d H:i", strtotime($this->input->post('tgl_asuransi',true)))


        );
        $table  = 'ms_mobil';
        $field  = 'id';
        $Msg = $this->mAjax->update_($table,$dFormDist,$field,$this->input->post('ID',true));
        //$Msg = $this->mAjax->update_($table,$dFormDist);

        header('Content-Type: application/json');
        echo json_encode($Msg);

    }

lalu dari referensi juga menggunakan field input berbeda dengan saya, berikut yang dari referensi

<div class="form-group">
								<label for="name">Photo</label>
								<input class="form-control-file <?php echo form_error('image') ? 'is-invalid':'' ?>"
								 type="file" name="image" />
								<input type="hidden" name="old_image" value="<?php echo $product->image ?>" />
								<div class="invalid-feedback">
									<?php echo form_error('image') ?>
								</div>
							</div>

lalu saya sesuaikan dengan yang saya punya

<div class="form-group">
          <label for="exampleInputFile" class="col-sm-2 control-label">Upload Gambar</label>
          <input type="file" id="exampleInputFile" name="foto_mobil" class="col-sm-10">

          <input type="hidden" name="old_image" value="<?php echo $uploads->foto_mobil ?>" />
            <div class="invalid-feedback">
                <?php echo form_error('foto_mobil') ?>
            </div>

    </div>

lalu saya binggung dengan berikut, <input type="hidden" name="old_image" value="<?php echo $product->image ?>" /> $produk nya dapat darimana? dan image nya dapat darimana?"

sekarang permasalahan inti saya. jika saya mengunakan

if (!empty($_FILES["foto_mobil"])) {
                        'foto_mobil' = $this->_uploadImage()
                        } else {
                                'foto_mobil' = $post["old_image"];
                                    }

tombol form pada sistem tidak akan bekerja (tidak menampilkan form) lalu jika saya mengkomen nya, form akan menampilkan kesalahan berikut A PHP Error was encountered Severity: Notice

Message: Undefined variable: uploads

Filename: Parameter/fk_mobil.php

Line Number: 134

Backtrace:

File: C:\xampp\htdocs\sewa_mobil\application\views\Konten\Parameter\fk_mobil.php Line: 134 Function: _error_handler

File: C:\xampp\htdocs\sewa_mobil\application\controllers\Parameter.php Line: 288 Function: view

File: C:\xampp\htdocs\sewa_mobil\index.php Line: 315 Function: require_once

A PHP Error was encountered Severity: Notice

Message: Trying to get property of non-object

Filename: Parameter/fk_mobil.php

Line Number: 134

Backtrace:

File: C:\xampp\htdocs\sewa_mobil\application\views\Konten\Parameter\fk_mobil.php Line: 134 Function: _error_handler

File: C:\xampp\htdocs\sewa_mobil\application\controllers\Parameter.php Line: 288 Function: view

File: C:\xampp\htdocs\sewa_mobil\index.php Line: 315 Function: require_once

" />

Saya juga menggunakan javascript yang hanya untuk alur/mempercantik tampilan saja (tidak terlalu berpengaruh untuk proses ini (karena saat saya menyelesaikan upload nya tidak ada javascript yang saya ubah)

Mohon bantuannya dari para master. saya perlu ilmunya untuk Tugas Akhir kuliah saya. Terimakasih banyak sebelumnya

sebagai tambahan berikut adalah upload yang saya punya dan berhasil saya contoh dari referensi

function SimpanMobil(){

            $dFormDist = array(
                       'nmr_polisi'   => $this->input->post('nmr_polisi',true),
                       'merk'         => $this->input->post('merk',true),
                       'tipe'         => $this->input->post('tipe',true),
                       'warna'        => $this->input->post('warna',true),
                       'seat'         => $this->input->post('seat',true),

                       'bbm'          => $this->input->post('bbm',true),
                       'kps_bbm'      => $this->input->post('kps_bbm',true),
                       'knsum_bbm'    => $this->input->post('knsum_bbm',true),
                       'kps_mesin'    => $this->input->post('kps_mesin',true),
                       'tahun_klr'    => $this->input->post('tahun_klr',true),
                       'tgl_pajak'    => date("Y-m-d H:i", strtotime($this->input->post('tgl_pajak',true))),
                       'asuransi'     => $this->input->post('asuransi',true),
                       'tgl_asuransi' => date("Y-m-d H:i", strtotime($this->input->post('tgl_asuransi',true))),
                       'foto_mobil'   => $this->_uploadImage()
            );
            $table  = 'ms_mobil';
            $field  = 'id';

            $Msg = $this->mAjax->insert_($table,$dFormDist);

        header('Content-Type: application/json');
        echo json_encode($Msg);

    }

avatar barkah03
@barkah03

33 Kontribusi 9 Poin

Diperbarui 2 tahun yang lalu

4 Jawaban:

Jawaban Terpilih

Kalo dilihat dari <a href='https://github.com/petanikode/tutorial-codeigniter/blob/tutorial-6/application/views/admin/product/list.php'>reponya</a>, $product itu data looping dari $products, dan $products itu data yang dikirim dari controller.

mungkin harus disesuaikan saat looping datanya ke table, variable yang mas gunain.

dan untuk kode ini:

<pre> if (!empty($_FILES["foto_mobil"])) { 'foto_mobil' = $this-&gt;_uploadImage() } else { 'foto_mobil' = $post["old_image"]; } </pre>

sebaiknya ditaro diatas $table = 'ms_mobil', hasilnya seperti ini:

<pre> function UpdateMobil(){

    $dFormDist = array(
               &#039;nmr_polisi&#039;   =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;nmr_polisi&#039;,true),
               &#039;merk&#039;         =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;merk&#039;,true),
               &#039;tipe&#039;         =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;tipe&#039;,true),
               &#039;warna&#039;        =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;warna&#039;,true),
               &#039;seat&#039;         =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;seat&#039;,true),
               &#039;foto_mobil&#039;   =&amp;gt; NULL,
               &#039;bbm&#039;          =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;bbm&#039;,true),
               &#039;kps_bbm&#039;      =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;kps_bbm&#039;,true),
               &#039;knsum_bbm&#039;    =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;knsum_bbm&#039;,true),
               &#039;kps_mesin&#039;    =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;kps_mesin&#039;,true),
               &#039;tahun_klr&#039;    =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;tahun_klr&#039;,true),
               &#039;tgl_pajak&#039;    =&amp;gt; date(&quot;Y-m-d H:i&quot;, strtotime($this-&amp;gt;input-&amp;gt;post(&#039;tgl_pajak&#039;,true))),
               &#039;asuransi&#039;     =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;asuransi&#039;,true),
               &#039;tgl_asuransi&#039; =&amp;gt; date(&quot;Y-m-d H:i&quot;, strtotime($this-&amp;gt;input-&amp;gt;post(&#039;tgl_asuransi&#039;,true)))
            

    );

    $foto_mobil = NULL;

    if (!empty($_FILES[&quot;foto_mobil&quot;])) {
      $foto_mobil = $this-&amp;gt;_uploadImage();
    } else {
      $foto_mobil = $this-&amp;gt;input-&amp;gt;post(&#039;old_image&#039;);
    }

    $dFormDist[&#039;foto_mobil&#039;] = $foto_mobil;

    $table  = &#039;ms_mobil&#039;;
    $field  = &#039;id&#039;;
    $Msg = $this-&amp;gt;mAjax-&amp;gt;update_($table,$dFormDist,$field,$this-&amp;gt;input-&amp;gt;post(&#039;ID&#039;,true));       
    //$Msg = $this-&amp;gt;mAjax-&amp;gt;update_($table,$dFormDist);

    header(&#039;Content-Type: application/json&#039;);
    echo json_encode($Msg);

}

</pre>

avatar CodenameJR
@CodenameJR

278 Kontribusi 107 Poin

Dipost 4 tahun yang lalu

dari referensi web yang saya dapat diatas menyuruh untuk menambah coding berikut (yang old_image) pada form edit nya:

<pre> &lt;div class="form-group"&gt; &lt;label for="exampleInputFile" class="col-sm-2 control-label"&gt;Upload Gambar&lt;/label&gt; &lt;input type="file" id="exampleInputFile" name="foto_mobil" class="col-sm-10" &gt; &lt;input type="hidden" id="old_image" name="old_image" value="&lt;?php echo $foto_mobil ?&gt;" /&gt; &lt;div class="invalid-feedback"&gt; &lt;?php echo form_error('foto_mobil') ?&gt; &lt;/div&gt; &lt;/div&gt; </pre>

sementara pada controller untuk mengeditnya sudah mas kasih tau seperti yang diatas, saya sudah gunakan dan sudah berhasil

<pre> function UpdateMobil(){

    $dFormDist = array(
               &#039;nmr_polisi&#039;   =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;nmr_polisi&#039;,true),
               &#039;merk&#039;         =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;merk&#039;,true),
               &#039;tipe&#039;         =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;tipe&#039;,true),
               &#039;warna&#039;        =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;warna&#039;,true),
               &#039;seat&#039;         =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;seat&#039;,true),
               &#039;bbm&#039;          =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;bbm&#039;,true),
               &#039;kps_bbm&#039;      =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;kps_bbm&#039;,true),
               &#039;knsum_bbm&#039;    =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;knsum_bbm&#039;,true),
               &#039;kps_mesin&#039;    =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;kps_mesin&#039;,true),
               &#039;tahun_klr&#039;    =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;tahun_klr&#039;,true),
               &#039;tgl_pajak&#039;    =&amp;gt; date(&quot;Y-m-d H:i&quot;, strtotime($this-&amp;gt;input-&amp;gt;post(&#039;tgl_pajak&#039;,true))),
               &#039;asuransi&#039;     =&amp;gt; $this-&amp;gt;input-&amp;gt;post(&#039;asuransi&#039;,true),
               &#039;tgl_asuransi&#039; =&amp;gt; date(&quot;Y-m-d H:i&quot;, strtotime($this-&amp;gt;input-&amp;gt;post(&#039;tgl_asuransi&#039;,true))),
               &#039;foto_mobil&#039;   =&amp;gt; NULL
               //&#039;foto_mobil&#039;   =&amp;gt; $this-&amp;gt;_uploadImage()

    );

     $foto_mobil = NULL;

    if (empty($_FILES[&quot;foto_mobil&quot;])) {
      $foto_mobil = $this-&amp;gt;input-&amp;gt;post(&#039;old_image&#039;,true);
    } else {
      $foto_mobil = $this-&amp;gt;_uploadImage();
    }

    $dFormDist[&#039;foto_mobil&#039;] = $foto_mobil;

    $table  = &#039;ms_mobil&#039;;
    $field  = &#039;id&#039;;
    $Msg = $this-&amp;gt;mAjax-&amp;gt;update_($table,$dFormDist,$field,$this-&amp;gt;input-&amp;gt;post(&#039;ID&#039;,true));       
    //$Msg = $this-&amp;gt;mAjax-&amp;gt;update_($table,$dFormDist);

    header(&#039;Content-Type: application/json&#039;);
    echo json_encode($Msg);

}

</pre>

dari coding yang mas kasih tau sudah berhasil menginput data dari form edit kedalam database. sekarang yang jadi permasalahan apabila melakukan proses edit (menggunakan form edit) untuk ke 2 kalinya, maka foto akan terhapus? jadi dari old_image yang bertype hidden dari form editnya sudah bisa mengambil nilai (berdasarkan inspect di chrome), tetapi tidak bisa memasukkan nilai tersebut kedalam database. Berikut proses codingan input data ke database di form edit nya mas

<pre> &lt;form id="Form-Input" class="form-horizontal" method="post" autocomplete="off"&gt; &lt;div class="box-body" id="Area2Print"&gt; &lt;?php
$idpk = (isset($dForm['id'])&&!empty($dForm['id'])?$dForm['id']:"");

        $nmr_polisi   = (isset($dForm[&#039;nmr_polisi&#039;])&amp;&amp;!empty($dForm[&#039;nmr_polisi&#039;])?$dForm[&#039;nmr_polisi&#039;]:&quot;&quot;);
        $merk         = (isset($dForm[&#039;merk&#039;])&amp;&amp;!empty($dForm[&#039;merk&#039;])?$dForm[&#039;merk&#039;]:&quot;&quot;);
        $tipe         = (isset($dForm[&#039;tipe&#039;])&amp;&amp;!empty($dForm[&#039;tipe&#039;])?$dForm[&#039;tipe&#039;]:&quot;&quot;);
        $warna        = (isset($dForm[&#039;warna&#039;])&amp;&amp;!empty($dForm[&#039;warna&#039;])?$dForm[&#039;warna&#039;]:&quot;&quot;);
        $seat         = (isset($dForm[&#039;seat&#039;])&amp;&amp;!empty($dForm[&#039;seat&#039;])?$dForm[&#039;seat&#039;]:&quot;&quot;);
        
        $bbm          = (isset($dForm[&#039;bbm&#039;])&amp;&amp;!empty($dForm[&#039;bbm&#039;])?$dForm[&#039;bbm&#039;]:&quot;&quot;);
        $kps_bbm      = (isset($dForm[&#039;kps_bbm&#039;])&amp;&amp;!empty($dForm[&#039;kps_bbm&#039;])?$dForm[&#039;kps_bbm&#039;]:&quot;&quot;);
        $knsum_bbm    = (isset($dForm[&#039;knsum_bbm&#039;])&amp;&amp;!empty($dForm[&#039;knsum_bbm&#039;])?$dForm[&#039;knsum_bbm&#039;]:&quot;&quot;);
        $kps_mesin    = (isset($dForm[&#039;kps_mesin&#039;])&amp;&amp;!empty($dForm[&#039;kps_mesin&#039;])?$dForm[&#039;kps_mesin&#039;]:&quot;&quot;);
        $tahun_klr    = (isset($dForm[&#039;tahun_klr&#039;])&amp;&amp;!empty($dForm[&#039;tahun_klr&#039;])?$dForm[&#039;tahun_klr&#039;]:&quot;&quot;);
        $tgl_pajak    = (isset($dForm[&#039;tgl_pajak&#039;])&amp;&amp;!empty($dForm[&#039;tgl_pajak&#039;])?$dForm[&#039;tgl_pajak&#039;]:date(&#039;d-m-Y&#039;));
        $asuransi     = (isset($dForm[&#039;asuransi&#039;])&amp;&amp;!empty($dForm[&#039;asuransi&#039;])?$dForm[&#039;asuransi&#039;]:&quot;&quot;);
        $tgl_asuransi = (isset($dForm[&#039;tgl_asuransi&#039;])&amp;&amp;!empty($dForm[&#039;tgl_asuransi&#039;])?$dForm[&#039;tgl_asuransi&#039;]:date(&#039;d-m-Y&#039;));
        $foto_mobil = (isset($dForm[&#039;foto_mobil&#039;])&amp;&amp;!empty($dForm[&#039;foto_mobil&#039;])?$dForm[&#039;foto_mobil&#039;]:&quot;&quot;);
        $old_image = (isset($dForm[&#039;foto_mobil&#039;])&amp;&amp;!empty($dForm[&#039;foto_mobil&#039;])?$dForm[&#039;foto_mobil&#039;]:&quot;&quot;);
        
        
        $Tabel   = (isset($dTabel)&amp;&amp;!empty($dTabel)?$dTabel:&quot;&quot;);

        $readonly      = ($idpk==&quot;&quot;)?&quot;&quot;:&quot;readonly&quot;;


        if ( isset($dForm[&#039;id&#039;]) &amp;&amp; !empty($dForm[&#039;id&#039;] )){
            $selectvalue =$bbm;
            $selectview = $bbm;
        }else{
             $selectvalue =&#039;&#039;;
            $selectview =&#039;Silahkan Pilih&#039;;
        }

   //print_r($dForm);
  ?&amp;gt;

</pre>

untuk $old_image = (isset($dForm['foto_mobil'])&&!empty($dForm['foto_mobil'])?$dForm['foto_mobil']:""); adalah yang saya tambah tetapi masih tidak berhasil memasukkan data kedalam database, kira-kira gimana ya mas?

didalam database nama kolom yang menampung image adalah "foto_mobil". dan kolom old_image tidak ada didalam database, sehingga bagaimanakah logika untuk memasukkan nilai dari old_image kedalam kolom foto_mobil yang ada didalam database nya mas?

avatar barkah03
@barkah03

33 Kontribusi 9 Poin

Dipost 4 tahun yang lalu

alhamdulillah, saya sudah mendapatkan jawaban nya mas

<pre> function _uploadImage() { $config['upload_path'] = './uploads/'; $config['allowed_types'] = 'gif|jpg|png'; //$config['remove_space'] = TRUE; $config['max_size'] = '1024'; $config['max_width'] = '6000'; $config['max_height'] = '6000'; $config['overwrite'] = true;

$this-&amp;gt;load-&amp;gt;library(&#039;upload&#039;, $config);

if ($this-&amp;gt;upload-&amp;gt;do_upload(&#039;foto_mobil&#039;)) {
    return $this-&amp;gt;upload-&amp;gt;data(&quot;file_name&quot;);
}

return $this-&gt;input-&gt;post('old_image',true); } </pre>

saya ubah kondisi return yang terakhirnya ke old_image :D

avatar barkah03
@barkah03

33 Kontribusi 9 Poin

Dipost 4 tahun yang lalu

sekarang yang saya bingung adalah masalah function delete nya mas, kira-kira klo dimasukin kedalam coding yang saya punya bagaimana ya? berikut coding dari web referensi nya:

<pre> private function _deleteImage($id) { $product = $this-&gt;getById($id); if ($product-&gt;image != "default.jpg") { $filename = explode(".", $product-&gt;image)[0]; return array_map('unlink', glob(FCPATH."upload/product/$filename.*")); } } </pre>

saya tidak menggunakan $filename $product-&gt;image berubah menjadi 'foto_mobil'

dan berikut adalah function delete di coding saya:

<pre> function Delete(){ $ID = $this-&gt;input-&gt;post('ID'); $prefix = $this-&gt;input-&gt;post('prefix');

    switch ($prefix) {
        case &#039;dosen&#039;:
             $table = &#039;ms_dosen&#039;;
             $field = &#039;id&#039;;
             break;

        case &#039;supir&#039;:
             $table = &#039;ms_supir&#039;;
             $field = &#039;id&#039;;
             break;
        case &#039;security&#039;:
             $table = &#039;ms_security&#039;;
             $field = &#039;id&#039;;
             break;
        case &#039;pudir&#039;:
             $table = &#039;ms_pudir&#039;;
             $field = &#039;id&#039;;
             break;
        case &#039;mobil&#039;:
             $table = &#039;ms_mobil&#039;;
             $field = &#039;id&#039;;
             break;
        case &#039;wilayah&#039;:
             $table = &#039;ms_wilayah&#039;;
             $field = &#039;id&#039;;
             break;
    }
    
    $Msg        = $this-&amp;gt;mAjax-&amp;gt;delete_($table,$field,$ID); 
    header(&#039;Content-Type: application/json&#039;);
    echo json_encode($Msg);
}

</pre>

dari coding saya diatas yang mau diolah untuk dihapus adalah coding berikut mas

<pre> case 'mobil': $table = 'ms_mobil'; $field = 'id'; break; </pre>

avatar barkah03
@barkah03

33 Kontribusi 9 Poin

Dipost 4 tahun yang lalu

Login untuk ikut Jawaban