2011-10-18 17 views
0

私はPHPの割り当てに問題があります。私はフォーム入力を生成するPHPスクリプトを作成しました。私は入力からデータを取り出し、それをテキスト文書に挿入する必要があります。そこで、2つの入力を生成するコードと、テキスト文書にデータを書き込む関数を作成しました。しかし、私のテキスト文書は空白に見えます。テキスト入力から複数の値を取り込んでテキスト文書に挿入する関数を正しく定義するにはどうすればよいですか?ここに私のコードは、これまでのところです:PHPで生成された入力からテキストファイルに挿入

<form method='post'> 
<table border='0' cellpadding='3' cellspacing='5'> 
    <tr> 
    <td><h2>Item</h2></td> 
    <td><h2>Amount</h2></td> 
    </tr> 
<?php 

for($row=1; $row<5;$row++) 
    { 

    $item_name='item_name'.$row;  
    $item_value = $_POST[$item_name]; 

    $amount_name='amount_name'.$row;  
    $amount_value = $_POST[$amount_name]; 



echo 
"<tr> 
    <td><input type='text' name='$item_name' value='$item_value' /></td> 
    <td><input type='text' name='$amount_name' value='$amount_value' /></td> 
"; 

    if (!empty($amount_value)) 
    { 
      if(is_numeric($amount_value)) 
      { 
      $total = $total + $amount_value; 
      } 
      else { 
     echo  
      "<td class='bad'>Amount Invalid: $amount_value</td>"; 
      $error_count++; 
      } 
    } 


echo" 
    </tr> 
"; 

    } 
?> 

<tr> 
    <td colspan='2'> 
    <input name='' type='submit' value='Submit' /> 
    </td> 
</table> 
<?php 
    if ($error_count > 0) 
    { 
    echo "<br /><span class='bad' />Errors: $error_count</span>"; 
    } 
    else 
    { 
    echo "<br />Total: $total"; 
    } 
    if ($error_count == 0) 
    { 
    addData(); 
    } 


    //Function 
    function addData() 
    { 
    $myFile = "bills.txt"; 
    $fh = fopen($myFile, 'w') or die("can't open file"); 
    $stringData = $amount_value; 
    fwrite($fh, $stringData); 
    $stringData = $item_value; 
    fwrite($fh, $stringData); 
    fclose($fh); 
    } 

?> 
</form> 
+0

スクリプトの上部に 'error_reporting(E_ALL);'を追加します。次に、関数のパラメータを追加することを検討します。 – mario

答えて

2

あなたは、コードの先頭に$item_valueに値を代入すると、あなたは、PHPタグの範囲内で$ item_valueと呼ばれる変数を作成しています。関数addData()には、$ item_valueという変数はありません。したがって、は、新しい変数item_valueと値がnullの変数$stringDataを作成します。データをメソッドに渡すと、そのメソッドにアクセスできます。

好き、それを呼び出してみてください。

addData($item_value); 

その後にメソッドを変更する:あなたは明示的には、グローバルに宣言しない限り、PHPの変数のスコープルールは、グローバル変数は、関数内に現れることはできません

function addData($item_value){ 
+0

OK、これを試しましたが、テキスト文書は空白です。また、私は両方の変数を定義する必要がありますか? ($ item_valueと$ amount_value)? –

+0

それで 'if($ error_count == 0)'がfalseを返すので、あなたは今までに 'addData'メソッドを呼び出すことはないと思います。コード 'addData($ item_value)'について、 'echo 'ERROR COUNT = 0';'をコードに追加してみてください。何も表示されない場合は、あなたは決してそのメソッドを呼び出すことがないことを知っている。 – CHawk

+0

うーん、私はそれを追加し、それは –

1

。したがって、addData()関数の中では、$ amount_valueと$ item_valueは宣言されていない/未定義のLOCAL変数であり、fwrite()呼び出しのNULL /空文字列に変換されるので、空のファイルを書くことができます。

いずれかの関数のパラメータとして値を渡す:

addData($amount_value, $item_value); 

またはグローバルとして宣言:2の

function addData() { 
    global $amount_value, $item_value 

を、パラメータバージョンで行きます。グローバル変数は面倒です。

+0

私は両方の方法を試しましたが、たびに空白のテキスト文書を取得します –

+0

実際にPOStデータの5つの異なるセットを2つの変数にロードしていることを忘れないでください。最後のセットだけが「スティック」し、それらが空に提出された場合、空の変数が得られます。 –

0

$amount_value$item_valueを少なくとも関数に渡す必要があります。おそらくいくつかの送料が返されます。例えば

addData($item_value, $amount_value); 

//Function 
function addData($item_value, $amount_value) 
{ 
    $myFile = "bills.txt"; 
    $fh = fopen($myFile, 'w') or die("can't open file"); 
    fwrite($fh, "$amount_value, $item_value\n"); 
    fclose($fh); 
} 
+0

私はこれをして、私のテキストのdocは空でした。何か案は?値が次のような引用符で囲まれていればOKでしょう:fwrite($ fh、 "$ amount_value、$ item_value \ n")? –

+0

おそらくファイルを開くための 'a'モードが必要です。それがファイルに追加されます( 'w'は毎回上書きされます)。詳細は、[fopen](http://php.net/manual/en/function.fopen.php)を参照してください。 PHPは変数を二重引用符で補間する(つまり、 '$ amount_value'を' 4'のような実際の値に置き換えるため)引用符はOKです。 –

関連する問題