好了,我的代碼很簡單: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