好了,我的代码很简单:PHP包括让整个页面出现?
<?php include 'formvalidation.php';
echo $name; ?>
我要让只有$name
出现,但整个'formvalidation.php'
显示出来。
我该如何解决这个问题?
好了,我的代码很简单:PHP包括让整个页面出现?
<?php include 'formvalidation.php';
echo $name; ?>
我要让只有$name
出现,但整个'formvalidation.php'
显示出来。
我该如何解决这个问题?
“我想后,我按下按钮,我写的功能将被EXCUTE检查输入,然后如果输入的是正确的,它会重定向到另一个页面,该页面可以显示输入。“
如果希望在表单提交后重定向事后表现出的名字,你将需要使用sessions和header。
下面是一个例子,(参见代码中的注释)内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'];
作为一个例子,因为你还没有提供关于你的名字变量是什么的附加代码。
您可以使用会话功能调用变量而不是包含页面,因为它确实会加载整个页面。请更具体地了解你的目标,也许我们可以通过了解更多来帮助更多。
当你使用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;
这将执行在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();
这有道理吗?
formvalidation.php的整个HTML内容会在屏幕(的<?php ?>
之外,所以一切就像所有的输出上(回声等)所包含的文件会在屏幕上。
您可以通过删除输出和仅把功能和变量声明为包含的文件formvalidation.php避免
formvalidation.php能如的内容是:。
<?php
$name = 'test';
?>
正如其他人所说,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;
如果包含的文件包含html标签,它肯定会显示在包含页面中。 – Jenz 2014-10-08 04:39:59
使用会话或帖子,否则你将面临同样的问题,因为它包含html – divakar 2014-10-08 04:41:58
你可以尝试Ajax,这将是你最好的选择。 – 2014-10-08 04:50:33