6-7小时,我一直在用这个问题燃烧我的脑袋,但找不到问题或解决方案。HTML表单不能正确提交使用PHP
我一直在我的服务器上的多步注册表单工作,我必须将它移动到一个专用的Windows服务器与PHP 5.2.17和Apache 2.2。
问题是,在这个新的环境中,它不能按预期工作。我的脚本的逻辑是下面的(这是在我的文件的顺序):
- 创建我3点形式的对象(用方法=交和行动=相同的文件)
- 验证每个窗体,并且如果true将输入的数据放入会话中,然后执行
header("location: {$_SERVER['PHP_SELF']}?page=the_next_step");
- 开始显示页面并取决于
$_REQUEST['page']
,呈现必要的表单对象(如果页面呈现表单1没有值,如果page = 2呈现表单的值2等)。
在IE中,例如,当我填写第一个表格并提交时,它甚至不会接受验证if语句。
在firefox中,我可以通过步骤,但在地址栏中看不到我的查询字符串(page = 2,page = 3)。
任何想法可能是什么问题?
是否有任何设置必须在服务器上的php/apache完成? GET或POST或提交数据有问题吗? 而且我看到一个非常奇怪的事情:我的页面的源代码正在呈现在<framesets>
。
运行PHP 5.2.17 + Apache 2.2的Windows 2008 Server的
好了,经过一些调查研究,我发现,我可能有一些做与会议。 我看到,在IE会话不工作,正在被销毁。 这是代码:
<?php
session_start();
if (!isset($fv)) $fv = &$_SESSION['rgform']['page1'];
if (!isset($fv1)) $fv1 = &$_SESSION['rgform']['page2'];
if (!isset($fv2)) $fv2 = &$_SESSION['rgform']['page3'];
现在我创造我的对象现在
if ($form->validate())
{
$_SESSION['rgform']['page1'] = $_POST;
header("location: {$_SERVER['PHP_SELF']}?page=step2");
}
if ($form2->validate())
{
$_SESSION['rgform']['page2'] = $_POST;
header("location: {$_SERVER['PHP_SELF']}?page=step3");
}
if ($form3->validate())
{
$_SESSION['rgform']['page3'] = $_POST;
header("location: {$_SERVER['PHP_SELF']}?page=step4");
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- load my css, js etc -->
<body>
if(!isset($_REQUEST['page']))
{
$form->render('custom-template.php');
}
elseif($_REQUEST['page']== "step2" && $_SESSION['rgform']['page1']['pagename']== "part_det") // on each form i have an hidden input with the name "pagename" and different value
{
$form2->render('custom-template-2.php');
}
elseif($_REQUEST['page']== "step3" && $_SESSION['rgform']['page2']['pagename']=="comp_det")
{
$form3->render('custom-template-3.php');
}
elseif($_REQUEST['page']== "step4" && $_SESSION['rgform']['page3']['pagename']== "buss_det")
{
echo "Thanks!!";
session_destroy();
}
</body>
</html>
,我告诉你,我打印的页面上的我的会议,当我点击提交所有POST数据应写在会话中,但不知何故,这是不工作的IE浏览器,这就是为什么我可以去和呈现形式2.
另一个有趣的事情是,我无法看到地址栏中的查询字符串我的浏览器,即使在表格1验证后,我的确如此:header("location: {$_SERVER['PHP_SELF']}?page=step2");
这是服务器设置问题吗?
请问您可以添加一些代码,以便我们可以看到您现在拥有的东西。也放入正在呈现的HTML将是有帮助的 –
我认为你正在使用短打开标签** <?**但你没有在php.ini中打开它 – ncank
如果你不能解决它看着代码,我们怎么会没有看到它? – vascowhite