2016-11-27 292 views
0

我正试图用下拉列表来构建一个简单的表格来查询我的数据库(专为课后计划的图书馆设计)。这个想法是,下拉列表由书籍或学生的姓名填充,以便当您选择姓名和提交时,数据库将使用表中匹配的外键选择详细信息。注意:未定义的索引:变量

问题是,每当我打开的形式,我得到的表格上面的这些线路的几个副本:

注意:未定义指数:ID在E:\ XAMPP \ htdocs中\ CMPS \图书馆\查询\的index.php上线88

注意:未定义指数:名E:\ XAMPP \ htdocs中\上线CMPS \图书馆\查询\的index.php 88

注意:未定义指数:ISBN在E: \ XAMPP \ htdocs \ CMPS \ Library \ query \ index.php on line 104

注意:未定义指数:标题E:上线104

同样\ XAMPP \ htdocs中\ CMPS \图书馆\查询\的index.php,每个下拉列表中的任一说

注意:未定义指数:名称E:上线20

通知\ XAMPP \ htdocs中\ CMPS \图书馆\查询\ searchform.html.php:U ndefined指数:标题在E:\ XAMPP \ htdocs中\ CMPS \图书馆\查询\ searchform.html.php上线30

的index.php

<?php include_once 
'../includes/helpers.inc.php'; 

require_once '../access.inc.php'; 

if (!userIsLoggedIn()) 
{ 
    include '../login.html.php'; 
    exit(); 
} 

if (!userHasRole('Verified')) 
{ 
    $error = 'Only verified accounts may access this page.'; 
    include '../accessdenied.html.php'; 
    exit(); 
} 

if (isset($_GET['action']) and $_GET['action'] == 'search') 
{ 
    include '../includes/db.inc.php'; 

    $select = 'SELECT CONCAT_WS(\' \', student.First, student.Last) as Name, book.Title, checkout.Checked, checkout.Due'; 
    $from = ' FROM checkout, student, book'; 
    $where = ' WHERE student.ID = checkout.StudentID AND book.ISBN = checkout.BookISBN'; 

    $placeholders = array(); 

    if ($_GET['student'] != '') 
    { 
    $where .= " AND checkout.StudentID = :studentid"; 
    $placeholders[':studentid'] = $_GET['student']; 
    } 

    if ($_GET['book'] != '') 
    { 
    $where .= " AND checkout.BookISBN = :bookisbn"; 
    $placeholders[':bookisbn'] = $_GET['book']; 
    } 

    if (isset($_POST['ongoing']) && $_POST['ongoing'] == 'Yes') 
    { 
    $where .= " AND Ongoing = 1"; 
    } 

    try 
    { 
    $sql = $select . $from . $where; 
    $s = $pdo->prepare($sql); 
    $s->execute($placeholders); 
    } 
    catch (PDOException $e) 
    { 
    $error = 'Error fetching checkouts.'; 
    include 'error.html.php'; 
    exit(); 
    } 

    foreach ($s as $row) 
    { 
    $checkouts[] = array('Name' => $row['name'], 'book.Title' => $row['title'], 
         'Checked' => $row['checked'], 'Due' => $row['due']); 
    } 

    include 'query.html.php'; 
    exit(); 
} 

include '../includes/db.inc.php'; 

try 
{ 
    $result = $pdo->query('SELECT ID, CONCAT_WS(\' \', First, Last) as Name FROM student'); 
} 
catch (PDOException $e) 
{ 
    $error = 'Error fetching students from database!'; 
    include 'error.html.php'; 
    exit(); 
} 

foreach ($result as $row) 
{ 
    $students[] = array('ID' => $row['id'], 'Name' => $row['name']); #Line 88 
} 

try 
{ 
    $result = $pdo->query('SELECT ISBN, Title FROM book'); 
} 
catch (PDOException $e) 
{ 
    $error = 'Error fetching books from database!'; 
    include 'error.html.php'; 
    exit(); 
} 

foreach ($result as $row) 
{ 
    $books[] = array('ISBN' => $row['isbn'], 'Title' => $row['title']); #Line 104 
} 

include 'searchform.html.php'; 

searchform。 html.php

<?php include_once 
'../includes/helpers.inc.php'; ?> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <!-- <link href="../style.css" rel="stylesheet" media="screen"> --> 
    <title>Query Checkouts</title> 
    </head> 
    <body> 
    <h1>Query</h1> 
    <form action="" method="get"> 
     <p>View checkouts satisfying the following criteria:</p> 
     <div> 
     <label for="student">By student:</label> 
     <select name="student" id="student"> 
      <option value="">Any student</option> 
      <?php foreach ($students as $student): ?> 
      <option value="<?php htmlout($student['id']); ?>"><?php 
       htmlout($student['name']); ?></option> <!-- Line 20 --> 
      <?php endforeach; ?> 
     </select> 
     </div> 
     <div> 
     <label for="book">By book:</label> 
     <select name="book" id="book"> 
      <option value="">Any book</option> 
      <?php foreach ($books as $book): ?> 
      <option value="<?php htmlout($book['isbn']); ?>"><?php 
       htmlout($book['title']); ?></option> <!-- Line 30 --> 
      <?php endforeach; ?> 
     </select> 
     </div> 
     <div> 
     <label for="ongoing">Ongoing only?:</label> 
     <input type="checkbox" name="ongoing" value="Yes" /> 
     </div> 
     <div> 
     <input type="hidden" name="action" value="search"> 
     <input type="submit" value="Search"> 
     </div> 
    </form> 
    <p><a href="..">Return to PHL home</a></p> 
    <?php include '../logout.inc.html.php'; ?> 
    </body> 
</html> 

我试图检查码,b ut phpcodechecker.com表示没有错误,我很难用Chrome Logger进行调试。

希望我能理解我做错了什么,所以我不会在以后的发展中犯错!

+0

你也经常混合使用html和php,它不可读,不要这样做代码'<! - 30行 - > <?php endforeach; '' –

+1

[PHP:“Notice:Undefined variable”和“Notice:Undefined index”]的可能重复(http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined -index) – Dezza

回答

3

在访问循环中的$row时,需要确保使用区分大小写的索引。

变化:

$students[] = array('ID' => $row['id'], 'Name' => $row['name']); 

要:

$students[] = array('ID' => $row['ID'], 'Name' => $row['Name']); 

此外,在searchform.html.php你需要为你定义它们,即访问阵列。使用IDName来访问这些值。或者更改上述更改中的这些索引以匹配预期的小写版本。

例子:

$students[] = array('id' => $row['ID'], 'name' => $row['Name']); 

只要你知道,这可能会影响其他回路的结果太。只要对这些应用相同的更改,您应该也可以(例如$checkouts似乎也受到影响)。

+0

现在我觉得哑巴。这完全奏效!谢谢! –