2011-10-18 3 views
0

내가 가진 PHP 할당에 문제가 있습니다. 양식 입력을 생성하기 위해 PHP 스크립트를 만들었고 입력 데이터를 가져 와서 텍스트 문서에 삽입해야합니다. 그래서 두 개의 입력과 텍스트 문서에 데이터를 쓸 함수를 생성하는 코드를 작성했습니다. 그러나 내 텍스트 문서가 비어있게 나타납니다. 텍스트 입력에서 여러 값을 가져 와서 텍스트 문서에 삽입하는 함수를 제대로 정의하는 방법은 무엇입니까? 당신은 코드의 상단에 $item_value에 값을 할당 할 때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

당신이 당신의 PHP 태그의 범위 내에서 $ item_value라는 변수를 만드는 : 여기에 지금까지 내 코드입니다. addData() 함수에는 $ item_value라는 변수가 없으므로 $stringData = $item_value은 값이 null 인 새 변수 item_value과 동일한 값을 갖는 $stringData 변수를 만듭니다. 데이터를 메소드에 전달하면 액세스 할 수 있습니다.

이 좋아 호출 시도 :

addData($item_value); 

그런 다음에 방법을 변경 :

function addData($item_value){ 
+0

좋아, 나는 이걸 시도했지만 텍스트 문서가 비어있다. 또한 두 변수를 모두 정의해야합니까? ($ item_value 및 $ amount_value)? –

+0

그렇다면'if ($ error_count == 0)'가 false를 반환하기 때문에'addData' 메서드를 호출 할 생각은 없다고 생각합니다. 'addData ($ item_value)'줄에 대해'echo 'ERROR COUNT = 0';'을 코드에 추가하십시오. 아무 것도 표시되지 않으면 메소드를 결코 호출하지 않는다는 것을 알 수 있습니다. – CHawk

+0

흠, 내가 그것을 추가하고 –

1

명시 적으로 글로벌 선언하지 않는 한 전역 변수, 함수 내에 표시하는 것을 허용하지 않습니다 PHP의 변수 범위 규칙 . 따라서 addData() 함수 내에서 $ amount_value와 $ item_value는 선언되지 않은/정의되지 않은 LOCAL 변수이며 fwrite() 호출에 대해 null/빈 문자열로 변환되므로 코드에서 빈 파일 만 쓸 수 있습니다.

addData($amount_value, $item_value); 

또는 전역으로 선언 할 :

하나는 함수 매개 변수로 값을 전달하는 두 가지의

function addData() { 
    global $amount_value, $item_value 

을 매개 변수 버전과 함께 할 것입니다. 전역 변수는 지저분합니다.

+0

나는 두 가지 방법을 시도했지만, 매번 빈 텍스트 문서를 얻는다. –

+0

실제로 두 개의 바에 다섯 가지 POSt 데이터 세트를로드한다는 것을 잊지 마라. 마지막 세트 만이 "stick"하고, 빈 값이 제출되면 빈 변수가 생깁니다. –

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

글쎄,이 문서는 내 문서가 비어있었습니다. 어떤 아이디어? 값이 다음과 같이 따옴표로 묶여 있으면 괜찮을까요? fwrite ($ fh, "$ amount_value, $ item_value \ n")? –

+0

파일을 여는 데 'a' 모드가 필요할 것입니다.그러면 파일에 추가됩니다 ('w'는 매번 덮어 씁니다). 자세한 내용은 [fopen] (http://php.net/manual/en/function.fopen.php)을 참조하십시오. PHP는 변수를 큰 따옴표로 보간하기 때문에 (따옴표로 '$ amount_value'를 실제 값 (예 : '4')로 바꿀 수 있습니다. –

관련 문제