我试图找出通过php提交表单的正确方法:
在某种程度上,我有两个问题:1具体是关于我正在处理的网站,另一个是关于表格提交的一般问题。
问题1。我使用php作为我网站的模板。所以我有一个带有页眉和页脚的index.php页面,我的所有内容都是从这样的php函数中提取的:
<article id="main">
<?php
$page = $_GET['page'];
if(empty($page)){
$page = 'home';
}
$page.='.php';
if(file_exists("pages/$page")) {
include("pages/$page");
} else {
echo "$page no exist";
}
?>
</article>
这是我用于表单的代码,我在index.php页面的head标签中使用它:
<head>
<?php
if ($_POST['submit'] && $human == '4') {
if (mail ($to, $subject, $body, $from)) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
} else if ($_POST['submit'] && $human != '4') {
echo '<p>You answered the anti-spam question incorrectly!</p>';
}
?>
</head>
和html表单代码:
<form method="post" action="index.php">
<legend>Contact Us</legend>
<fieldset>
<label>Name</label>
<input name="name" placeholder="Type Here">
<label>Email</label>
<input name="email" type="email" placeholder="Type Here">
<label>Message</label>
<textarea name="message" placeholder="Type Here"></textarea>
<label>*What is 2+2? (Anti-spam)</label>
<input name="human" placeholder="Type Here">
</fieldset>
<input id="submit" name="submit" type="submit" value="Submit">
</form>
当我提交表单时,它会刷新并将我的echo消息放入我的index.php?page =主页而不是我的index.php?page =联系页面。如何让echo保持在表单的同一页面上? (我已经尝试更改表单的action =“”部分,但似乎无法使其工作)。
问题2. 一般情况下,当我检查其他网页以查看其表单代码时,我到处都看到了这一点:
try
{
for(var lastpass_iter=0; lastpass_iter < document.forms.length; lastpass_iter++)
{
var lastpass_f = document.forms[lastpass_iter];
if(typeof(lastpass_f.lpsubmitorig2)=="undefined")
{
lastpass_f.lpsubmitorig2 = lastpass_f.submit;
lastpass_f.submit = function(){
var form=this;
var customEvent = document.createEvent("Event");
customEvent.initEvent("lpCustomEvent", true, true);
var d = document.getElementById("hiddenlpsubmitdiv");
for(var i = 0; i < document.forms.length; i++)
{
if(document.forms[i]==form)
{
d.innerText=i;
}
}
d.dispatchEvent(customEvent);
form.lpsubmitorig2();
}
}
}
}
catch(e){}
是否有人熟悉上述代码?如果是这样,是否有适当提交表单的通用脚本?
谢谢!
答案 0 :(得分:1)
我不确定你的第二个问题,但提交联系表格,你是否尝试将表格的动作设置为“index.php?page = contact”?
答案 1 :(得分:0)
您的表单需要“记住”当前页面并将其发送到:
<input type='hidden' name='page' value='<?php echo $page; ?>'>
并且脚本还应该检查当前请求是否是表单提交:
$page = (isset($_GET['page'])) ? $_GET['page'] : $_POST['page'] ;
答案 2 :(得分:0)
我认为您的表单在联系页面上?该页面基于其他地方的$_GET['page']
进行检索。刷新页面时,它会再次运行页面选择脚本。但是,由于您没有来自method=post
的表单$_GET['page']
,$_SESSION
不存在,因此根据您的代码将页面设置为home。您需要存储页面的名称;作为$_GET
变量或通过联系表单上的隐藏输入(如果您这样做,请记得将$_REQUEST
更改为{{1}}。)
答案 3 :(得分:0)
了解您的代码如何以$page = $_GET['page'];
开头?
这意味着您将发送“页面”变量作为网址的一部分。所以
将您的表单标记更改为此
<form method="GET" action="index.php?page=contact">
你应该开始看到你的期望。
方法GET告诉您的浏览器将表单数据作为一个长URL发送(因此,对用户可见),而不是POST,其中数据将被无形地发送到服务器(更加安全)。
但是你使用$ _POST来检索GET数据,所以你的其余代码将无效。
所以试试这个: 转到index.php?page = contact,它将解决您的第一个问题。