【问题标题】:PHP and Html form not working?PHP 和 Html 表单不起作用?
【发布时间】:2015-08-24 02:07:10
【问题描述】:

所以我正在尝试创建一个表单来捕获用户名(输入)和用户 IP(隐藏输入),然后将其写入 txt 文件。 IP 还应该显示在向用户显示我们正在记录的 IP 的页面上,但 IP 没有显示,并且表单没有写入文件,但我不知道为什么。

索引.html:

<html>
<body>
<br />
<center>

<form action="writetotxt.php" method="POST">
    <input name="field1" type="text" />
    <input type="hidden" name="field2" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />
    <input type="submit" name="submit" value="Save Data">
</form>
Your IP:<?php echo $_SERVER['REMOTE_ADDR']; ?> will be recorded!
</center>
<br />
</body>
</html>

和 writetotxt.php:

<?php
if(isset($_POST['field1']) && isset($_POST['field2'])) {
    $data = $_POST['field1'] . '-' . $_POST['field2'] . "\n";
    $ret = file_put_contents('mydata.txt', $data, FILE_APPEND | LOCK_EX);
    if($ret === false) {
        die('There was an error writing this file');
    }
    else {
        echo "$ret bytes written to file";
    }
}
else {
   die('no post data to process');
}?>

有什么想法吗?

编辑:表单地址:http://tsukino.forgewareinc.com/index.php

Edit2:所以表单无法正常工作的真正原因是由于文件所有权现已修复

【问题讨论】:

  • 首先,您是否指示 Apache 将 .html 文件视为 PHP?其次,如果这样做,您将在Index.html 中收到未定义的变量通知 - 检查文件夹和文件是否都有写入权限。错误报告会告诉你。
  • 错误日志包含与此无关的内容,甚至尝试清除我的错误日志并再次运行表单
  • 你没有回答我问题的第一个 important 部分 - .html 默认情况下不解析 PHP 指令。加上使用/tmp/ 假设您想在公共域之外写入,并且可能没有设置写入它的权限。完整的系统路径可能是 /var/usr/htdocs/public/folder/ - 所以问问自己为什么这不起作用。
  • 没有 Apache 未设置将 .html 视为 PHP 和 /tmp/ 是一个测试,我更正了帖子以显示正确的路径
  • @$REMOTE_ADDR ?不要发明新的 PHP 语法。

标签: php html forms


【解决方案1】:

看到您的页面和 HTML 源代码包含未解析的 PHP 指令,您需要将 index.html 的文件扩展名更改为 index.php 或指示 Apache 将 HTML 文件视为 PHP。

这是从您的链接中提取的 HTML 源代码:

<html>
<body>
<br />
<center>

<form action="writetotxt.php" method="POST">
    <input name="field1" type="text" />
    <input type="hidden" name="field2" value="<?php echo @$REMOTE_ADDR; ?>" />
    <input type="submit" name="submit" value="Save Data">
</form>
Your IP:<?php echo @$REMOTE_ADDR; ?> will be recorded!
</center>
<br />
</body>
</html>

注意到源代码中的 &lt;?php - ?&gt; 和 PHP 指令了吗?如果它们被正确解析,这些就不会显示出来。如果它被解析为 PHP,那么你/我会在隐藏字段中看到一个 IP 地址,以及一个未定义的 REMOTE_ADDR 变量通知。

但是,$REMOTE_ADDR 未定义。

使用三元运算符:

对于您的隐藏输入:

value="<?php echo !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : "EMPTY"; ?>"

或者没有三元运算符:

value="<?php echo $_SERVER['REMOTE_ADDR']; ?>"

在您对索引文件的回显中:

Your IP:<?php echo $remote=!empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ""; ?> will be recorded!

这是关于如何将 HTML 文件视为 PHP 的 Stack 上的文章:

将error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:只应在暂存阶段显示错误,而不是在生产阶段。

当您修复该索引文件时,您会收到未定义变量的通知。

您需要检查它们是否设置/不为空。

  • @ 符号是错误抑制器。

【讨论】:

  • 当更改为 index.php 时,它会给出 500 错误消息
  • @BlackMage 我还在编辑中对我的答案做了一些补充。您需要重新加载才能看到它们。
猜你喜欢
  • 2013-09-12
  • 2021-12-14
  • 2018-03-27
  • 2011-12-30
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
相关资源
最近更新 更多