1

短い形式の結果をフラットファイル(.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): 同様の解決策を実行しようとしている場合は、Michaelの解決策を参照してください。そして、私はばかで、コードで間違ったチェックボックス名を使用していることに注意してください(rolfzではなくroflzである必要があります)。

4

1 に答える 1

0

編集:すでにそこに他の配列がある場合に備えて、それをvar_dump($_SESSION)試みる前に必ず確認してください。implode()

したがって、エラーは$_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.

2011年5月11日編集:上書き$_POSTが機能していないように見えるため、中間値を使用して元のrolfzキーを削除してみてください。

if (isset($_POST['rolfz'])) {
  $temp = implode(",", $_POST['rolfz']);
  unset($_POST['rolfz']);
  $_POST['rolfz'] = $temp;
}
于 2011-05-09T20:44:16.680 に答える