我试图将一个简短的表单的结果存储到一个平面文件(例如.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