2014-10-08 3 views
-2

Хорошо, мой код прост:PHP включает создание всей страницы?

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

Я хочу сделать только $name появляются, но весь 'formvalidation.php' показывает вверх.

Как это исправить?

+0

Если включенный файл содержит теги html, он будет указан на странице с уверенностью. – Jenz

+0

используйте сеанс или сообщение, иначе вы столкнетесь с той же проблемой, поскольку в нем содержится html – divakar

+0

Вы можете дать Ajax попробовать, это будет вашим лучшим выбором. –

ответ

0

«Я хочу, чтобы после того, как я нажал на кнопку, функцией я написал будет преобразование приложений для проверки ввода, а затем, если входной сигнал является правильным, он будет перенаправлять на другую страницу, которая может отобразить ввод. "

Если вы хотите перенаправить после того, как форма была представлена ​​и показать имя впоследствии, вам нужно будет использовать 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']; в качестве примера, так как вы еще не указали дополнительный код в отношении переменной superglobal для имени.

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. Вся функция include делает это в основном заменяет эту строку содержимым вашего включенного файла.

Так что если вы не хотите показывать то, что находится в этом файле, заключите весь файл в функцию или несколько функций. Именно так должны быть файлы вашей библиотеки (которые вы включаете). Ничто в этом файле не должно быть за пределами определения функции.

Пример (это дерьмовый практика программирования, но, к примеру) -

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

Весь контент HTML из formvalidation.php будет появляться на экране (так все вне <?php ?> так же, как все выходы (эхо и т.д. ...) включаемого файла будет появляться на экране.

Вы можете избежать этого путем удаления выходов и только ввод функций и объявления переменных в прилагаемом файле formvalidation.php

Содержание моей formvalidation.php может быть, например:..

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

Как уже говорили другие , tha t, что включает. Я предполагаю, что вы определяете $name внутри файла formvalidation.php, и именно поэтому вы его включаете.

Правильным решением здесь будет разделение кода в 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; 
Смежные вопросы