我的php代码有问题。这是一个在我的计算机上托管的简单网页,带有两个按钮和一个文本框。当我单击+或 - 按钮时,文本框中的数字会增加或减少。除了当我想使用php代码将textBox.value写入文本文件时,所有内容都可以正常工作。结果类似于“value = textBox.value”,它应该类似于“value = 0”。谢谢。 代码如下:
<!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;">℃</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)
简要说明:
您正在尝试将两种不同的语言结合起来,就好像它们都是客户端&#34;根据需要&#34;脚本语言。
Javascript是客户端的,因此将基于事件侦听器或任何其他定义的参数运行。 PHP是服务器端,因此,将在解析文件时运行。这意味着当Javascript进入图片时,您的PHP已经处理完了,并且已经不在图片中了。
目前您的脚本中发生了什么:
解析文件,识别PHP并首先运行。运行后立即写入文件。 PHP默认为&#34; textBox.value&#34;的文本值。因为它不是一个实际变量(如果是,则前面带有$)。老实说,它应该返回一个&#34; textBox.value&#34;基本上没有任何意义(PHP不严格,所以它做了很多假设)。但是,它并不是因为它假设你引用了一个常数。处理完PHP后,处理DOM并将其发送到浏览器。 PHP此时甚至都不存在,并且已经脱离了DOM(理所当然 - 你永远不希望PHP对客户端可见)。
该怎么做:
每次想要增加/减少值时,你都不能运行这个PHP代码段,因为PHP位于同一个文件中(至少没有表单提交,或者某些事情要么&#34; catch&#34;请求 - 我的回复将基于这样一个事实,即您只需要在点击时写入,而不是每次都提交表单。您必须更改代码。我建议的一件事是将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>
答案 1 :(得分:0)
要让php执行此操作,您需要提交表单。您可以通过ajax或普通的帖子提交来完成此操作。
我已修改您的代码以处理基本的帖子提交。 请仔细阅读post方法。
我不得不对你的HTML和php进行微小的改动。 我很轻松地评论了他们。
您不能将两种不同的语言组合在一起,至少在这种情况下不是这样。您可以将值从PHP分配给JAVASCRIPT变量,但不是相反。
只要提交输入字段,PHP就能读取输入字段的值。 如果您希望每次增加或减少数量时PHP都写入文件,您将不得不对这些特定事件的php脚本执行ajax请求以完成此操作。(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;">℃</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 FORM HANDLING - http://www.w3schools.com/php/php_forms.asp
AJAX请求 - http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp
答案 2 :(得分: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;">℃</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>
答案 3 :(得分: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,但它更高级,您可能还需要一个像jQuery这样的JS库。
注意2:使用php handler.php
函数更新test.txt
文件后,您可以从header()
重定向到您的表单页面。
注意3:您可以让<input id="textBox">
通过加载test.txt
来显示文件value = "<?php echo $nvalue; ?>"
中的当前值,当然,使用{{获得$ nvalue} 1}}或类似的。