将表单字段条目写入文件的php按钮

时间:2014-12-17 02:41:21

标签: php

我有一个搜索表单,其中某人输入一个单词,并在数据库中找到(或未找到)匹配。如果没有结果,我想显示一个按钮,只是说"建议"。他们没有输入任何东西 - 只需点击按钮,他们搜索的单词就会被写入txt文件,以便我稍后查看。

这是对的吗?

<?php
$term = mysql_real_escape_string(sanitizeString($_POST['term']));
//other code for when result is found.
//if no result found:
<form name="suggestit" action="" method="post" >
    <input type="hidden" name="tb1" default="<?php echo $term; ?>" /><p>
    <input type="button" class="styled-button-11" id="bt1" value="Suggest It!" /></p>
</form>

if (isset($_POST['tb1'])) {
    echo writetermstofile();
    return;
}
function writetermstofile () {
$fp = fopen('suggestedterms.txt', 'w');
fwrite($fp, $term\n);
fclose($fp);
}
?>

我在$ fwrite中的$ term之后添加\ n因为我希望每个连续的术语都被写入(每次单击按钮)以换行。

2 个答案:

答案 0 :(得分:4)

您的代码存在一些问题。

type="button"应该是type="submit"并命名提交按钮,同时添加到条件语句中它是最好的

$term\n应该. "\n"连接\n

您的第一个?>代码还缺少结束<?php,然后表单下方缺少<?php。你不能像那样将HTML注入PHP。

然后,您需要将$term传递给您的函数。

现在,我不知道sanitizeString()做了什么,所以如果它已经为你工作了,那太好了。如果没有,我无法帮助你。

以下作品使用$term ="The term";代替您已经使用的内容进行测试(在您的查询已经有效的印象中),并且看到我无法使用数据库对其进行测试

旁注:如评论中所述,要附加到文件,请使用aa+开关。使用w开关覆盖以前的所有内容。

$fp = fopen('suggestedterms.txt', 'a+');

仅供参考:name="suggestit"表格没有名字。它位于我下面的代码中,但您可以安全地将其删除。

您还需要在表单中使用名称属性与$_POST['term']一起使用,因为没有名为name="term"的名称。{1}}。您可能打算使用$_POST['tb1']

如果不是这种情况,那么我假设你想要为搜索词本身使用输入:
<input type="text" name="term">,只需将其添加到您的表单,如果那就是您想要实现的目标。

<强>代码:

<?php
$term = mysql_real_escape_string(sanitizeString($_POST['term']));

//other code for when result is found.
//if no result found:

?>

<form name="suggestit" action="" method="post" >
    <input type="hidden" name="tb1" default="<?php echo $term; ?>" /><p>
    <input type="submit" name="submit" class="styled-button-11" id="bt1" value="Suggest It!" /></p>
</form>

<?php

 if (isset($_POST['tb1']) && isset($_POST['submit'])) {
    echo writetermstofile($term);
    return;
}
function writetermstofile ($term) {


$fp = fopen('suggestedterms.txt', 'w'); // to append use 'a' or 'a+'
fwrite($fp, $term . "\n");
fclose($fp);
}
?>

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

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

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。


脚注:

根据你写的评论&#34;文本文件被修改为777&#34;

文本文件应该chmod到644而不是777.它更安全。

答案 1 :(得分:1)

  

然而,它仍然没有写任何文件。

当然,因为你在文件中写了变量$term,在你的情况下是:

$term = mysql_real_escape_string(sanitizeString($_POST['term']));

但$ _POST ['term']未在表单上下文中定义。 可能是您需要以这种方式编写的第一个输入,以便通过浏览器发送$ _POST ['term']:

<input type="hidden" name="term" value="<?php echo $term; ?>" />

并确保第二个input代码与type='submit'

一致