2014-10-08 109 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;