簡要說明:
您正在嘗試彷彿「按需」腳本語言兩者都是客戶端,以兩種不同的語言結合起來。
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;">℃</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>
錯誤,如果有的話?它正在寫入該文件嗎?檢查你的控制檯也 –
'$ v = textBox.value;'看起來不像PHP。錯誤報告也會告訴你。 – Qirel
^真實和錯誤報告會拋出未定義的常量聲明。 http://php.net/manual/en/function.error-reporting.php –