2015-02-04 5 views
0

У меня есть две страницы, которые мне нравятся для обмена переменной. на первой странице у меня есть форма, как это:php session variable undefine index

<form method='post' action='rehabCreate2.php' onsubmit='return validateForm();'> 
<input class="textbox" type='text' id='txt_stuNum' name='txt_stuNum'/ required> 

<input type="submit" value="NEXT" id="btnNext"> 
</form> 

затем я установить переменную сеанса, как это:

if (isset($_POST['btnNext'])){ 
$stuId=$_POST['txt_stuNum']; 

$_SESSION["stuId"]=$stuId; 
} 

то в моем page2 я хочу к нему:

<?php 
session_start(); 

$stuId=$_SESSION["stuId"]; 

echo $stuId; 

?> 

но это дает мне ошибку:

Примечание: Неопределенный индекс: stuId in ...

Что мне не хватает? и еще одна вещь, как я могу сделать кнопку «назад», и значения все еще там?

EDIT: первоначально мой «session_start()» было место на вершине page1, но когда я передать его ниже моего «» сообщение шоу эта ошибка: Warning: session_start(): Не удается отправить ограничитель сессии кэш - уже отправленные заголовки (вывод начинается с C: \ xampp \ htdocs \ cerecare \ portal \ somepage.php: 176) в C: \ xampp \ htdocs \ cerecare \ portal \ rehabCreate.php в строке 16

кстати : строка 176 некоторой страницы - это конец тега сценария, и больше ничего не следует

+0

вам не хватает $ _SESSION ["stuId"] = false; или что-то еще на стр. 1, когда пост не установлен – donald123

+1

, вы забыли 'session_start();' на странице обработки '$ _POST'? – Ejaz

+1

Создает ли страница, задающая переменную сеанса, 'session_start()'? –

ответ

1

Сначала замените (укажите имя attr для отправки кнопки, чтобы войти в POST)

<input class="textbox" type='text' id='txt_stuNum' name='txt_stuNum'/ required> 
<input type="submit" value="NEXT" id="btnNext"> 

в

<input class="textbox" type='text' id='txt_stuNum' name='txt_stuNum' required /> 
<input type="submit" value="NEXT" id="btnNext" name="btnNext"> 

Добавить session_start() на page1

session_start(); 
if (isset($_POST['btnNext'])){ 
    $stuId=$_POST['txt_stuNum']; 
    $_SESSION["stuId"] = $stuId; 
} 

Затем добавить проверку на значение сессии существует или нет на page2

$stuId=(isset($_SESSION["stuId"]) ? $_SESSION["stuId"] :''); 
+0

'session_start()' всегда должна быть первой строкой кода. В противном случае вы можете отправить что-то на вывод, и вы получите сообщение об ошибке. – machineaddict

+0

может быть, если какой-либо вывод не отправляется до обновления BTW. –

+0

Кроме того, как указал Нес, кнопка отправки не имеет имени, поэтому код в состоянии if никогда не будет выполнен. – machineaddict

0

Вы забыли добавить имя для кнопки отправки, но, кроме того, каждый раз, когда вы используя любую переменную, будь то сессия или локальная переменная, просто убедитесь, что она существует или нет. поэтому, чтобы спасти себя от этой проблемы, всегда используйте этот стиль кода, данный @Rakesh Sharma.

$var = isset($_SESSION['any_var']) ? $_SESSION['any_var'] : ''; 

или лучший способ, чтобы выполнить проверку и уменьшить вычисление ошибки использовать как этот

$var = (isset($_SESSION['any_var']) && !empty($_SESSION['any_var']) ? $_SESSION['any_var'] : ''; 

В заявлениях также всегда используют этот стиль

if (isset($_SESSION['any_var']) && !empty($_SESSION['any_var'])){ 
    /// code in statement 
} 

использовать этот стиль кода всегда в вашем кода и бесплатной платы, по крайней мере, от неопределенной ошибки индекса и ошибок вычисления, если значение пусто.