PHP:Foreach循环导致输出有一个我不想要的额外符号

时间:2016-05-26 23:19:00

标签: php

html <input>标记导入了两个不同的值。它们应显示如下:value1:value2。 但它们显示如下:value1:value2:。 我知道是什么导致了这个问题,但我不知道如何解决它,因为我只是一个PHP的初学者。

?php
$handle = fopen("text.txt", "a");
foreach($_POST as $variable => $value) {
    fwrite($handle, $value);
    fwrite($handle, ":");
}

fclose($handle);
exit;
?

2 个答案:

答案 0 :(得分:2)

一个选项是将数据存储在数组中,并将它们与implode粘合在一起。

foreach($_POST as $key => $value){
    $tmp[] = htmlentities($value);
}

if($fp = fopen('text.txt', 'a')){
  fwrite($fp, implode(':', $tmp));
  fclose($fp);
}

另一个解决方案是将所有值连接到变量,并使用trim()substr()去掉不需要的符号,然后将变量的值写入file。

此外,检查文件是否成功打开并根据您对保存的数据执行的操作可能是明智的,以避免XSS攻击使用htmlentites(),如果您计划回应它。

答案 1 :(得分:2)

在foreach内的每个循环中,您都会添加一个值和冒号。一种选择是在添加值之前添加冒号,并且不要在第一次运行时添加冒号。像这样:

<?php

    $first = true;
    $handle = fopen("text.txt", "a");

    foreach($_POST as $variable => $value) {

        if(!$first) {
            fwrite($handle, ":");
            $first = false;
        }
        fwrite($handle, $value);

    fclose($handle);

?>

来自@xorifelse的内爆解决方案也很不错