2014-09-04 3 views
0

Итак, я просмотрел другие темы, но не нашел решение, которое сработало для меня. Вот моя проблема: У меня две страницы php: http://codepad.org/VhblM76K и http://codepad.org/W9bz8L3E.неожиданный идентификатор сеанса php

На первой странице предполагается получить информацию из формы, найти ее в базе данных, сохранить ее в переменной $_SESSION['$dataArray'] и отправить ее на вторую страницу.

На второй странице я получаю информацию в JavaScript из PHP с json_encode, который дает ошибку:

Uncaught SyntaxError: Unexpected token < result.php:20. 

Когда я смотрю в источнике в хроме он говорит:

var schoolData = <br /> 
<b>Notice</b>: Undefined index: $dataArray in <b>C:\xampp\htdocs\highschools.bg\result.php</b> on line <b>23</b><br /> 
null; 

Как это неопознанный индекс, когда я могу перейти только на вторую страницу после посещения первого, где я оцениваю значение $_SESSION['$dataArray'].

Как это исправить? Я написал session_start() на обеих страницах, и он не работал для меня. Мне нужна переменная schoolData, чтобы отобразить информацию на странице.

+0

Вы знаете, что вам не нужно добавлять ключи массива к '$'? $ _SESSION [ 'DataArray'] '. Кроме того, вашей кнопке ввода введите атрибут 'name =" submit ". Он имеет значение, но не имя, поэтому он не представлен как атрибут данных формы. Кроме того, где ваше перенаправление на вторую страницу?Я не вижу ничего, что перенаправляется на первой странице? –

+0

Я не знал этого, спасибо. Исправлено имя на кнопке. В форме у меня есть action = "result.php", который перенаправляется на вторую страницу. –

+0

В этом случае, если вы перенаправляетесь на свою вторую страницу после нажатия на форму, данные сеанса вообще не устанавливаются. Вам нужно перенаправить на одну и ту же страницу, а затем в 'if (isset ($ _ POST ['submit'])) условно, вам нужно поставить туда переадресацию в конце. –

ответ

0

причина, почему вы получаете ошибку, потому что вы не устанавливать какие-либо данные сеанса, потому что вы перенаправляете непосредственно на вторую страницу из формы.

Вам необходимо обновить форму, чтобы он перенаправляет обратно на ту же страницу форма находится на, а затем заменить PHP код следующим образом:

if (isset($_POST['submit'])) { 

    $user = 'root'; 
    $pass = ''; 
    $db = 'highschools'; 

    $con = mysqli_connect('localhost', $user, $pass, $db) or die("Unable to connect"); 
    if (mysqli_connect_errno()) { 
     echo("Failed to connect to MySQL: " . mysqli_connect_error()); 
    } 

    $givenCity = $_POST['city']; 
    $givenClass = $_POST['class']; 
    $givenName = $_POST['name']; 
    $result = mysqli_query($con, 
     "SELECT * FROM highschools WHERE name like '%$givenName%' AND city like '%$givenCity%' AND class like '%$givenClass%'; ") or die(mysqli_error($con)); 

    $row_count = mysqli_num_rows($result); 

    $_SESSION['dataArray'] = array(); 
    while($row_count > 0) { 
     $curRow = mysqli_fetch_array($result); 
     $_SESSION['dataArray'][] = $curRow; 
     $row_count--; 
    } 

    header('location: http://YOUR_SECOND_PAGE_ADDRESS'); 

Обратите внимание, единственная линия Я добавил это последняя строка, hedaer('location: ... ');

Не забудьте изменить http://YOUR_SECOND_PAGE_ADDRESS на фактический адрес вашей второй части кода.

Затем на второй странице, замените $_SESSION['$dataArray'] с $_SESSION['dataArray']

и он должен работать.

+0

Мне жаль, но я новичок в php, так что расположение заголовка должно выглядеть как некоторые из них: header ('location: result.php'); или заголовок ('location: http: //localhost/highschools.bg/result.php'); ? Никто из них не работает для меня по какой-то причине. –

+0

Я разместил код на том же сайте, который вы опубликовали, это должна быть ваша первая страница: http://codepad.org/ghZRtiog, и это должно быть ваше второе (result.php): http://codepad.org/ wbrGYsh5 Оба файла должны находиться в одном каталоге. –

+1

Большое спасибо за помощь! Я использовал ваш код, и он выполнил эту работу! –

0

Ваша проблема заключается в том, что вы пишете сеанс как $_SESSION['$dataArray']. Если у вас есть переменная где-то под названием $dataArray, то вам нужно написать ее $_SESSION[$dataArray].

В качестве альтернативы, если у вас нет переменной с именем $dataArray, вам необходимо написать ее как $_SESSION['dataArray'].

EDIT: Попробуйте print_r($_SESSION) под session_start() в верхней части страницы и посмотреть, если вы установили, что $_SESSION['dataArray']:

<?php 
    session_start(); 
    // See if the session contains your $_SESSION['dataArray'] 
    // If not, you can force it to have a default value to avoid errors 
    print_r($_SESSION); 
    $_SESSION['dataArray'] = (isset($_SESSION['dataArray']))? $_SESSION['dataArray']:array(); ?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Намерени училища</title> 
     <meta charset="utf-8"> 
     <link rel="stylesheet" type="text/css" href="styles/main.css"> 
    </head> 
    <body> 
     <div id="contentWrapper" style="height:1000px;"> 
      <header id="pageHeader"> 
      </header> 
      <section id="schoolsContainer"> 
       <ul id="schoolsList"></ul> 
      </section> 
     </div> 

     <script type="text/javascript" src="handlebars-v2.0.0.js"></script> 
     <script type="text/javascript" src="navTemplate.js"></script> 
     <script type="text/javascript"> 
      var schoolData = <?php echo json_encode($_SESSION['dataArray']) ?>; 
      for (var i = 0; i < schoolData.length; i++) { 
       console.log(schoolData[i]['name']); 
       console.log(schoolData[i]['id']); 
      } 
     </script> 


    </body> 
</html> 

На другой странице, это также должно быть установлено, прежде чем он работает:

$_SESSION['dataArray'] = array(); 
     while($row_count > 0) { 
       $curRow = mysqli_fetch_array($result); 
       $_SESSION['dataArray'][] = $curRow; 
       $row_count--; 
     } 
+0

Спасибо за ответ! У меня нет переменной с именем $ dataArray, поэтому я удалил знак доллара из индексов. Однако это не исправило. Теперь он говорит: Неопределенный индекс: dataArray. –

+0

Позвольте мне подробнее изучить ваш код. Тогда это позаботилось только об одной ошибке. – Rasclatt

+0

Так что я сделал все. Когда я дал ему значение по умолчанию, которое избавилось от ошибки, но оно просто создало пустой массив, чего я не хотел. Поэтому я переместил весь код php на вторую страницу и, похоже, сейчас работает. Я не хотел, чтобы все было в одном месте, но похоже, что так оно и будет. Еще большое спасибо за помощь. –

Смежные вопросы