我試圖將一個簡短的表單的結果存儲到一個平面文件(例如.text文件)。該文件將作爲分隔文件導入到Excel中。窗體有複選框,因此它可以被設置成一個數組:
<input type="hidden" name="roflz" value="noresponse">
<input type="checkbox" name="roflz[]" value="Yesroflz" id="Yesroflz" <?php if (isset($_SESSION['roflz']) && $_SESSION['rolfz'] == "Yesroflz") { echo 'checked="checked"'; } ?>> <label for="Yesroflz">Yesroflz</label> <br />
<input type="checkbox" name="roflz[]" value="Moreroflz" id="Moreroflz" <?php if (isset($_SESSION['roflz']) && $_SESSION['roflz'] == "Moreroflz") { echo 'checked="checked"'; } ?>> <label for="Moreroflz">Moreroflz</label><br />
是否有可能從$_POST['rolfz']
破滅的陣列,並將結果返回到$_POST['rolfz']
?所需的結果是一個字符串,我可以將其存儲到一個文本文件中。請參閱下面的代碼:
<?php
// begin the session
ini_set('session.cache_limiter', 'private');
session_start();
//Turn checkboxes (an array) into a string. So we can later store it into a strong.
if(isset($_POST['rolfz'])){
$_POST['rolfz'] = implode(",",$_POST['rolfz']);
}
總體目標是將$ _SESSION中的所有值存儲到文本文件中。但是,當我嘗試運行代碼時,我得到了「注意:數組在14行E:\ cgi-bin \ thankyou.php中的字符串轉換」。錯誤告訴我,在下面的代碼中,我試圖將一個數組作爲一個字符串使用。
// Take each input name and create a variable for it
foreach($_POST as $k=>$v) {
$_SESSION[$k]=$v;
}
//Implodes the array so we can store the values as a string (not the variables name though!)
$results = implode("|", $_SESSION);
//Open up the file that we will store the collected information to
$datafile=fopen("V1.txt","a") or exit("Unable to open file to record data!");
//Write the data on a new line ("\r\n") so we don't over-write the existing data
fwrite($datafile, "\r\n".$results);
//Close out the file
fclose($datafile);
//reset session variables and destroy the session
$_SESSION = array();
session_destroy();
?>
如果我在做什麼是錯的或不可能的,是可以使用的替代語句,而不是爲foreach($_POST as $k=>$v)
,使其忽略$_POST['rolfz']
?那樣我可以自己處理$_POST['rolfz']
?
編輯(11年5月10日): 之前爆:
array(5) { ["date"]=> string(10) "05/10/2011" ["time"]=> string(11) "09:11:20 AM" ["gender"]=> string(4) "male" ["lolz"]=> string(7) "YesLOLZ" ["roflz"]=> array(2) { [0]=> string(8) "Yesroflz" [1]=> string(7) "Noroflz" } }
爆後:
array(5) { ["date"]=> string(10) "05/10/2011" ["time"]=> string(11) "09:11:20 AM" ["gender"]=> string(4) "male" ["lolz"]=> string(7) "YesLOLZ" ["roflz"]=> array(2) { [0]=> string(8) "Yesroflz" [1]=> string(7) "Noroflz" } }
編輯(11年5月10日): 請參閱邁克爾的解決方案,如果你正在嘗試做類似的解決方案。並注意我是一個白癡,並在我的代碼中使用了錯誤的複選框名稱(它應該是roflz而不是rolfz)。
是否有一個原因,你是c用你自己的方式來表示'$ _SESSION'作爲一個字符串來寫入你的文件,而不是使用專爲此目的而設計的'serialize()'函數? http://us.php.net/manual/en/function.serialize.php – 2011-05-09 20:29:11
該文件是數據收集方面的終點。我會使用數據庫,但由於環境限制而無法使用。我確實嘗試過在某個時候使用'serialize()',但是如果我記得它最後會出現一堆大多數人無法讀取的文本。由於其他人會將文本文件導入到Excel中(不能直接寫入Excel文件)並使用管道刪除功能將其分解爲列,所以我試圖通過這種方式來完成。 – OneBigNewbie 2011-05-09 20:35:49
我明白了。從你的帖子中不清楚你需要的輸出是人類可讀或可用的CSV等。 – 2011-05-09 20:41:12