2013-03-01 3 views
0

데이터를 CSV로 내보내고 "\r\n"을 사용하는 동안 머리글 줄 아래의 새 줄에 각 줄의 데이터를 출력하는 대신 한 줄로 출력합니다 , 즉 :CSV로 내보내기는 새 줄 대신 한 줄에 데이터를 넣습니다.

name | address | phone | email | greg | 2 old street | 09236462942 | [email protected] | michael | 2 new street | 0927464623 | [email protected] | ... 

코드는 다음과 같다 :

JS에게

var file = "Database.csv"; 

allData=name+","+address+","+phone+","+email; 
     allData=allData.replace(/[\\]/g,''); 
     saving(); 

function saving(){ 
    $.ajax({ 
     type: 'POST', 
     url: 'save.php', 
     timeout: 5000, 
     data: { data: allData, filename: file }, 
     error: function() {localStorage["allData"]=allData; wiadomosc("Internet conection error. But don't worry, your data will be stored when conection will be stable.");}, 
     success: function() {localStorage["allData"]="";} 
    }); 
} 

PHP를

<?php 
if(isset($_POST["filename"]) == true && isset($_POST["data"]) == true){ 
    $fp = fopen($_POST["filename"], "a+"); 

    if($fp !== null){ 
     fputs($fp, $_POST["data"] . "\r\n"); 
     fclose($fp); 
    } 
} 
?> 
+0

, 데이터 전에 줄 바꿈을 넣어 그 방법을 시도 줄 바꿈을 포함하도록 이전에 작성된 데이터에 의존하지 마십시오. fputs ($ fp, "\ r \ n". $ _POST [ "data"]); 또한 POST 매개 변수를 사용하여 파일을 대상으로 지정할 수 없도록해야합니다. – ajshort

+0

@ajshort : 시도해 보았지만 아래의 데이터는 CSV의 맨 오른쪽으로 이동합니다. 공개적으로 사용 가능한 앱이 아니라 내부 데이터 수집으로 사용되는 파일을 지정했습니다. – Dave

답변

1

allData 전역 변수처럼 보인다. 나머지 코드에 따라 거의 모든 일이 발생할 수 있습니다. allData을 명시 적으로 saving으로 전달해야합니다. 브라우저 사이드 (예 : Firebug)와 서버 사이드 (예 : Netbeans)에서 디버그합니다.

또한이 줄은 순수한 악의입니다!

$fp = fopen($_POST["filename"], "a+"); 

그런 식으로 거의 모든 것을 시스템 (서버)에서 덮어 쓸 수 있습니다!

isset($_POST["filename"]) == true을 확인하지 마십시오. isset($_POST["filename"]) === true (이 경우 필요하지 않음)을 수행하거나 isset($_POST["filename"])을 수행하십시오.

편집 : PHP에서

var allData=name+","+address+","+phone+","+email; 
     allData=allData.replace(/[\\]/g,''); 
     saving(allData); 

function saving(allData){ 
    $.ajax({... 

을 그리고이 :

이것은 당신이 JS에서 몇 가지 문제가 발생하지 않도록해야한다

function mk_safe_filename($name, $allow_subfolders=false) 
{ 
    $f = trim($nazwa, './\\'); 
    if (!$allow_subfolders) 
    { 
     $f = strtr($f, array('\\'=>'__', '/'=>'__', '..'=>'_', ':'=>'_')); 
    } 
    else 
    { 
     $f = strtr($f, array('\\'=>'/', '..'=>'_', ':'=>'_')); 
     $f = trim($f,'/'); 
    } 
    return $f; 
} 
$file_name = mk_safe_filename($_POST["filename"]); 

$fp = fopen($file_name, "a+"); 
+0

감사합니다. @Nux 멋진 점, 감사합니다! "allData를 저장에 명시 적으로 전달해야합니다."라고 말하면 예제를 제공해 주실 수 있습니까? – Dave

+0

자세한 정보가 추가되었습니다. 디버깅을 통해 필요한 모든 대답을 얻을 수 있습니다. 예 : 전송하기 전에 데이터를 인코딩해야합니까? – Nux

+0

감사합니다! 나는 이것을 지금 시도 할 것이다. – Dave

관련 문제