2014-10-08 111 views
-2

好了,我的代码很简单:PHP包括让整个页面出现?

<?php include 'formvalidation.php'; 
echo $name; ?> 

我要让只有$name出现,但整个'formvalidation.php'显示出来。

我该如何解决这个问题?

+0

如果包含的文件包含html标签,它肯定会显示在包含页面中。 – Jenz 2014-10-08 04:39:59

+0

使用会话或帖子,否则你将面临同样的问题,因为它包含html – divakar 2014-10-08 04:41:58

+0

你可以尝试Ajax,这将是你最好的选择。 – 2014-10-08 04:50:33

回答

0

“我想后,我按下按钮,我写的功能将被EXCUTE检查输入,然后如果输入的是正确的,它会重定向到另一个页面,该页面可以显示输入。“

如果希望在表单提交后重定向事后表现出的名字,你将需要使用sessionsheader

下面是一个例子,(参见代码中的注释)内formvalidation.php加入:

<?php 
session_start(); 

// all other codes you already have 

$name = "John"; // this is an example 
// replace above with your POST variable 
// such as $name = $_POST['name']; 

$_SESSION['showname'] = $name; 

header("Location: your_other_file.php"); 

exit; // keep this 

NB:确保没有别的上面<?php session_start();如您的形式,因为这会引发警告,说明Headers already sent...

your_other_file.php

<?php 
session_start(); 

if(isset($_SESSION['showname'])){ 

    $name = $_SESSION['showname']; 

    echo $name; 

} 

$name = "John"; // this is an example

在上面的代码替换您的POST变量。 例如$name = $_POST['name'];作为一个例子,因为你还没有提供关于你的名字变量是什么的附加代码。

0

您可以使用会话功能调用变量而不是包含页面,因为它确实会加载整个页面。请更具体地了解你的目标,也许我们可以通过了解更多来帮助更多。

0

当你使用include 'someFile.php';这就像你正在将该文件的所有内容粘贴到代码中。例如,如果我有:

someFile.php

echo '<h1>Hello World</h1>'; 
echo '<p>I like pie</p>'; 

则:

include 'someFile.php'; 
echo $name; 

是一样的:

echo '<h1>Hello World</h1>'; 
echo '<p>I like pie</p>'; 
echo $name; 
0

这将执行在formvalidation无论是.PHP。所有包含函数都基本上用你的包含文件的内容替换那行。

因此,如果您不想显示该文件中的内容 - 将整个文件放入一个函数或多个函数中。这是你的图书馆文件(你包含的)应该的方式。该文件中的任何内容都不应该在函数定义之外。

实施例(这是一个蹩脚编程实践,但例如) -

formvalidation.php是 - >

<?php 
    echo "hola"; 
    if ($i = 5) { 
     echo 15; 
    } 
?> 
<form><input type="text" value= "10"/> 
<?php 
    echo "macho, macho man."; 
?> 

一切变得所示,当我包括它。现在

formvalidation.php - >

<?php 
    function validate_form() { 
    echo "hola"; 
    if ($i = 5) { 
     echo 15; 
    } 
?> 
<form><input type="text" value= "10"/> 
<?php 
    echo "macho, macho man."; 
    } 
?> 

现在我已经修改了文件的方式 - 那什么事都打印,直到我叫validate_form();

这有道理吗?

0

formvalidation.php的整个HTML内容会在屏幕(的<?php ?>之外,所以一切就像所有的输出上(回声等)所包含的文件会在屏幕上。

您可以通过删除输出和仅把功能和变量声明为包含的文件formvalidation.php避免

formvalidation.php能如的内容是:。

<?php 
$name = 'test'; 
?> 
0

正如其他人所说,tha t包括什么。我假设你在formvalidation.php文件中定义了$name,这就是你包含它的原因。

这里的正确解决方案是将formvalidation.php中的代码分隔成一个执行数据处理的函数/类/文件,另一个创建输出。在您包括/电话只有第一个在情况下,你不希望输出

但是,它可以捕获输出,然后丢弃它,使用输出缓冲:

<?php 
ob_start(); //Start capturing output 
include 'formvalidation.php'; 
ob_end_clean(); // Stop capturing output and discard whatever was captured 
echo $name; 
?> 

那说我真的不是推荐这个。解决这个问题的建议方法是将您的后端代码与输出生成代码分开,并只在任何给定情况下调用实际需要的内容。

编辑

如何独立问题的一个例子正常可能是由以下。

让我们假设你目前formvalidation.php是一样的东西:

<?php 
$name = $_REQUEST['name']; 
if('' == $name){ ?> 
    <p class="error">You must supply a name</p> 
    <form action="foo.php"> 
     <input name="name" /> 
     <button type="submit">Submit</button> 
    </form><?php 
} else { 
    echo '<p>Form valid!</p>'; 
} 

在一个新的文件validator.php你可以这样做:

<?php 
class MyValidator{ 
    public $name; 

    function read_data(){ 
     $this->name = $_REQUEST['name']; 
    } 

    function validate(){ 
     if('' == $name){ ?> 
      <p class="error">You must supply a name</p> 
      <form action="foo.php"> 
       <input name="name" /> 
       <button type="submit">Submit</button> 
      </form><?php 
     } else { 
      echo '<p>Form valid!</p>'; 
     } 
    } 
} 

然后你改变你formvalidtion.php到

<?php 
require_once 'validator.php'; 
$val = new MyValidator(); 
$val->read_data(); 
$val->validate(); 

虽然上面的文件变成了

<?php 
require_once 'validator.php'; 
$val = new MyValidator(); 
$val->read_data(); 
echo $val->name;