【问题标题】:PHP includes and POSTPHP 包含和 POST
【发布时间】:2010-12-04 10:24:29
【问题描述】:

我正在开发一个网站,并试图在不重复使用 mod_rewrite 的情况下创建友好的 URL(因为我的客户服务器可能不允许这样做),我想出了这个系统:

index.php 需要一个名为 $seccion 的变量,它应该包含到具有特定部分的第二个文件的相对路径。这样我把静态的东西(页眉、页脚、侧边栏)都保存在 index.php 中,唯一改变的是中间的东西。

然后,如果你去 /signup 只有一个 index.php 有:

<? $seccion = 'signup.php'; @include '../index.php'; ?>

该 URL 将是 www.root.com/signup,但它实际上将包括 www.root.com/index.php 并在中心区域加载 www.root.com/signup.php。

这种安排也意味着每次我需要链接到一个文件时,我都必须使用绝对 URL。

问题是现在由于某种原因 POST 似乎无法正常工作。假设我在 www.root.com/signup 中有一个表单,并且操作是 www.root.com/welcome,它应该通过 POST 发送输入。好吧,信息永远不会通过。 PHP 返回 $_POST = Array( )

有什么想法吗?

edit:我忘了提到我之前在开发中已经遇到过同样的问题,我当时的解决方案是使用 ajax,并通过 jQuery 发送 POST 请求。这是一个优雅的解决方案,但不是我一直想要的。

【问题讨论】:

  • 您的设置似乎不是问题所在。如果您将数据直接发布到 /welcome.php 会发生什么?
  • 我会试一试,但我仍然需要将welcome.php 嵌入到index.php 中。正如我所说,index.php 包含所有静态内容。

标签: php post include friendly-url


【解决方案1】:

试试这个。这将允许您将一页作为模板。设置所有其他页面,包括您的模板。然后允许您在页面内进行 POST。

文件:_design.php

<html>
<head>
<title>Site</title>
</head>
<body>
<?php include $file; ?>
</body>
</html>

文件:index.php

<?php
$file = 'pg/index.php'; // this gets content
include $file;
?>

文件:pg/index.php

<?php
if(isset($_POST)){
echo '<pre>';
print_r($_POST);
echo '</pre>';
}
?>
<form action="?" method="post">
Name: <input type="text" name="name" />
<input type="submit" value="Send" />
</form>

【讨论】:

  • 不确定我是否理解,但据我所知,这就是我现在所拥有的:\
  • 我已经在 centos 中用 apache 和 windows 用 iis 测试了上面的内容,它对我有用。我同意下面的人;你有任何 mod_rewrite 设置吗?这可能会扼杀帖子。
  • 我没有,我的客户服务器也不会拥有它:(
【解决方案2】:

前几天晚上我和一个在他的 Windows 机器上安装 PHP 的朋友遇到了类似的问题。

由于某种原因,他的简单表单没有将帖子或获取数据传递给他的 PHP 脚本。他的代码没有任何问题,这与 PHP 或 Apache 设置有关。在他安装 Aptana 并使用它的内部服务器后,表单可以正常工作。

首先尝试测试一个简单的表单,并确保 _POST 数据实际上是由 PHP 获取的。

【讨论】:

  • 我在 XAMPP 上。不幸的是,我不知道如何或没有时间切换服务器软件或配置这个软件。但是,_POST 会被提取,但前提是发送者和接收者是同一页。
【解决方案3】:

听起来像是在某个地方进行重定向之类的其他事情-您是否有任何正在使用的 mod_rewrite 规则可能会将“路径/”重定向到“路径”或类似的东西? Firebug for Firefox 将在 NET 选项卡中显示所有重定向。

无论如何,我建议您放弃此方法,而是使用路由器来处理您的请求。如果您查看MicroMVCCodeIgniter 或大多数其他 MVC 框架,您会发现它们使用单​​个 index.php 文件,该文件传递了一个 URL (/blog/read/45) 并从那里使用一个路由文件知道加载“blog.php”文件并调用“read(45)”或(blog->read(45))。

【讨论】:

  • 没有 mod_rewrite 规则。是的,我想我将不得不放弃这种方法来做别的事情,尽管这个想法不必重写我的整个结构。我会看看那些框架。
猜你喜欢
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 2012-05-18
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多