首页 > 解决方案 > 如果用户输入[复选框]和文本区域为空,PHP 将 CSV 列留空

问题描述

我正在将输入的值提交到 CSV 文件中,如果用户将输入留空,则 csv 也会留下空白列。我已成功使用 input[type=text] 执行以下操作,但由于某种原因,留空的 textarea 和 checkbox 不会跳过 CSV 中的列。

$data = $_POST;
$data['Nachname'] = array_key_exists('Nachname', $_POST) ? $_POST['Nachname'] : ""; // this is a standard input[type=text]
$data['same-purchaser'] = array_key_exists('same-purchaser', $_POST) ? $_POST['same-purchaser'] : ""; // this is a checkbox 
$data['Interessiert'] = array_key_exists('Interessiert', $_POST) ? $_POST['Interessiert'] : ""; // this is a textarea

$handle = fopen((__dir__)."/submissions.csv", "a+");
fputcsv($handle, $data);
fclose($handle);

// this is my html for the checkbox
<div class="col-md-12" style="padding-left: 0; text-align: left;">
    <label class="wrapper">Random text
    <input value="1" type="checkbox" name="same-purchaser" id="same-purchaser">
    <span class="checkmark"></span>
</div>

// this is the textbox
<div class="form-row">
    <textarea name="" id="Interessiert" rows="8" name="Interessiert" placeholder="Besucher interessiert sich für"></textarea>
    <div class="clear"></div>
</div>

到目前为止,我尝试使用 isset 而不是 array_key_exists 没有成功。

标签: phpcsv

解决方案


提交时<input type="text"><textarea>,即使它们是空的,它们也将始终被发布。<input type="checkbox">仅在选中后才会显示在发布数据中。

我对您所说的“跳过列”有点困惑,所以我提供了两个选项 - 其中一个应该是您正在寻找的。

以下将“跳过列”,因为它只会呈现 CSV 中包含数据的列(我认为这不是您想要的):

$data = [];
$fields = ['Nachname', 'same-purchaser', 'Interessiert'];
foreach ($fields as $field) {
    if (isset($_POST[$field])) {
        $value = trim($_POST[$field]);
        if ($value !== '') {
            $data[] = $value;
        }
    }
}

如果您希望在用户不提供的情况下将该列呈现为空字符串:

$data = [];
$fields = ['Nachname', 'same-purchaser', 'Interessiert'];
foreach ($fields as $field) {
    if (isset($_POST[$field])) {
        $data[] = trim($_POST[$field]);
    } else {
        $data[] = '';
    }
}

推荐阅读