|
|
|
| Вот скрипт выводит из базы в 4 столбца, но все нормально если мне не нужны линки. А так как я хочу сделать чтоб выводимая инфо была линком вото тут и получается петрушка ....
Как я понимаю необходимо запрос закинуть в массив....
$query="SELECT id_model,model FROM $tbl_model WHERE id_marka=$_GET[id_marka] ORDER BY model";
$mdl = mysql_query($query);
if(!$mdl)
{
throw new ExceptionMySQL(mysql_error(),
$query,
"Ошибка при обращении
к таблице позиции");
}
$rows=4;
$model = array();
if(mysql_num_rows($mdl))
{
while($model_array = mysql_fetch_array($mdl))
{
$model[$model_array['id_model']] = $model_array['model'];
}
$num=(int)(mysql_num_rows($mdl)/$rows);
if(mysql_num_rows($mdl)%$rows)$num++ ;
echo "<table>";
for ($i=0; $i<$num; $i++)
{
echo "<tr>";
for ($j=0; $j<$rows; $j++)
{
$model=@mysql_result($mdl,$j*$num+$i);
echo "<td width=25%><a href=generation.php?id_marka=".$_GET['id_marka']."&id_model=".$model.">".$model."</a></td>\n";
echo "<td> </td>\n";
}
echo "</tr>\n";
}
}
echo "</table>";
}
|
| |
|
|
|
|
|
|
|
для: dmtrfoxerr
(05.09.2008 в 09:00)
| | Ужас просто. Ну во-первых, после обращения к базе вы и получите массив, вам только нужно его разложить. А вот тут вопрос - что значит проблема с вертикальным выводом и причем тут линки? Почему вы параметр еденичного GET запроса (надо пологать который и побуждает эту выборку) "прикуручиваете" ко всем генеририруемым ссылкам? | |
|
|
|
|
|
|
|
для: sim5
(05.09.2008 в 09:06)
| | Ужас не спорю....
вот у меня и неполучается его разложить....так как надо ....
А GET я использую чтоб передать параметр далее, т.к. будет добавляться в в базу... | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(05.09.2008 в 09:51)
| | Давайте сперва о запросе. Например, у вас выставлена ссылка:
<a href="auto.php?id=1">Транспорт</a>
Отправляя запрос, я вправе ожидать список этого транспорта, типа
<a href="model.php?id=1">Мотоцикл</a>
<a href="model.php?id=2">Велосипед</a>
<a href="model.php?id=3">Детская коляска</a>
И уже по этим ссылкам получить описания (или иное) по этим видам транспорта. Зачем передавать пулученный параметр ссылки "Транспорт" в ссылки вида транспорта?
Что касается вывода, то, например:
while($model_array = mysql_fetch_assoc($mdl) {
//здесь выводим строки и столбцы таблицы
//делается это посредством проверки итерации цикла
//деленного по модулю на число нужных вам колонок
//для этого укажите переменную с начальным значением 0
//увеличивая ее при проходе на 1
}
PS. Если и с принципом получения таблицы не понятно тоже, то расшифровываю:
<?
//здесь, вне цикла, выводим
print "<TABLE>";
//здесь, уже в цикле, выводим строки и столбцы таблицы,
//проверяя счетчик цикла - переменную $i
if (!($i % 4)) print "<TR>"; //итерация цикла четна 4, значит новая строка таблицы
print "<TD>" .тут нужные значения массива. "</TD>"; //выводим ячейку
if (!($i+1 % 4)) print "</TR>"; //если следующая итерация четна 4, то закрываем строку таблицы
//после цикла закрываем таблицу
print "</TABLE>";
|
| |
|
|
|
|
|
|
|
для: sim5
(05.09.2008 в 10:04)
| | Уважаемый sim5..
Посмотрите пожалуйста где ошибка???
echo "<table>\n";
$col =4;
while($model = mysql_fetch_array($mdl))
{
$n = ($col>count($model[0]) || !(count($model[0])%$col)) ? count($model[0]) : count($model[0])+($col-count($model[0])%$col);
for ($i=0; $i<$n; $i++)
{
if(!($i % $col)) print "<tr>\n";
echo "\n<td>$model[1]</a></td>";
echo "<td> </td>\n";
if(!($i+1 % $col))print "<tr>\n";
}
}
echo "</table>";
|
Наверное все перепробывал... но видимо делаю что то не так.
Выводит все что угодно, но не то что надо... | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(17.10.2008 в 00:48)
| | Что представляет собой массив, который вы получаете из базы ($mdl)? А то не очень понятно, зачем использовать цикл for внутри while.
Строка:
$n = ($col>count($model[0]) || !(count($model[0])%$col)) ? count($model[0]) : count($model[0])+($col-count($model[0])%$col);
будет дополнять число итераций цикла до кратного числу разложения талицы по колонкам. Она нужна только тогда, когда таблица выводится с бордюром (например, border="1"), это же касается и вывода в пустые ячейки таблицы. Если вы не используете бордюр в таблице, то это можно опустить. Это можно не учитывать, если бордюр таблице "нарисовать" с помощью отступов между ячейками.
mysql_fetch_array() возвращает две копии одного и того же набора, только один из них индексный, а другой ассоциативный. Если вы работаете с индексами, то используйте mysql_fetch_row(), если с ассоциациями - mysql_fetch_assoc(), а про mysql_fetch_array() забудьте, если вам не нужно и то, и другое.
Выставляя код и обрамляя его тегами [сode][/сode], ставьте также хотя бы один короткий РНР тег в начале его, с подсветкой код читать лучше. | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 11:36)
| | Массив представляет собой значения id_model и model
<?
$query="SELECT id_model,model FROM $tbl_model
|
Убрал строку
$n = ($col>count($model[0]) || !(count($model[0])%$col)) ? count($model[0]) : count($model[0])+($col-count($model[0])%$col);
и поменял на mysql_fetch_row() ... все равно .. выводит в один столбец | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(17.10.2008 в 13:51)
| | Похвально, что исправлено :) Но ясности это не привносит. Ваш отчет равносилен следующему:
вода это Н, О
И не понять, сколько в ней Н, и сколько О. Я вас спрашивал потому, как если какое либо значение поля было бы массивом, например, то тогда в цикле while потребовалось бы его обойти в цикле. Думаю, что нет у вас никаких массивов в записях, а значит и не надо никаких циклов внутри, поэтому:
<?
//по сколько колонок выводить
$col =4;
//выводим таблицу с рамкой, которую формируем за счет отступов ячеек
//например, сделаем черный бордюр толщиной в 1 пиксель
?>
<table border="0" bgcolor="#fff" cellpadding="4" cellspacing="1">
<?
$i = 0;
while($model = mysql_fetch_row($query)) {
if(!($i % $col)) print "\n<tr bgcolor=\"#fff\">\n";
print "<td>" .$model[1]. "</td>\n";
if(!($i+1 % $col))print "</tr>\n";
$i++;
}
?>
</table>
|
| |
|
|
|
|
|
|
|
для: dmtrfoxerr
(17.10.2008 в 13:51)
| | А вы не правильно сами теги TR выводите, что уж говорить про остальное. | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 14:15)
| | ??? Где я их не правельно вывожу???
Ну это ладно ....
Дело в том что, получается вывод "горизонтальный" .... а не вертикальный.
Ладно спасибо и на этом ) | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(17.10.2008 в 14:50)
| | >Где я их не правельно вывожу???
Здесь:
if(!($i+1 % $col))print "<tr>\n";
Вместо того чтобы закрыть строку, вы открываете новую. | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 14:52)
| | А .... не углядел . но если так то для <tr> закрывающий тэг не обязателен. | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(17.10.2008 в 15:02)
| | Вы из необязательности, сделали обязательность, и получили полный бардак. Разберитесь, а уж потом делайте выводы. | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 15:48)
| | Все подправил, как Вы сказали ....
но выводит в следущем виде
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
21 22 23 24
25 26 27 28
29 30 31 32
33 34 35 36
37 38 39 40
............................................
|
а я хочу добиться чтоб выводился
1 11 21 31
2 12 22 32
3 13 23 33
4 14 24 34
5 15 25 35
6 16 26 36
7 17 27 37
8 18 28 38
9 19 29 39
10 20 30 40
|
| |
|
|
|
|
|
|
|
для: dmtrfoxerr
(17.10.2008 в 16:55)
| | А чего же вы вопрос задаете несоответствующий? | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 17:01)
| | Ну почему не соответсвующий????
В само название темы указывает на способ вывода....)) | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(17.10.2008 в 17:05)
| | Ну да, вывести таблицу в четыре колонки, а то что данные должны писаться не в строку, а в колонки через 10 строк, нужно догадаться? Или это по вашему одинаково - что так, что так? | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 17:09)
| | Вертикально - горизонтально ||| Длина - высота )))) смотря под каким углом зрения смотреть ))) филосовский вопрос (нужен кальян и каньячек) ))))) | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(17.10.2008 в 17:16)
| | Ну тогда философствуйте сами с собою. Охота заметить, если такой вывод данных из таблицы потребовался, может лучше стоить пересмотреть структуру самой таблицы/таблиц базы, что не изголяться и не иметь проблем? | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 17:24)
| | ХМ .... структуру таблицы??? а какая структура подойдет в этом случае???
Вот то что у меня
CREATE TABLE `tbl_model` (
`id_model` int(11) NOT NULL auto_increment,
`model` tinytext NOT NULL,
`url_model` tinytext NOT NULL,
`descript` text NOT NULL,
`id_marka` int(11) NOT NULL,
PRIMARY KEY (`id_model`)
) ENGINE=MyISAM AUTO_INCREMENT=150 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=150 ;
|
| |
|
|
|
|
|
|
|
для: dmtrfoxerr
(17.10.2008 в 16:55)
| | Делаю так
<?
$query="SELECT id_model,model FROM $tbl_model WHERE id_marka=$_GET[id_marka] ORDER BY model";
$mdl = mysql_query($query);
if(!$mdl)
{
throw new ExceptionMySQL(mysql_error(),
$query,
"Ошибка при обращении
к таблице позиции");
}
$rows=4;
echo "<table>";
if(mysql_num_rows($mdl)>0)
{
$num=(int)(mysql_num_rows($mdl)/$rows);
if(mysql_num_rows($mdl)%$rows)$num++ ;
for ($i=0; $i<$num; $i++)
{
echo "<tr>";
for ($j=0; $j<$rows; $j++)
{
echo "<td width=25%>".@mysql_result($mdl,$j*$num+$i)."</td>\n";
echo "<td> </td>\n";
}
echo "</tr>\n";
}
}
echo "</table>";
|
Но здесь у меня проблема с массивом... | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(17.10.2008 в 17:03)
| | Не порите горячки. Если выводить так как вы показали - первые 10 значений в первую колонку с верху в низ, затем так же вторая колонка... И причем это последовательность от 1 до 40, то это одна проблема. Но у вас по два элемента в массиве, а в какие колонки и строки у вас должны выводиться первые и вторые элементы каждой полученной записи, надо опять догадываться? | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 17:14)
| | Ы горячки не порю .... спокоен как танк ))))
Может просто посмотрите как реализованно
http://catalog.drom.ru/toyota/
думаю так будет нагляднее ... | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(17.10.2008 в 17:22)
| | Я устал от вас уже! Вы читаете вопросы которые я вам задаю? Это вам надо посмотреть на страницу, а не мне. В общем так - получаете все записи из базы, затем плученный массив преобразуете так, чтобы его можно было вывести как вы хотите, а насиловать базу запросами как вы это пытатесь делать не стоит. | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 17:31)
| | Ну устали так устали. Спасибо за потраченное время! | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(17.10.2008 в 17:44)
| | Не надо строить в цикле таблицу, ничего у вас не получиться. В этом цикле из полученного ресурса нужно создать массив, который уже потом выведите в таблицу. Для этого нужно сперва узнать число строк будущей таблицы, разделив число записей ресурса, на число необходимых колонок. По этому числу проверять и в новый массив добавлять элементы так, чтобы у вас в итоге получилось, например:
0 => array(array(A0,B0),array(A10,B10),array(A20,B20),array(A30,B30)),
1 => array(array(A1,B1),array(A11,B11),array(A21,B21),array(A31,B31)),
....
и т.д., если число строк таблицы получиться равное 10. Вот теперь этот уже массив без всяких проверок выводите в таблицу, потому как тут проверять нечего уже.
PS. А можно просто, делая каждую запись нового массива одномерным массивом, то есть так:
0 => array(A0,B0,A10,B10,A20,B20,A30,B30),
1 => array(A1,B1,A11,B11,A21,B21,A31,B31),
....
Для этого будет достаточно проверять установленный счетчик и одной функции - array_push(). В цикле while в его начале устанавливаете счетчик как:
$i = $i < $m ? $i : 0;
где $m - число полученных строк в будущей таблице. Теперь добавляете элементы в новый массив, пусть это будет $table:
array_push($table[$i], A, B);
где А и В - поля вашей таблицы в ресурсе.
$i++;
Вот теперь полученный массив $table выводите в таблицу. Число итераций цикла при этом равно числу строк в массиве, а элементы его, это данные для ячеек, число которых вы уже знаете, и знаете, что каждая пара элементов массива каждой строки пренадлежит одной ячейке таблицы:
<tr>
<td>$table[$i][0], $table[$i][1]</td>
<td>$table[$i][2], $table[$i][3]</td>
<td>$table[$i][4], $table[$i][5]</td>
<td>$table[$i][6], $table[$i][7]</td>
</tr>
и т.д... | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 17:31)
| | где Вы там нашли насилие над базой?
вроде один запрос всего.
Выборка данных из резалтсета в произвольном порядке, да. Ну и что? | |
|
|
|
|
|
|
|
для: Trianon
(17.10.2008 в 18:07)
| | Да я заговорился уже, я хотел сказать о ресурсе :) Запросы к базе я даже и не имел ввиду. Просто насилие над полученным. | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 18:15)
| | Так почему насилие-то?
php разве не индексирует набор строк результата буферизированного запроса? | |
|
|
|
|
|
|
|
для: Trianon
(17.10.2008 в 18:54)
| | Насилие в коде, в подходе :) Можно и непосредственно ведь и сам ресурс разложить, если ограничить цикл итерацией равным числу строк в таблице, и выводить элементы, получая их с учетом всего записей в ресурсе, как смещение полученное: итерация_цикла+число_колонок[индекс_поля]. Если я не напутал, то так. Но не так же издеваться как автор, я считаю такое насилием ;-) | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 19:13)
| |
<?
$query="SELECT id_model,model FROM $tbl_model WHERE id_marka=$_GET[id_marka] ORDER BY model";
$mdl = mysql_query($query);
if(!$mdl)
{
throw new ExceptionMySQL(mysql_error(),
$query,
"Ошибка при обращении
к таблице позиции");
}
$rows=4;
echo "<table>";
if(mysql_num_rows($mdl)>0)
{
$num=(int)(mysql_num_rows($mdl)/$rows);
if(mysql_num_rows($mdl)%$rows)$num++ ;
for ($i=0; $i<$num; $i++)
{
echo "<tr>";
for ($j=0; $j<$rows; $j++)
{
echo "<td width=25%>".@mysql_result($mdl,$j*$num+$i)."</td>\n";
echo "<td> </td>\n";
}
echo "</tr>\n";
}
}
echo "</table>";
|
Вот данный код выводит то что надо .... НО... выводит ТОЛЬКО одинарный массив ... а я хочу организовать как в http://catalog.drom.ru/toyota/ (Надеюсь доходчиво объяснил...)
!!!!!!!!!!!!!!!!!!(Возьмите поправку на новичка)!!!!!!!!!!!!!!!!!!!!!!!! %) Потому что многие вещи не НАПИСАНЫ в книгах и интернет ресурсах.... а берутся из личного опыта.....я учусь ... я стараюсь не все получается... потому и обращаюсь к всевышним мира сего. | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(18.10.2008 в 01:58)
| | Вы думаете проблема в многомерности массива? Вот как применить то, что я вам раньше показывал, но(!) зная, что мы расладываем таблицу "в глубину", которую предварительно узнаем. Пример разложения одномерного и многомерного массивов одним и тем же способом:
<?
$res = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17);
//требуемое количество колонок
$col = 4;
//получим число элементов массива,
//и, если оно не кратно числу колонок, дополним
$n = ($col>count($res) || !(count($res)%$col)) ? count($res) : count($res)+($col-count($res)%$col);
//получаем число строк разложения
$n /= $col;
print '<TABLE border="1">';
for ($i=0; $i<$n; $i++) {
print "<tr>";
for ($k=0; $k<$col; $k++) {
$res[$i+$n*$k] ? print "<TD>".$res[$i+$n*$k]."</TD>" : print "<TD> </TD>";
}
print "</tr>";
}
print "</TABLE>";
//разложим так же многомерный массив
$res = array(array(1,2),array(3,4),array(5,6),array(7,8),array(9,10),
array(11,12),array(13,14),array(15,16),array(17,18),array(19,20),
array(21,22),array(23,24),array(25,26),array(27,28),array(29,30));
$col = 4;
$n = ($col>count($res) || !(count($res)%$col)) ? count($res) : count($res)+($col-count($res)%$col);
$n /= $col;
print '<TABLE border="1">';
for ($i=0; $i<$n; $i++) {
print "<tr>";
for ($k=0; $k<$col; $k++) {
$res[$i+$n*$k] ? print "<TD>".$res[$i+$n*$k][0]."-".$res[$i+$n*$k][1]."</TD>"
: print "<TD> </TD>";
}
print "</tr>";
}
print "</TABLE>";
?>
|
Вы хотите строго 4 колонки, то есть фиксированно, а поэтому можно вложенный цикл выбросить, так как вам заведомо известно смещение. Как это можно прописать одним циклом? | |
|
|
|
|
|
|
|
для: Trianon
(17.10.2008 в 18:07)
| | Вот я тоже (новичек Канечное"в ВЕБЕ"), но насилия особого не заметил.
Спасибо за защиту....)))))))) | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(18.10.2008 в 01:41)
| | А как же такое не назвать насилием :) Ошибка первая - вы сразу не объяснили как нужно осуществить вывод полученного ресурса, указав лишь что в 4 колонки. Я и предложил вам естественный вывод - слева-направо - сверху-вниз, говоря языком элетронным - строчную развертку. ) Вам же нужна вертикальная развертка (кадровая) - сверху-вниз - слева-направо. Зная об этом, вы тем не менее, пытаетесь решить задачу подходом, который ни как вам не годится. Наличие вложенных циклов, это тоже лишнее и не нужное. Решений может быть только два:
1. Получение массива разложенно под будущую таблицу.
2. Вывод ресурса сразу в HTML-таблицу, с получением данных ресурса по смещению.
Не надо делать поправку на отсутствие опыта и слабое знание РНР - вы не верно подходте к решению простой арифметической задачи, от сюда и проблемы.
Первый вариант вас не устраивает, вы пытаетесь вторым - похвально, но... Уясните в конце концов, что в этом случае определяющим и главным будет не 4, а число строк в таблице. Я об этом вам говорил уже дважды, вы на это ноль внимания. Попробуйте решить сами, исходя из следующего:
1. Узнать сколько всего записей в исходном ресурсе.
2. Узнать сколько итераций должен иметь цикл.
3. Если всего записей 15, то разделив их на 4, получаем 3 с остатком - как быть?
4. Ответив на первых три вопроса, в одном цикле, за один проход получать записи ресурса по смещению, которое будет определять полученное выше значение, и получить html-таблицу.
Для того чтобы это понять, разложите сначала массив - простую последовательность цифр от 1 до N. | |
|
|
|
|
|
|
|
для: sim5
(18.10.2008 в 03:59)
| | Так разжевали .... ))) Спасибо большое.... | |
|
|
|
|