2016-11-27 2 views
0

Я пытаюсь создать простую форму с раскрывающимися списками для запроса моей базы данных (предназначенной для библиотеки для программы afterschool). Идея состоит в том, что выпадающие списки заполняются именами книг или учеников, поэтому, когда вы выбираете имя и Отправить, база данных выбирает детали с соответствующим внешним ключом из таблицы.Примечание: Неопределенный индекс: переменная

Проблема, когда я открываю форму, я получаю несколько копий этих строк выше формы:

Notice: Undefined индекс: идентификатор в E: \ XAMPP \ HTDOCS \ CMPS \ Library \ запрос \ index.php в строке 88

Примечание: Undefined индекс: имя в E: \ XAMPP \ HTDOCS \ CM \ Library \ запрос \ index.p в строке 88

Примечание: Undefined индекс: ISBN в E: \ XAMPP \ htdocs \ CMPS \ Library \ query \ index.php в строке 104

Примечания: Undefined индекс: название в E: \ XAMPP \ HTDOCS \ CM \ Library \ запрос \ index.p в строке 104

Кроме того, каждый из раскрывающихся списков говорит либо

Примечание: Не определен индекс: имя в E: \ XAMPP \ HTDOCS \ CM \ Library \ запрос \ searchform.html.p на линии 20

или

Извещения: U ndefined индекс: Название в E: \ XAMPP \ HTDOCS \ CM \ Library \ запрос \ searchform.html.p на линии 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> 

Я попытался проверить код, б ut phpcodechecker.com говорит, что есть нулевые ошибки, и мне сложно использовать Chrome Logger для отладки.

Надеюсь, я могу понять, что я делаю неправильно, поэтому я не ошибаюсь позже в разработке!

+0

Вы также часто смешиваете html и php, не читаете, не делаете код, как этот ' ' –

+1

Возможный дубликат [PHP:« Примечание: неопределенная переменная »и« Примечание: неопределенный индекс »] (http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined -index) – Dezza

ответ

3

При обращении к $row в вашем цикле необходимо использовать регистрозависимые индексы.

Изменение:

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

To:

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

Кроме того, в searchform.html.php вам необходимо получить доступ к массивам, как вы определили их, то есть. используйте ID и Name для доступа к этим значениям. Или измените эти индексы в приведенном выше изменении, чтобы соответствовать ожидаемым версиям нижнего регистра.

Пример:

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

Только так вы знаете, что это может отразиться на другой результат петли тоже. Просто примените те же самые изменения к этим, и вы должны быть в порядке (например, $checkouts также может быть затронуто).

+0

Теперь я чувствую себя немым. Это полностью сработало! Спасибо! –

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