Справка по массиву флажков в строке: выложить $ _POST и вернуть значения в тот же $ _POST? - PullRequest
1 голос
/ 10 мая 2011

Я пытаюсь сохранить результаты короткой формы в плоский файл (например, в текстовом файле).Файл будет импортирован в 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 в текстовом файле.Однако, когда я пытаюсь запустить код, я получаю «Примечание: преобразование массива в строку в E: \ cgi-bin \ thankyou.php в строке 14».Ошибка говорит мне, что в приведенном ниже коде я пытаюсь использовать массив в качестве строки.

// 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).

1 Ответ

0 голосов
/ 10 мая 2011

РЕДАКТИРОВАТЬ : Обязательно 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.

РЕДАКТИРОВАТЬ 5/11/11 2011 : после перезаписи$_POST, похоже, не работает, попробуйте использовать промежуточное значение и удалите символьный ключ rolfz:

if (isset($_POST['rolfz'])) {
  $temp = implode(",", $_POST['rolfz']);
  unset($_POST['rolfz']);
  $_POST['rolfz'] = $temp;
}
...