2016-05-26 21 views
1

2つの異なる値がhtmlの<input>タグでインポートされます。それらはvalue1:value2のように表示する必要があります。 しかし、代わりにvalue1:value2:のように表示されます。 私は問題の原因を知っていますが、私はPHPの初心者なので解決方法はわかりません。PHP:Foreachループにより、不要な余分なシンボルが出力される

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

fclose($handle); 
exit; 
? 

答えて

2

オプションは、データを配列に格納し、それらをimplodeと一緒に接着することです。

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

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

別の解決策は、変数へのすべての値を連結し、trim()又はsubstr()と望ましくないシンボルを取り除き、その後、ファイルに変数の値を記述することであろう。

また、XSS攻撃を避けるために、ファイルを正常に開いたかどうか、保存したデータで何をするかによって、エコーする予定がある場合はhtmlentites()を使用することをおすすめします。

2

foreach内のすべてのサイクルで、値とコロンを追加します。 1つのオプションは、値が追加される前にコロンを追加し、最初の実行時にコロンを追加しないことです。このように:

<?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から破ソリューションも素敵

です
関連する問題