0

i have written code in controller to move the uploaded file to folder ,but it was not working ,my code is

 $this->layout = "ajax";
    if($this->request->data){
    $postArr = $this->request->data;
    $a = $postArr['image'];
        $ext = substr(strtolower(strrchr($a, '.')), 1); //get the extension
                    $arr_ext = array('jpg', 'jpeg', 'gif'); //set allowed extensions
                   if(in_array($ext, $arr_ext))
                    {
                        //do the actual uploading of the file. First arg is the tmp name, second arg is
                        //where we are putting it
                      if(move_uploaded_file($a, WWW_ROOT . '/img/uploads/users' . $a)){
                      echo 'success';
                        $hai = 1;
                      }
                      else
                      {
                      echo 'failed';
                      $hai = 0;
                      }



                    }
                    .....
                    .....

                    ......
 $Curriculum = array();
 $Curriculum['Shop']['image'] = $hai;
        $this->Shop->save($Curriculum);
         echo 0;
        exit;

i think this line 'if(move_uploaded_file($a, WWW_ROOT . '/img/uploads/users' . $a)){ ... } was not working ,through this code i am able to store the '0 in my database i.e else part of the code.

how to move the uploaded image to folder and path to my database field..plz help me any one...!

my script code is

 function addAdminList(){
    var branchId = $('#branchId').val();
    var branchName = $('#branchName').val();
    var curiculumName = $('#curiculumName').val();
         var owner = $('#owner').val();
         var startdate = $('#startdate').val();
         var phone = $('#phone').val();
         var desc = $('#desc').val();
         var address = $('#address').val();
         var timings = $('#timings').val();
        var image = $('#image').val();                                   

    if(!$("#addClsGrpFrm").validationEngine('validate')){
        return false;
    }
    $('.overlay').show();
    $.ajax({
        url : '<?php echo BASE_PATH; ?>adminAjax/addAdminList',
        type : 'POST',
        data : {
            branchId : branchId,
            branchName : branchName,
            curiculumName : curiculumName,
            owner : owner,
            startdate : startdate,
            phone : phone,
            desc : desc,
            address : address,
            timings : timings,
            image : image
             },
        success : function(res){
            $('.overlay').hide();
            if(res == 0){

            }
            parent.$.colorbox.close();
            oTable.fnDraw();
            return false;
        },
        error : function(res){
            alert('Server Error Occurred'); 
        }
    });

}

my form is

    <form id="addClsGrpFrm" method="post" action="#" onsubmit="return disableFrmSubmit()">
        <div class="flash_msg"><?php echo $this->Session->flash(); ?></div>
        <input type="hidden" name="data[branch][id]" readonly id="branchId" value="0">
        <div class="login-form">
            <label>Shop Image</label>
            <input type="file" id="image" data-prompt-position="topLeft:200" name="data[branch][image]" placeholder="" class="validate[required]" />

   .....
    </div>
                <div class="login-form">
                    <input type="button" onclick="addAdminList()" class="login-btn" value="Submit">
                </div>
        <div class="clear"></div>
    </form>

2 Answers2

1

Some suggestions while submitting your form :

  1. Use FormData when submitting your form rather than appending them one by one.
  2. The extension extraction process that you are using in your controller may not save some files with "." in their filename.

I have created a test form for your knowledge.This is the form:

<form id="testForm" method="post" action="<?php echo 'http://localhost/blog/users/test'; ?>">
    <input type="file" name="image" id="image">
    <input type="submit" value="Submit">
</form>

You can use FormData like so:

$('#testForm').on('submit', function(event) {
    event.preventDefault();
    var form_data = new FormData($(this)[0]); // this will get all your form's inputs
    $.ajax({
        url:"<?php echo 'http://localhost/blog/users/test.json'; ?>", // you can use your form action URL here
        type:'POST',
        data:form_data,
        processData: false,
        contentType: false
    });
});

and finally in your controller:

public function test() {
    if ($this->request->is('post')) {
        if (!empty($this->request->data['image']['tmp_name']) && is_uploaded_file($this->request->data['image']['tmp_name'])) {
            $filename = basename($this->request->data['image']['name']); 
            $imagePath = WWW_ROOT . DS . 'documents' . DS . $filename; // save the file where you wish
            move_uploaded_file(
                $this->request->data['image']['tmp_name'],
                $imagePath // save $imagePath in your database
            );
        }
    }
}

You can use $imagePath to save in your database and as for your file extension process you can use this function as it will get the filetype even if the filename has a "dot" in it :

public function findFileTypeAndName($filename)
{
    $split_point = '.';  
    $parts = explode($split_point, $filename);
    $last = array_pop($parts);
    $fileNameAndType = array(implode($split_point, $parts), $last);

    return $fileNameAndType; 
}
Community
  • 1
  • 1
Aarrbee
  • 431
  • 1
  • 6
  • 16
0
 $this->layout = "ajax";
    if($this->request->data){
    $postArr = $this->request->data;
    $a = $postArr['image'];
        $ext = substr(strtolower(strrchr($a['name'], '.')), 1); //get the extension
                    $arr_ext = array('jpg', 'jpeg', 'gif'); //set allowed extensions
                   if(in_array($ext, $arr_ext))
                    {
                        //do the actual uploading of the file. First arg is the tmp name, second arg is
                        //where we are putting it
                      if(move_uploaded_file($a['tmp_name'], WWW_ROOT . '/img/uploads/users/' . basename($a['name']))){
                      echo 'success';
                        $hai = 1;
                      }
                      else
                      {
                      echo 'failed';
                      $hai = 0;
                      }



                    }
                    .....
                    .....

                    ......
 $Curriculum = array();
 $Curriculum['Shop']['image'] = $hai;
        $this->Shop->save($Curriculum);
         echo 0;
        exit;

The issue is just that you tried to pass the image array to strrchr($a) instead of strrchr($a['name']) at this point:

$ext = substr(strtolower(strrchr($a['name'], '.')), 1); //get the extension

Then you also tried to pass $a which is an array into move_uploaded_file($a,...). Check my corrections for that part of the code...

I_am_NHO
  • 27
  • 8