|
 2.5 Кб |
|
| На странице алфавит. При клике на букву появляется список авторов на эту букву. Дальше при клике на автора появляется табличка со списком его книг. Ниже таблички хочу вывести список других авторов на эту же букву.
Скрипт в аттаче.
В 69 строке есть переменная $alike_letter. Как ее можно определить? Как запомнить букву, на которую начинается фамилия текущего автора? | |
|
|
|
|
|
|
|
для: Лена
(18.02.2009 в 23:31)
| | вот это как - специально?
if(isset($_GET['author'])){
$author = intval($_GET['author']);
|
а это?
$sql = "SELECT * FROM author
...
print "<a href = '?author=$row[0]'>" . $row[1] . "</a><br>";
|
-----
В цикле $row['name'] у Вас, вероятно, содержит имя. Первую букву взять труда не составляет. Прямо в цикле и взять.
И таки да. JOIN - правый , а не левый. | |
|
|
|
|
|
|
|
для: Trianon
(18.02.2009 в 23:45)
| | Правый JOIN сделала. Там действительно, если у автора не будет книг то его имя при левом JOIN в результат запроса не попадет. Цикл еще один добавила, чтобы имя автора один раз выводилось. И букву первую вытянула.
<?php
if(isset($_GET['author'])){
//если получен айдишник автора, выбираем все книги этого автора
$author = intval($_GET['author']);
$sql = "SELECT *, b.id as d
FROM books as b RIGHT JOIN author as a
ON b.id_author=a.id WHERE b.id_author =" . $author;
$res = mysql_query($sql);
if(!$res) exit ("Error in $sql:" . mysql_error());
//-----------вот это все должно пойти в шаблон -----------
echo "<table border = '1px'>";
for($i=0;$row = mysql_fetch_assoc($res);){
if($i!=$row['id_author']){
$i = $row['id_author'];
//первая буква
$alike_letter = $row['name'][0];
//автор
echo "<h1>" . $row['name'] . "<h1>";
//все книги автора
echo "<tr><th>Название книги</th>
<th>Размер</th>
<th>Тип файла</th>
<th>Дата добавления</th>
<th>Число закачек</th>
<th> </th>
</tr>";
}//if($i!
echo "
<tr><td>" . $row['title']. "</td>
<td>" . $row['size']. "</td>
<td>" . $row['type']. "</td>
<td>" . $row['add_date']. "</td>
<td>" . $row['count_download']. "</td>
<td><a href = 'header.php?id_book=" . $row['d'] . "'>Скачать</a></td>
</tr>";
}
echo "</table>";
?>
|
А вот это
>вот это как - специально?
не пойму, что вы хотите. Получаю гет-параметр, присваиваю его значение переменной. | |
|
|
|
|
|
|
|
для: Лена
(19.02.2009 в 17:43)
| | Я хочу, чтобы текст можно было читать.
И если стоит if (...) {
то операторы, попадающие под условие, нужно записывать со сдвигом относительно if
насчет строк $sql = "SELECT * FROM author
print "<a href = '?author=$row[0]'>" . $row[1] . "</a><br>";
первая означает выбор всех полей таблицы author в порядке, заданном структурой таблицы.
вторая указывает на обращение к первому и второму полям набора строк результата.
К каким полям? Как это читать? | |
|
|
|
|
|
|
|
для: Trianon
(19.02.2009 в 18:48)
| | Не злитесь, в следующий раз исправлюсь. А насчет $row[0] - мне-то все понятно, откуда все берется, поэтому даже над этим не задумалась, я не специально. Спасибо, что помогли. | |
|
|
|
|
|
|
|
для: Лена
(18.02.2009 в 23:31)
| | Посмотрел в код и не понял зачем вот это:
<?php
$sql = "SELECT *, b.id as d
FROM books as b LEFT JOIN author as a
ON a.id = b.id_author WHERE b.id_author =" . $author;
?>
|
Вы же выводите список книг для конкретного автора, то есть после получения authour_id из $_GET, Вам надо выполнить 1 запрос к таблице авторов и получить его данные (имя, ...), а уж потом простой (немноготабличный) запрос к таблице книг.
Получается же, что Вы выведете имя автора столько раз, сколько у него находится книг в базе:
<?php
while($row = mysql_fetch_assoc($res)){
//автор
echo "<h1>" . $row['name'] . "<h1>";
?>
|
Я не из вредности это заметил. Просто Вам нужно достать первую букву так:
<?php
$alike_letter = $author_name[0];
?>
|
Но у Вас имя автора находится $row['name'] и не факт, что эта переменная будет определена, так как книг у автора может и не быть.
UPD: Вообще говоря, $row после цикла всегда будет false | |
|
|
|
|
 2.7 Кб |
|
|
для: BinLaden
(18.02.2009 в 23:49)
| | По вашему варианту тоже переделала. См. в аттач. Спасибо за помощь. | |
|
|
|