Цикл php foreach генерирует результаты - нужно определить выбор пользователя кнопкой select
У меня есть функция поиска (поиск книги с помощью API книг Google), и 10 результатов возвращаются в табличном формате с использованием цикла foreach. В течение нескольких дней я пытался выяснить, как передать фактические результаты поиска, в зависимости от того, какой из 10 выбранных пользователем. Я нашел множество ответов, но ни один из них не соответствует моим конкретным требованиям. Я думаю, что мне нужно динамически создавать переменную для каждого результата, но, возможно, я на неправильном пути? Может быть, мне нужно динамически создавать идентификаторы таблицы, чтобы выбрать таблицу данных, но я не знаю, как это сделать. Или мне динамически изменить значение идентификатора строки выбора ввода?
<strong><p style="font-size: 16px; text-align: center";>Top 10 Results for "<?php echo @$_POST['q']; ?>"</p></strong>
<strong><p style="font-size: 14px; text-align: center";>choose a book to select as your topic</p></strong>
<table style="width:400px">
<col width="325">
<col width="75">
<?php $i=0; foreach ($data['items'] as $item) { $i++;
$b_title[$i] = $i; ?>
<tr>
<td>
<strong><u><div style="font-size: 14px";><?php printf($item['volumeInfo']['title']);
$b_title[$i] = $item['volumeInfo']['title']?></u></div></strong>
<strong>Author: </strong><?php printf( $item['volumeInfo']['authors'][0]);?><br />
<strong>Published: </strong><?php printf( $item['volumeInfo']['publishedDate']); ?><br />
<strong>Page(s): </strong><?php printf( $item['volumeInfo']['pageCount']); ?><br />
<strong>Publisher: </strong><?php printf( $item['volumeInfo']['publisher']); ?><br />
<strong>Category: </strong><?php printf( strtolower($item['volumeInfo']['printType']).', '.strtolower($item['volumeInfo']['categories'][0])); ?>
<strong>ISBN: </strong><?php printf( $item['volumeInfo']['industryIdentifiers'][0]['identifier']); ?></td>
<td><p><input type="submit" method="post" name="selectbook" value="Select" class="btn" id="book'.$i.'" /></p>
<input type="hidden" name="value[]" value="<?=$i?>" />
<img src="<?php printf( rawurldecode($item['volumeInfo']['imageLinks']['smallThumbnail'])); ?>" />
</td>
<tr><td style="width:420px"><p><strong>Description: </strong><?php printf( $item['volumeInfo']['description']); ?><br /></p></td>
<?php
//assigning values in order to pass to javascript variables - client to server
if ( isset( $_POST['submit'] )) {
$book_title = $b_title[$i];
$book_cover = $book_cover_i;
}
$book_cover = $item['volumeInfo']['imageLinks']['smallThumbnail'];
$book_author = $item['volumeInfo']['authors'][0];
$book_published = $item['volumeInfo']['publishedDate'];
$book_description = $item['volumeInfo']['description'];
$book_pages = $item['volumeInfo']['pageCount'];
$book_publisher = $item['volumeInfo']['publisher'];
$book_ISBN = $item['volumeInfo']['industryIdentifiers'][0]['identifier'];
?>
1 ответ
Это в основном решаемо. Я могу увеличивать значения и выводить точные значения, которые я хочу. Ниже я специально назначил "2", и, конечно же, 2-й результат дойдет до php-файла (на стороне сервера). Обратите внимание на изменения в javascript, строке ввода и том, как значения присваиваются переменным приращениям.
Моя последняя проблема - передача целочисленного значения на сервер, поэтому мне не нужно вручную вводить 2. Думаю, мне нужно создать другой поток для этого. Возможно, это поможет кому-то в будущем, кто найдет эту ветку.
<script>
$(function() {
$( "#dialog" ).dialog({
height: 550, width: 450});
$( ".btn" ).click(function(){
if(this.id.indexOf('select')>-1) { var id = (this.id.split("_"))[1]; console.log(id); }
var bookSelect = id;
//$("#select").val(bookSelect);
$.ajax({
type: "POST",
url: 'book-meta.php',
async:true,
dataType: 'json',
//assign values to the variables to be passed to the server via data
data: { cover : cover, title : title, author : author, published : published,
description : description, pages : pages, publisher : publisher, ISBN : ISBN},
bookSelect : bookSelect,
success: function(data)
{
//identify the variables for unique handing on the server side, this is
//how javascript variables (client side) are passed to the server
$("input[name='bbp_extra_fieldc']").val(data.cover);
$("input[name='bbp_topic_title']").val(data.title);
$("input[name='bbp_extra_field1']").val(data.author);
$("input[name='bbp_extra_field2']").val(data.published);
$("input[name='bbp_extra_field3']").val(data.description);
$("input[name='bbp_extra_field4']").val(data.pages);
$("input[name='bbp_extra_field5']").val(data.publisher);
$("input[name='bbp_extra_field6']").val(data.ISBN);
$('#select').val(data.bookSelect);
//alert(data);
alert(bookSelect);
},
error: function(errorThrown){
alert('error');
}
});
$( "#dialog" ).dialog( "close" );
});
});
</script>
<strong><p style="font-size: 16px; text-align: center";>Top 10 Results for "<?php echo @$_POST['q']; ?>"</p></strong>
<strong><p style="font-size: 14px; text-align: center";>choose a book to select as your topic</p></strong>
<table style="width:400px">
<col width="325">
<col width="75">
<?php $i=0; foreach ($data['items'] as $item) { $i++; ?>
<tr>
<td>
<strong><u><div style="font-size: 14px";><?php printf($item['volumeInfo']['title']);
$b_title[$i] = $item['volumeInfo']['title']?></u></div></strong>
<strong>Author: </strong><?php printf( $item['volumeInfo']['authors'][0]);
$b_author[$i] = $item['volumeInfo']['authors'][0]?><br />
<strong>Published: </strong><?php printf( $item['volumeInfo']['publishedDate']);
$b_published[$i] = $item['volumeInfo']['publishedDate'] ?><br />
<strong>Page(s): </strong><?php printf( $item['volumeInfo']['pageCount']);
$b_pages[$i] = $item['volumeInfo']['pageCount'] ?><br />
<strong>Publisher: </strong><?php printf( $item['volumeInfo']['publisher']);
$b_publisher[$i] = $item['volumeInfo']['publisher'] ?><br />
<strong>Category: </strong><?php printf( strtolower($item['volumeInfo']['printType']).', '.strtolower($item['volumeInfo']['categories'][0])); ?>
<strong>ISBN: </strong><?php printf( $item['volumeInfo']['industryIdentifiers'][0]['identifier']);
$b_ISBN[$i] = $item['volumeInfo']['industryIdentifiers'][0]['identifier'] ?></td>
<td><p><?php echo "<input type='submit' method='post' name='selectbook' value='Select' class='btn' id='select_$i' />"; ?></p>
<img src="<?php printf( rawurldecode($item['volumeInfo']['imageLinks']['smallThumbnail']));
$b_cover[$i] = $item['volumeInfo']['imageLinks']['smallThumbnail'] ?>" />
</td>
<tr><td style="width:420px"><p><strong>Description: </strong><?php printf( $item['volumeInfo']['description']);
$b_description[$i] = $item['volumeInfo']['description'] ?><br /></p></td>
<?php
//assigning values from index results according to user selection, then
//pass to javascript variables - client to server in below script
//the if statement determines is someone selected a book
if ( isset( $_POST['submit'] )) {
$b = 2;
$book_cover = $b_cover[$b];
$book_title = $b_title[$b];
$book_author = $b_author[$b];
$book_published = $b_published[$b];
$book_description = $b_description[$b];
$book_pages = $b_pages[$b];
$book_publisher = $b_publisher[$b];
$book_ISBN = $b_ISBN[$b];
}
?>
<script>
//assign values to each javascript variable with results on the server
//this is how php variables are passed from server to the client - php to javascript
var cover = <?php echo json_encode($book_cover); ?>;
var title = <?php echo json_encode($book_title); ?>;
var author = <?php echo json_encode($book_author); ?>;
var published = <?php echo json_encode($book_published); ?>;
var description = <?php echo json_encode($book_description); ?>;
var pages = <?php echo json_encode($book_pages); ?>;
var publisher = <?php echo json_encode($book_publisher); ?>;
var ISBN = <?php echo json_encode($book_ISBN); ?>;
//var book_count = <?php echo json_encode($count[$i]); ?>;
</script>
</tr>
</tr>