2012-06-09 2 views
2

У меня есть форма с двумя полями выбора, оба эти окна используют свои параметры из моей базы данных через php.Показать параметры выбора из базы данных на основе выбора родителя

Первый показывает список книг, упорядоченный по их ISBN так:

<ISBN> - <Book name>

Теперь второй блок выбора будет список всех изданий, которые существуют для книги, выбранной в предыдущей выборке (на основе на ISBN) и покажите каждому из них только номер издания.

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

Что я пытаюсь сделать с помощью onChange, чтобы извлечь ISBN, выбранный из первого select, и использовать его для отображения вариантов второго выбора.

Я использую функцию dropdown() для отображения книги select и dropdownEdition() для издания выберите:

function dropdown($intIdField, $strNameField, $strTableName, $strOrderField, 
     $strNameOrdinal, $strMethod="asc") { 
    echo "<select name=\"$strNameOrdinal\">\n"; 
    echo "<option value=\"NULL\">Select Value</option>\n"; 

    $strQuery = "select $intIdField, $strNameField 
       from $strTableName 
       order by $strOrderField $strMethod"; 

    $rsrcResult = mysql_query($strQuery); 

    while($arrayRow = mysql_fetch_assoc($rsrcResult)) { 
     $strA = $arrayRow["$intIdField"]; 
     $strB = $arrayRow["$intIdField"] . " - " . $arrayRow["$strNameField"]; 
     echo "<option value=\"$strA\">$strB</option>\n"; 
    } 
    echo "</select>"; 
} 

function dropdownEdition($intId1Field, $intId2Field, $strTableName, $strOrderField, 
     $strNameOrdinal, $strMethod="asc") {  

    echo "<select name=\"$strNameOrdinal\">\n"; 
    echo "<option value=\"NULL\">Select Value</option>\n"; 

    $strQuery = "SELECT $intId1Field, $intId2Field 
       FROM $strTableName 
       ORDER BY $strOrderField $strMethod"; 

    $rsrcResult = mysql_query($strQuery); 

    while($arrayRow = mysql_fetch_assoc($rsrcResult)) { 
     $strA = $arrayRow["$intId1Field"]; 
     echo "<option value=\"$strA\">$strA</option>\n"; 
    } 

    echo "</select>"; 
} 

Что я в принципе хочу сделать, это пройти ISBN, выбранный ранее с onChange, в переменной $intId2Field из dropdownEdition().

Проблема в том, что я искал учебники, но я ничего не могу понять, потому что никогда не работал с jQuery или Javascript или AJAX, и я очень начинающий программист. Вот почему я прошу о помощи здесь.

Вот как 2 функции называются:

<?php dropdown("book_ISBN", "book_title", "book", "book_ISBN", "book"); ?> 

<?php dropdownEdition("edition_no", "???????", "edition", "edition_no", "edition"); ?>` 

The ???? являются book_ISBN, потому что я не знаю, как передать его в

Вот как связаны таблицы:

enter image description here

Рекомендации -

ответ

1

Это звучит, как вы уже поняли. это вам нужно, но вам нужно будет сделать асинхронный запрос на сервер, передав ISBN скрипту PHP, который выполнит ваш запрос mySQL.

Ваш PHP-скрипт вернет результаты mysql, возможно, как объект JSON, который затем может быть проанализирован с использованием JS и отформатирован как HTML.

Вот код, который я собрал вместе, чтобы продемонстрировать.

HTML:

<select name="isbn-select" id="isbn-select"> 
    <option value="">Select an ISBN</option> 
    <option value="isbn1">isbn1</option> 
    <option value="isbn2">isbn2</option> 
    <option value="isbn3">isbn3</option> 
</select> 

JS:

$('#isbn-select').on('change', function() { 
    isbn = $('#isbn-select').val(); 
    $.getJSON('get_editions.php', 
    { 
    isbn: isbn 
    }, 
    function(data) { 
    var editions = []; 
    $.each(data, function(index, val) { 
     editions.push('<option value="' + val + '">' + val + '</option>'); 
    }); 
    $('<select/>', { 
     'id': 'editions-select', 
     'name': 'editions-select', 
     html: editions.join('') 
    }).appendTo('body'); 
    }); 
}); 

PHP:

<?php 
// Code to select editions from your database goes here.... 
// Your isbn can be accessed as $_GET['isbn'] 
$editions_arr = array('editon1', 'edition2', 'edition3'); 
echo json_encode($editions_arr); 
?> 

Я использовал getJSON метод JQuery для извлечения объекта JSON из get_editions.php. Затем результаты форматируются как select и добавляются в документ HTML. Чтобы все было просто, я не делаю никаких проверок ошибок или проверки.

Надеюсь, это поможет вам на правильном пути!

EDIT:

Если вы хотите вернуть отформатированный HTML вместо объекта JSON, вот как вы можете сделать это.

JS:

$('#isbn-select').on('change', function() { 
    isbn = $('#isbn-select').val(); 
    $.get('get_editions.php', 
    { 
    isbn: isbn 
    }, 
    function(data) { 
    $('body').append(data); 
    }); 
}); 

PHP:

<?php 
// Code to select editions from your database goes here.... 
// Your isbn can be accessed as $_GET['isbn'] 
$editions_html = '<select id="editions-select" name="editions-select">'; 
$editions_html .= '<option value="edition1">edition1</option>'; 
$editions_html .= '<option value="edition2">edition2</option>'; 
$editions_html .= '<option value="edition3">edition3</option>'; 
$editions_html .= '</select>'; 
echo $editions_html; 
?> 

Вы можете прочитать на функции AJAX JQuery здесь: http://api.jquery.com/category/ajax/

+0

могли бы вы объяснить немного больше, как реализовать этот олово мой код ? Просто я понятия не имею о объектах JSON, и почти ничего не понимаю. –

+0

Я отредактировал свой ответ, чтобы показать, как вы можете вернуть отформатированный HTML вместо JSON. Однако, если вы планируете делать много работы, отправляя данные между сервером и JS, тогда стоит потратить время, чтобы узнать больше о JSON. –

+0

Что делать, если у меня была кнопка «GO» рядом с формой isbn, и после нажатия ее выбранный ISBN будет передан в форме издания, как бы я пошел с этим? Извините за слишком многого, но я хочу избежать jQuery, потому что я понятия не имею, как его использовать ... также у меня нет времени, чтобы узнать его, потому что я начал свой финал –

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