PHP include()问题

PHP include()问题,php,include,Php,Include,我正在尝试做一些简单的表单验证,以确保输入的内容不会超过某个字符限制,但似乎无法使其正常工作。当我尝试运行此代码时: $str = "?id="; $id = $_POST['ID']; if (strlen($_POST['fname']) > 1) { $message = "Character cannot be more than..."; include 'edit.php' . $str . $id; exit(); } 我得到这个错误: Warni

我正在尝试做一些简单的表单验证,以确保输入的内容不会超过某个字符限制,但似乎无法使其正常工作。当我尝试运行此代码时:

$str = "?id=";
$id = $_POST['ID'];

if (strlen($_POST['fname']) > 1) {
    $message = "Character cannot be more than...";
    include 'edit.php' . $str . $id;
    exit();
}
我得到这个错误:

Warning: include(edit.php?id=97) [function.include]: failed to open stream: No such file or directory in /Applications/MAMP/htdocs/update.php on line 15

Warning: include() [function.include]: Failed opening 'edit.php?id=97' for inclusion (include_path='.:/Applications/MAMP/bin/php/php5.3.6/lib/php') in /Applications/MAMP/htdocs/update.php on line 15

从我读到的内容来看,它实际上是在查找文件
edit.php?id=97
,而不是查找
edit.php
并附加id。我不知道该怎么办。有什么建议吗?提前感谢。

您不能以您正在尝试的方式包含文件。尝试删除id=x部分,它应该仍然可以工作。

包含文件只是一个文件,不是HTTP请求,因此GET参数在该上下文中没有意义。如果需要,您可以在该include中访问
$id
$str


如果您的
php.ini
已启用(,默认情况下已禁用),您可以通过HTTP(使用有效协议启动字符串)进行包含,但我不建议这样做。

您不能
包含带有HTTP查询参数的本地文件

我猜,你想做一个标题重定向

header(sprintf('Location: http://your-domain.com/edit.php?id=%d', $id));
exit;
除此之外,我发现在处理表单时遵循此工作流要容易得多:

  • 获取表单页面。表单操作是同一页
  • 发布表单数据。检测POST方法并验证结果
  • 如果有效,重定向到成功页面。如果不是,则使用通知/标志重新显示表单

  • 如果你真的想那样做

    if (strlen($_POST['fname']) > 1) {
        $message = "Character cannot be more than...";
        echo file_get_contents('http://example.com/edit.php'.$str.$id.'&message='.$message);
        exit();
    }
    
    但是像这样试试

    if (strlen($_POST['fname']) > 1) {
        $message = "Character cannot be more than...";
        include_once 'edit.php';
        exit();
    }
    

    或者在您的包含文件中告诉我们您真正想要做什么…

    include('edit.php');
    
    在edit.php的内部:

    $id = $_POST['id'];
    

    $str
    $id
    的值是什么?为什么在提问之前不阅读<代码>示例#3 include()通过HTTP
    我读过,似乎不起作用。变量已经传递(实际上来自edit.php的代码被传递到父脚本),不需要这样做。我想这会使edit.php更具可重用性,而不是通过包含脚本来设置id变量。如果他要这样做,他也必须传递
    $message
    。此外,这可能有用:@Mark可以使用flash messenger模式(一次性会话消息),但如前所述,我更喜欢在同一个文件中处理表单处理,如果无效,只需重新显示,这将使
    $message
    可用。如果无效,加载回页面的唯一问题是“是否确实要重新发送POST数据“如果某些用户通过刷新/后退/前进等方式进入该对话框,可能会让他们感到困惑。@alex如果无效,我不会重新加载该页面,这都是POST请求的一部分。@alex:我想他的意思是,如果表单无效,他会将表单发回同一页面,如果表单有效,他会将表单重定向到其他页面。”。如果用户在填写表格时按下“刷新”,这是他们自己的愚蠢错误。不起作用。我需要它返回到一个显示id所包含内容的页面。第一个调用了它,但不会显示错误消息($message)。