PHP包括让整个页面出现?

时间:2014-10-08 04:38:38

标签: php html

好的,我的代码很简单:

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

我想只显示$name,但显示整个'formvalidation.php'

我该如何解决?

6 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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;

答案 2 :(得分:0)

它将执行formvalidation.php中的任何内容。所有include函数都基本上用所包含文件的内容替换该行。

因此,如果您不想显示该文件中的内容,请将整个文件包含在函数或多个函数中。这是您的库文件(包括)的方式。该文件中的任何内容都不应位于函数定义之外。

示例(这是一个糟糕的编程习惯,但是例如) -

formvalidation.php是 - &gt;

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

包含它时,所有内容都会显示出来。

formvalidation.php now - &gt;

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

现在我改变文件的方式 - 在调用validate_form()之前不会打印任何内容;

这有意义吗?

答案 3 :(得分:0)

formvalidation.php的整个HTML内容将出现在屏幕上(所以<?php ?>之外的所有内容就像所有包含文件的输出(echo etc ...)一样会出现在屏幕上。

您可以通过删除输出并仅将函数和变量声明放入包含的文件formvalidation.php中来避免这种情况。

formvalidation.php的内容可以是例如。是:

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

答案 4 :(得分:0)

正如其他人所说,那是什么包括在内。我假设您在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;

答案 5 :(得分:0)

  

&#34;我希望在按下按钮后,我写的功能将执行以检查输入,然后如果输入正确,它将重定向到另一个页面,它可以显示输入。&#34;

如果您希望在提交表单后重定向并在之后显示名称,则需要使用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

N.B。:确保<?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'];为例,因为您没有提供有关您的superglobal变量名称的附加代码。