所以我调查了其他线程,但没有找到适合我的解决方案。 这是我的问题: 我有两个php页面: http://codepad.org/VhblM76K和 http://codepad.org/W9bz8L3E
第一页应该从表单中获取信息,在数据库中查找,将其存储在变量$_SESSION['$dataArray']
中并将其发送到第二页。
在第二页上,我使用json_encode从php获取javascript中的信息,这会出错:
Uncaught SyntaxError: Unexpected token < result.php:20.
当我查看chrome中的来源时,它说:
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 :(得分:0)
您的问题是您正在以$_SESSION['$dataArray']
编写会话。如果你有一个名为$dataArray
的变量,那么你需要把它写成$_SESSION[$dataArray]
。
或者,如果您没有名为$dataArray
的变量,则需要将其写为$_SESSION['dataArray']
。
编辑:
在页面顶部的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--;
}
答案 1 :(得分: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']
它应该有用。