2016-01-07 55 views
-2

我有一個php代碼有問題。這是一個簡單的網頁,我的電腦上有兩個按鈕和一個文本框。當我點擊+或 - 按鈕時,文本框中的數字會增加或減少。除非我想使用php代碼將textBox.value寫入文本文件,否則一切都按原樣運行。當它應該是「value = 0」時,結果就像「value = textBox.value」。謝謝。 的代碼如下:如何用php編寫文本文件中的變量值

<!DOCTYPE html> 
<html> 
<body> 

<input id="increaseNumber" type="button" value="+" style="font-size:24pt; width: 50px; height: 50px;"><br> 
<input id="textBox" type="text" value="0" style="font-size:24pt; width: 40px; height: 40px;"> 
<label style="font-size:24pt;">&#8451;</label><br> 
<input id="decreaseNumber" type="button" value="-" style="font-size:24pt; width: 50px; height: 50px;"><br> 

<script> 

decreaseNumber.onclick = function() { 
    textBox.value = parseInt(textBox.value) -1 
} 
increaseNumber.onclick = function() { 
    textBox.value = parseInt(textBox.value) + 1 
} 

</script> 

<?php 
$myfile = fopen("/home/pi/test/test.txt", "w") or die("Unable to open file!"); 

$txt = "value = "; 
fwrite($myfile, $txt); 
$v = textBox.value; 
fwrite($myfile, $v); 
fclose($myfile); 
?> 

</body> 
</html> 
+0

錯誤,如果有的話?它正在寫入該文件嗎?檢查你的控制檯也 –

+0

'$ v = textBox.value;'看起來不像PHP。錯誤報告也會告訴你。 – Qirel

+0

^真實和錯誤報告會拋出未定義的常量聲明。 http://php.net/manual/en/function.error-reporting.php –

回答

0

簡要說明:

您正在嘗試彷彿「按需」腳本語言兩者都是客戶端,以兩種不同的語言結合起來。

Javascript是客戶端,因此將基於事件偵聽器或任何其他定義的參數運行。 PHP是服務器端,因此,將在文件解析時運行。這意味着,當Javascript甚至進入圖片時,您的PHP已經被處理並且不在圖片之中。

什麼是你的腳本發生目前:

這個文件被解析,PHP是確定的,並且運行第一。運行後立即寫入文件。 PHP默認爲「textBox.value」的文本值,因爲它不是一個實際變量(如果是的話,它會以$開頭)。誠實地說,它應該返回一個錯誤,即「textBox.value」意味着什麼,本質上(PHP不嚴格,所以它做了很多假設)。然而,這並不是因爲它假設你引用了一個常量。處理完PHP後,DOM將被處理併發送到瀏覽器。 PHP在這個時候甚至不存在,並且已經被剝離了DOM(理所當然 - 您永遠不希望PHP對客戶端可見)。

怎麼辦:

你可以選擇你想要增加/用PHP是同一個文件內減少數值,每次不運行這個PHP代碼段(至少在沒有表單提交,或某事以「抓住」請求 - 我的迴應將基於這樣一個事實,即單擊時只需要它寫入,而不是每次都提交表單)。你必須改變你的代碼。我建議的一件事就是把PHP放在它自己的文件中。然後,在增加/減少該值時,您可以使用AJAX實際命中該文件(從而觸發文件寫入)。

實施例:

的index.html

<!DOCTYPE html> 
<html> 
<head> 
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 
</head> 
<body> 

<input id="increaseNumber" type="button" value="+" style="font-size:24pt; width: 50px; height: 50px;"><br> 
<input id="textBox" type="text" value="0" style="font-size:24pt; width: 40px; height: 40px;"> 
<label style="font-size:24pt;">&#8451;</label><br> 
<input id="decreaseNumber" type="button" value="-" style="font-size:24pt; width: 50px; height: 50px;"><br> 

<script> 

$("#decreaseNumber").on("click", function() { 
    $("#textBox").val(parseInt($("#textBox").val()) -1); 
    writeToFile($("#textBox").val()); 
}) 
$("#increaseNumber").on("click", function() { 
    $("#textBox").val(parseInt($("#textBox").val()) +1); 
    writeToFile($("#textBox").val()); 
}) 

function writeToFile(value){ 

    $.ajax({ 
     url: 'write.php?v=' + value, 
     type: 'GET', 
     dataType: 'json', 
     success: function(ret){ 
      alert('Success!'); 
     }, 
     error: function(ret){ 
      alert('Error!'); 
     } 
    }); 

} 


</script> 

</body> 
</html> 

write.php

<?php 
$myfile = fopen("/home/pi/test/test.txt", "w") or die("Unable to open file!"); 

$txt = "value = " . $_GET['v']; 
fwrite($myfile, $txt); 
fclose($myfile); 
?> 

注變遷:

我在我的例子中使用JQuery。如果你想嚴格使用本地Javascript,我很抱歉。

另請注意,我更改了PHP。您有兩次寫入,這是不必要的,需要更多時間。文件輸入/輸出成本很高,應儘量少用。實際上,在這個例子中,我個人只寫了一個數據庫。然而,你並沒有要求單獨的解決方案,所以我只是提供了一個類似於你所寫的例子。

隨想

可以使用的,而不是你在做什麼,以及遞減/遞增。像這樣:

<script> 

decreaseNumber.onclick = function() { 
    textBox.value--; 
    alert(textBox.value); 
} 
increaseNumber.onclick = function() { 
    textBox.value++; 
    alert(textBox.value); 
} 

</script> 
+0

您的示例最適合我需要的內容,但每次執行代碼時,它都會給我「錯誤」並且永遠不會「成功」,即使一切都按原樣運作。所以我刪除了Ajax警報,現在它很完美。非常感謝你。 – Mugur

+0

完全沒問題!您也可以更深入地瞭解這一點,並在AJAX中有一些錯誤迴應。例如,如果它無法打開文件,您將收到一個響應,而不是剛剛死亡(如果您沒有看到開發人員工具中的「網絡」選項卡,則使用AJAX有時難以調試)。如果你想看到它,我很樂意編輯這篇文章來展示如何實現。 –

0

要讓php做到這一點,您需要提交表單。你可以通過ajax或普通的提交後完成。

我已經修改了您的代碼以進行基本的發佈提交。 請閱讀有關發佈方法的信息。

我不得不在你的HTML以及php做出微小的改變。 我已經評論他們的簡單。

你不能將兩種不同的語言結合在一起工作,至少在這種情況下不能。您可以將值從PHP分配給JAVASCRIPT變量,但不能以其他方式分配。

只要提交輸入字段,PHP就能夠讀取輸入字段的值。 如果您想爲PHP在每次數量增加或減少時寫入文件,你將不得不做一個Ajax請求對這些特定事件得到這個工作的PHP腳本。(的onClick)

<!DOCTYPE html> 
<?php 
if($_SERVER['REQUEST_METHOD']=='POST') 
{ 
    $myfile = fopen("/home/pi/test/test.txt", "w") or die("Unable to open file!"); 

    //You dont need to write twice, you can use both values in one single variable and write once 
    //added whitespce \r\n for line break 
    $v = $_POST['textbox']; 
    $txt = "value = $v"; 
    fwrite($myfile, $txt); 
    fclose($myfile); 
    echo "written to file"; 
} 
?> 
<html> 
<body> 
<!--Made this a form so it can be submit to php--> 
<!--Read about POST method--> 
<form method="POST" action=""> 
<input id="increaseNumber" type="button" value="+" style="font-size:24pt; width: 50px; height: 50px;"><br> 
<!-- Add the name attribute so php can read the value --> 
<input name ='textbox' id="textBox" type="text" value="0" style="font-size:24pt; width: 40px; height: 40px;"> 
<label style="font-size:24pt;">&#8451;</label><br> 
<input id="decreaseNumber" type="button" value="-" style="font-size:24pt; width: 50px; height: 50px;"><br> 
<input type='submit' value='Submit'/> 
</form> 
<script> 

decreaseNumber.onclick = function() { 
    textBox.value = parseInt(textBox.value) -1 
} 
increaseNumber.onclick = function() { 
    textBox.value = parseInt(textBox.value) + 1 
} 

</script> 
</body> 
</html> 

鏈接,這將是對你有用

$ _ POST - http://php.net/manual/en/reserved.variables.post.php

PHP表單處理 - http://www.w3schools.com/php/php_forms.asp

AJ AX請求 - http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp

0

在這裏,你很容易在javascript中獲得價值,如果你想獲得值,那麼你必須發佈表單或通過URL中的參數發送。這裏有一些方法來傳遞數據在PHP中:
- 使用$ _POST傳遞PHP變量
- 在與$ _GET的鏈接中傳遞PHP變量
- 傳遞不帶POST或GET的PHP變量| $ _SESSION
- 傳遞PHP變量數組從一個網頁到另一個
- 傳遞PHP Cookie變量

<!DOCTYPE html> 
<html> 
<body> 
<form action="" method="post"> 
<input id="increaseNumber" type="button" value="+" style="font-size:24pt; width: 50px; height: 50px;"><br> 
<input id="textBox" type="text" value="0" name="textBox" style="font-size:24pt; width: 40px; height: 40px;"> 
<label style="font-size:24pt;">&#8451;</label><br> 
<input id="decreaseNumber" type="button" value="-" style="font-size:24pt; width: 50px; height: 50px;"><br> 
<input type="submit" name="submit" value="Write To File"> 
</form> 
<script> 

decreaseNumber.onclick = function() { 
    textBox.value = parseInt(textBox.value) -1 
} 
increaseNumber.onclick = function() { 
    textBox.value = parseInt(textBox.value) + 1 
} 

</script> 

<?php 

if(isset($_POST['submit'])){ 
    $myfile = fopen("/home/pi/test/test.txt", "w") or die("Unable to open file!"); 

    $txt = "value = "; 
    fwrite($myfile, $txt); 
    $v = $_POST['textBox']; 
    fwrite($myfile, $v); 
    fclose($myfile); 
} 
?> 

</body> 
</html> 
0

你混的事情了,它不會像這樣工作。

首先,奉上<form>指向PHP文件,將處理增加/減少功能,並將其寫入到test.txt文件中的輸入框:

<form id="handler" method="post" action="handler.php"> 
    <!-- Your input elements here --> 
</form> 

而且,你會需要將屬性name添加到textBox元素,您可以在示例中將其稱爲nvalue

其次,您的點擊事件偵聽器無效。設置它們正確的是:

document.getElementById("decreaseNumber").addEventListener("click", function() { 
    document.getElementById("textBox.value").value--; 
    document.getElementById("handler").submit(); 
}); 

同樣爲increaseeNumber

第三,把你的PHP在新handler.php文件。用$_POST['nvalue']獲取增加/減少值。將此值寫入文件。

注意:您也可以爲此使用AJAX,但它更高級一點,您也可能需要JS庫(如jQuery)。

注2:您可以通過使用PHP header()功能更新test.txt文件後,從handler.php到表單頁面重定向回來。

注3:你可以讓你通過<input id="textBox">上面加載它,呼應value = "<?php echo $nvalue; ?>",當然,$ n值是使用fread()或類似得到顯示文件test.txt當前值。

相關問題