2017-02-10 21 views
0

CakePHPのコントローラのフォルダに画像やパスOTデシベルをアップロードし、それが働いていなかったか、私のコードは、私はこの行を考える私はフォルダにアップロードされたファイルを移動するには、コントローラのコードを書かれている

$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; 

です'私のデータベースに' 0 'を格納することができるこのコードを通して、(つまり、move_uploaded_file($ a、WWW_ROOT。'/img/uploads/users '。$ a)){...}は動作しませんでした。コード。

アップロードした画像をフォルダに移動してデータベースのフィールドに移動するにはどうすればいいですか?

私のスクリプトコードは、私のフォームは、フォームの送信中に

<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> 
+0

あなたのフォームも投稿してください。 –

+0

私のフォームにいくつかのajax機能を追加しました。plzはそれを見つけました –

+0

これを見ました.... plz help me –

答えて

1

いくつかの提案です

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'); 
     } 
    }); 

} 

です:

  1. 使用をFormDataフォームを提出するのではなく、それらを追加します一つずつ。
  2. コントローラで使用している拡張子抽出プロセスでは、「。ファイル名に私はあなたのknowledge.Thisのためのテスト・フォームを作成している

は形式です:

<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> 

あなたがそうのようにいるFormDataを使用することができます:あなたのコントローラで

$('#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 
    }); 
}); 

そして最後に:

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 
      ); 
     } 
    } 
} 

$ imagePathを使用してデータベースに保存し、

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

    return $fileNameAndType; 
} 
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; 

問題は、あなたが画像を渡そうとしましただけのことです。それは、ファイル名がその中に「ドット」を持っている場合でも、ファイルタイプを取得するよう、ファイル拡張子プロセス用として、あなたは、この機能を使用することができますこの時点でstrrchr($a)代わりのstrrchr($a['name'])に配列:

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

はその後もmove_uploaded_file($a,...)に配列されている$aを渡そうとしました。 コードのその部分の訂正を確認してください...

関連する問題