2014-10-27 40 views
0

我有一些數據發佈到一個PHP文件,我需要保存/追加由逗號分隔的數據到文本文件。這一切都很好,並且應該是直截了當的,除了當我檢查文件時,我發現每個逗號都被寫了兩次:一次在需要的地方,然後在附加數據之後,但是作爲一組逗號。 下面是我得到了什麼:PHP寫入tars文件,結果重複逗號/標點符號

<form action="signup-submit.php" method="post"> 
     <fieldset> 
      <legend>New User Signup:</legend> 
      <label>Name:</label> 
      <input type="text" name="name" size="16" autofocus required/> <br/> 

      <label>Gender:</label> 
      <label><input type="radio" name="gender" value="m" /> Male</label> 
    <label><input type="radio" name="gender" value="f" checked /> Female</label> <br /> 

      <label>Age: <input type="text" name="age" size="6" maxlength="2" required></label><br/> 

      <label>Personality Type: <input type="text" name="pType" maxlength="4" size="6" required/></label><br/> 

      <label> 
       Favorite OS: 
       <select name="os"> 
        <option value="windows">Windows</option> 
        <option value="mac">Mac OS X</option> 
        <option value="linux">Linux</option> 
       </select>      
      </label><br/> 

      <label> 
       Seeking age: 
       <input name="min" type="text" size="6" maxlength="2" placeholder="min" required/> 
       to 
       <input name="max" type="text" size="6" maxlength="2" placeholder="max" required/> 
      </label><br/> 

      <input type="submit" value="Sign up"/> 
     </fieldset> 
    </form> 

^代碼的帖子「用戶數據」上申請,submit.php它是由同一個變種的名稱保存到變量。

$name = $_POST["name"]; 
$age = $_POST["age"]; 
$gender = $_POST["gender"]; 
$pType = $_POST["pType"]; 
$os = $_POST["os"]; 
$min = $_POST["min"]; 
$max = $_POST["max"]; 

$c = chr(44); 
$s = "$name$c$age$c$gender$c$pType$c$os$c$min$c$max"; 
file_put_contents("single.txt", $s, FILE_APPEND); 
?> 

和文本文件將始終不渝地複製逗號作爲這樣的:

拜倫,21,男,INTP,窗,18,23 ,,,,,,

變量只是從前一頁發佈到此文件的數據。我也試過在陽光下每一種方式來保存數據。事實上,如果我直接寫文本,我沒有問題。當我使用csv功能時,我只有逗號,沒有數據,儘管左右,我相信格式正確。

+0

你可以發佈生成此代碼嗎? – Machavity 2014-10-27 20:22:34

+1

你有循環中的代碼行嗎?如果你這樣做,請發佈你沒有顯示的額外代碼 – mario 2014-10-27 20:22:47

+0

這將有助於看到什麼是實際發佈數據和如何。 – Hozikimaru 2014-10-27 20:22:59

回答

3

這可能是因爲有時你的所有變量都是空的,而你的FILE_APPEND只是逗號。如果這些值是用戶輸入總是仔細檢查這些

if (!empty($name) && !empty($age) && ...) { 
    $s = "$name,$age,$gender,$pType,$os,$min,$max"; 
    file_put_contents("single.txt", $s, FILE_APPEND); 
} 

爲了解決這個事情。 PHP提供了標準函數來清理:Sanitize Filters,您還需要使用自定義規則進行輸入驗證(例如,檢查變量是否在特定範圍內,但這是一個不同的問題)。

+0

醜陋的連接只是我嘗試過的最新事物。我已經試過在包含這些數據的數組上使用implode(),編寫我自己的函數來將所述數組轉換成字符串並寫入,等等,但總是以相同的結果。 – Byron 2014-10-27 21:16:06

+0

你是否檢查變量是否爲空? – dynamic 2014-10-27 21:17:16

+0

我會做一個if語句,就像你現在建議的,看看它是否有效(手指交叉) – Byron 2014-10-27 21:21:42