2010-02-18 73 views
0

我創建了一個由2個輸入字段和一個wysiwyg文本區域(ckeditor)組成的表單。我有一個函數使用ajax來收集要提交的ckeditor數據。我已經正確提交到數據庫的表單,但我也需要它寫入文本文件。我會如何去做這件事?使用的onclick提交提交文本和Wysiwyg表單到數據庫和平面文件

onclick=\"javascript:submitData()\" 

AJAX功能:

編輯,包括代碼

function submitData(){ 
var params=''; 
if(document.getElementById('title').value!='' && document.getElementById('date').value!='' && CKEDITOR.instances.article.getData()!=''){ 
    //build params 
    params='&title='+document.getElementById('title').value; 
    params+='&date='+document.getElementById('date').value; 
    params+='&article='+escape(CKEDITOR.instances.article.getData()); 
    var httpRequest=new ajaxObject('form.php',processData); 
    httpRequest.update('id=submitData'+params); 

}

提交到數據庫,然後嘗試提交以平面文件:

$saving = $_REQUEST['saving']; 
      if ($saving == 1) { 
      $data = $formData['title']; 
      $data .= $formData['date']; 
      $data .= $formData['article']; 

      $file = "/txt/data.txt"; 

      $fp = fopen($file, "a") or die("Couldn't open $file for writing!"); 
      fwrite($fp, $data) or die("Couldn't write values to file!"); 
      fclose($fp); 
      } 

回答

1

我猜想,在某處你的PHP腳本,有類似

mysql_query("insert into your_table ... "); 

是插入到數據庫?

那麼,接近那條線,你必須寫入你的文件。


我能想到的最簡單的解決方案是使用file_put_contents

file_put_contents('path to your file', $content); 

如果你只是想創建一個新的文件,或覆蓋現有的一個;和:

file_put_contents('path to your file', $content, FILE_APPEND); 

如果你想在現有文件的末尾添加文本(如果它不存在,創建該文件)


當然,你也可以使用的fopenflockfwrite,並fclose一個combinaison;但它意味着更多的工作^^

0

最簡單的方法是通過ajax調用腳本將數據寫入文本文件以及插入數據庫。

0

這是我會做的。我將在這裏對你如何處理數據庫部分做一些假設,但你應該能夠把它轉換成有效的代碼。

 
<?php 
$wysiwyg_data = $_POST["wysiwyg_data"]; 
// After you've sent stuff to the DB 
$fh = fopen("my_data.txt", "wb"); 
fwrite($fh, $wysiwyg_date); 
fclose($file_handler); 
?> 

基本上,這裏是我們正在做的事情:

  1. 抓住數據從$_POST(或任何你從你的DB扔後得到它)
  2. 開放用於寫入的文本文件(「my_data.txt」)。如果它不存在,它將被創建。如果你想控制,其中該文件被創建,只是傳遞一個絕對文件路徑
  3. 將數據寫入到文件
  4. 關閉文件

和你做。

至於AJAX部分,您只需通過名稱爲「wysiwyg_data」的sendstring屬性將數據傳遞給此腳本。

我希望這會有所幫助。

+0

這與我所嘗試的非常接近,但由於某些原因它不會寫入文本文件。我將用我的一些代碼編輯我的問題,以便更好地瞭解我正在嘗試做什麼 – 2010-02-18 18:57:08

+0

您是否設置了error_reporting(E_ALL)?這樣,任何奇怪的警告都會顯示出來,你可能會發現你錯過的東西。嘗試把error_reporting(E_ALL);在腳本的頂部,看看你得到了什麼。 – 2010-02-18 19:09:26

1

我踉踉蹌蹌周圍像在PHP的世界盲人,

但我到這兒來你有,我使用平面文件來存儲網站的動態內容的問題,在CKEDITOR編輯HTML代碼段並保存爲文本文件,然後將其包含在網站的每個頁面中。

這是我在包含CKeditor表單的頁面中。

<? $contentv = $_GET["contentv"];?><head> 
<script type="text/javascript" src="../ckeditor/ckeditor.js"></script> 
<form action="1.php?contentv=<? echo $contentv?>" method="post"> 
<textarea rows="25" cols="70" name="content"> 
<? 
$cext = ".txt"; 
$files ="../content/"; 
$fn = $files.$contentv.$cext; 
print htmlspecialchars(implode("",file($fn))); 
?> 
</textarea> 
<br> 

</form> 
<p> 
    <script type="text/javascript"> 
    CKEDITOR.replace('content'); 
</script> 

    <script type="text/javascript"> 
    window.onload = function() 
    { 
     CKEDITOR.replace('content'); 
    }; 
</script> 
    <?php 
$editor_data = $_POST[ 'content' ]; 
?> 
    <script type="text/javascript"> 
    var editor_data = CKEDITOR.instances.conent.getData(); 
</script> 

保存,作爲1form.php並更改地址,以滿足您的需要或只是創建一個相同的文件夾,因爲這劇本名爲「內容」的文件夾,並呼籲1.txt的

該文件夾中創建一個文本文件

接下來,你需要一個文件來處理文本,並將其保存爲文本文件

<? $contentv = $_GET["contentv"];?> 
<? 
$cext = ".txt"; 
$fn = "./content/".$contentv.$cext; 
$content = stripslashes($_POST['content']); 
$fp = fopen($fn,"w") or die ("Error opening file in write mode!"); 
fputs($fp,$content); 
fclose($fp) or die ("Error closing file!"); 
echo "<meta http-equiv=\"refresh\" content=\"0; url=./1form.php?contentv=$contentv\" />\n"; 
?> 

現在保存,作爲1.PHP

文本文件需要在第i個存在如前所述。

檢查到的路徑存儲文件和編輯代碼相應

這確實使用CKEDITOR,這樣必須在服務器上也是如此。

然後就可以調用的頁面這樣,

http://yourserver.co.uk/1form.php?contentv=1

這樣你就可以調用大量的內容與形式1和一個保存文件。

我詳細闡述了以這種方式控制所有內容,減少服務器時間的壓力並使備份更容易,這意味着您不需要SQL,而不是SQL的不好,只是另一種選擇。