我有一个搜索表单,其中某人输入一个单词,并在数据库中找到(或未找到)匹配。如果没有结果,我想显示一个按钮,只是说"建议"。他们没有输入任何东西 - 只需点击按钮,他们搜索的单词就会被写入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因为我希望每个连续的术语都被写入(每次单击按钮)以换行。
答案 0 :(得分:4)
您的代码存在一些问题。
type="button"
应该是type="submit"
并命名提交按钮,同时添加到条件语句中它是最好的。
$term\n
应该. "\n"
连接\n
您的第一个?>
代码还缺少结束<?php
,然后表单下方缺少<?php
。你不能像那样将HTML注入PHP。
然后,您需要将$term
传递给您的函数。
现在,我不知道sanitizeString()
做了什么,所以如果它已经为你工作了,那太好了。如果没有,我无法帮助你。
以下作品使用$term ="The term";
代替您已经使用的内容进行测试(在您的查询已经有效的印象中),并且看到我无法使用数据库对其进行测试
旁注:如评论中所述,要附加到文件,请使用a
或a+
开关。使用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'