2011-08-24 7 views
0

Update 버튼을 한 번 클릭하여 사용자가 체크 박스를 선택한 디렉토리의 이름을 바꾸고 싶습니다. 텍스트 상자 및 체크 상자 값은 배열로 수집되어 jQuery를 통해 서버로 보내집니다. Firebug는 전달되는 올바른 배열 값을 보여줍니다. 문제는 텍스트 상자에 입력 된 새 값이 아니라 다른 값이 변경되지 않은 채 첫 번째 검사 된 디렉터리의 이름이 Array으로 변경된다는 것입니다.디렉토리 이름 바꾸기 문제

이 코드?

HTML에서 잘못하고 있어요 무엇 :

<input type="text" name="album_text[]" id="album_text" class="album_text" /> 
<input type="text" name="album_text[]" id="album_text" class="album_text" /> 
<input type="text" name="album_text[]" id="album_text" class="album_text" /> 

<input name="album_checkbox[]" type="checkbox" id="album_checkbox" value="' . $res. '"> 
<input name="album_checkbox[]" type="checkbox" id="album_checkbox" value="' . $res. '"> 

JQUERY :

$("#album_update").click(function() { 
       var album_name = new Array(); 


       $("input[@name='album_checkbox[]']:checked").each(function() { 
        album_name.push($(this).val()); 
       }); 

       var album_text= new Array(); 

       $("input[name='album_text[]']").each(function(){ 

        if($(this).val()) { 
          album_text.push($(this).val()); 
        } 

       }); 



      var postData = { 
         "album_name" : album_name, 
         "album_text" : album_text, 
         "album_update" : $("#album_update").val() 
       }; 


         //make the call 
         $.ajax({ 
         type: "POST", 
         url: "updalbums.php", 
         data: postData, 
         dataType: "json", 
         success: function(data){ 
          alert("updated"); 
         } 
         }); 
     }); 

PHP :

public function updateAlbum() { 

       if (isset($_POST['album_text']) && isset($_POST['album_name'])) { 

        $path = $_SERVER['DOCUMENT_ROOT'] . '/images/'; 

        foreach ($_POST['album_name'] as $albums_name) { 
         $album_text = $_POST['album_text']; 
         rename($path.$albums_name, $path.$album_text); 
        } 
       } 
     } 

답변

0

배열 인 $ _POST 전역 $ _POST [ 'album_text']에서 직접 그리기 때문에 $ album_text는 배열입니다. 올바른 색인을 식별해야합니다.

다음과 같은 색인에 액세스 할 수 있지만 깨지기 쉬운 것처럼 보입니다.

    foreach ($_POST['album_name'] as $idx => $albums_name) { 
        $album_text = $_POST['album_text'][$idx]; 
        rename($path.$albums_name, $path.$album_text); 
       } 
+0

감사합니다. 그랬어! 그러나 당신은 무엇을 의미하는지 설명해 주시겠습니까? 그러나 그것은 부서지기 쉬운 것처럼 보입니다. – input

+2

@ fuz3d @josh 나는이 침입에 대해 걱정할 필요가 없다. 나는이 코드를 그대로 사용하면 아무나 * 아무 데나 * 이동할 수 있다고 걱정할 것이다. 'rename ('index.php', '/tmp/delete_me.txt')와 비슷합니다. 이것은 어리 석음을 넘어 ** ** – adlawson

+0

@adlawson입니다.이 코드에는 보안 허점이 있지만, 아직 배우고 있으며, codereview 사이트에서 검토를 위해이 코드를 게시하면 보안 계층을 추가하는 데 도움이 될 것입니다. – input