我正在尝试将简短格式的结果存储到平面文件(例如.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']
了?
编辑 (5/10/11):在内爆之前:
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" } }
编辑 (5/10/11):如果您正在尝试执行类似的解决方案,请参阅迈克尔的解决方案。请注意,我是个白痴,在我的代码中使用了错误的复选框名称(它应该是 roflz 而不是 rolfz)。
编辑:在尝试implode()
它之前,请务必var_dump($_SESSION)
,以防那里已经有其他数组。
因此,您的错误似乎是您的$_POST
包含一个数组,并且您$_POST
直接转换为$_SESSION
然后尝试按原样将其implode()
为字符串。 implode()
遍历该阵列。
您可以简单地忽略$_SESSION['rolfz']
:
foreach($_POST as $k=>$v) {
if ($k != 'rolfz') {
$_SESSION[$k]=$v;
}
}
然后按照您的建议使用其他方式处理它。
更好的是,将$_POST
按原样存储到$_SESSION
中,但使用不同的临时数组来过滤掉rolfz
:
$_SESSION = $_POST; // will overwrite anything already in $_SESSION
$tmp_array = array();
foreach($_POST as $k=>$v) {
if ($k != 'rolfz') {
$tmp_array[$k]=$v;
}
}
// Then implode() $tmp_array and write to file.
编辑 5/11/2011:由于覆盖$_POST
似乎不起作用,请尝试使用中间值并删除原始rolfz
键:
if (isset($_POST['rolfz'])) {
$temp = implode(",", $_POST['rolfz']);
unset($_POST['rolfz']);
$_POST['rolfz'] = $temp;
}