如何用php在文本文件中写一个变量值

时间:2016-01-07 18:31:17

标签: php

我的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;">&#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>

4 个答案:

答案 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;">&#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>

答案 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;">&#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 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;">&#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> 

答案 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}}或类似的。