Ниже приведен код, который показывает сообщения из моей базы данных в трех столбцах.
Вначале я нахожу 6 сообщений, поэтому, если есть 4 или 5 сообщений в сообщениях базы данных, они будут иметь столбец в таблице и пустое место для отсутствующего сообщения (отлично работает).
Теперь я добавил загрузку более ajax
кода, который является длинным кодом, поэтому я не опубликовал его здесь. Теперь, если в моей базе данных 7 записей, 6 из которых будут вызываться, будет отображаться, когда я загружу больше сообщений, чтобы вызывать седьмые сообщения, которые он охватывает всю таблицу, вместо этого он должен охватывать пространство одного столбца в таблице с двумя пустым пространством, как это сделать ?
<?php $sql = "SELECT * FROM posts WHERE status='active' ORDER BY id desc LIMIT 6"; $query = $db->prepare($sql); $query->execute(); $row = $query->fetch(PDO::FETCH_ASSOC); ?> <table cellpadding="5" cellspacing="2"> <tr> <?php do { //horizontal looper ?> <td'> <div><h2><a href=""><?php echo $row['title']; ?></a></h2></div> <div><img src='<?php echo $row['pic']; ?>'></div> <div><h3><?php echo $row['posted']; ?></h3></div></td> <?php $row = $query->fetch(PDO::FETCH_ASSOC); if (!isset($nested_List)) { $nested_List= 1; } if (isset($row) && is_array($row) && $nested_List++%3==0) { echo "</tr><tr>"; } } while ($row); //end horizontal looper ?> </table>
Мне нужно настроить где-нибудь, чтобы увидеть, как он работает.
Вы можете изменить $columnsPerRow
на число от 1 до любого, и оно просто работает.
Это вложенные группы. Итак, while
петли и read ahead
для меня
Измените предел на запрос и наслаждайтесь.
Я знаю, что он использует «альтернативный синтаксис». Я пробовал функции, чтобы скрыть html generation'. The whole code to generate the table is less 40 lines - It is different with functions and
html generation'. The whole code to generate the table is less 40 lines - It is different with functions and
echo `s, imo, а не лучше, ваш выбор. Это зависит от кода, который вы предпочитаете.
Код:
<?php // http://stackoverflow.com/questions/34495342/displaying-posts-in-three-columns-using-php // This loads a complete 'environment' // If you comment this out out and ensure a database connection then the code should work include __DIR__ . '/__bootstrap__.php'; // my setup - including PDO connection // There is always a PDO database connection - AURA/SQL -- get it: 'appServices('pdo'). /* -------------------------------------------------------------------------- * layout... */ $columnsPerRow = 3; // change this as required! $emptyColumnLiteral = '---'; // this in missing cells // database connection - PDO - replace this with your PDO $db = appServices('pdo'); // my application bootstrap knows how to login to the database for me :) $sql = "SELECT `title`, `pic_id` AS `pic`, `posted` FROM posts WHERE `status` = 'active' ORDER BY `id` DESC LIMIT 11"; $query = $db->prepare($sql); $query->execute(); ?> <table cellpadding="5" cellspacing="2"> <thead> <?php for ($c = 1; $c <= $columnsPerRow; $c++): ?> <th>title</th> <th>pic id</th> <th>posted date</th> <?php endfor; ?> </thead> <-- Now do the table where each row has $columnsPerRow... I so like 'read ahead' that you already did - makes it easier... --> <?php $row = $query->fetch(PDO::FETCH_ASSOC); ?> <?php while ($row): ?> <tr> <-- Now do one complete row - but we may run out of data --> <?php $columnNo = 1; // columns we have printed ?> <?php while ($row && $columnNo <= $columnsPerRow): // end of data OR end of row ?> <td><?= $row['title'] ?></td> <td><?= $row['pic'] ?></td> <td><?= $row['posted'] ?></td> <?php $columnNo += 1; // next column to show $row = $query->fetch(PDO::FETCH_ASSOC); // always 'read ahead''?> <?php endwhile; ?> <-- have we completed the row? --> <?php while ($columnNo <= $columnsPerRow): // complete the row... ?> <td><?= $emptyColumnLiteral ?></td> <td><?= $emptyColumnLiteral ?></td> <td><?= $emptyColumnLiteral ?></td> <?php $columnNo += 1; // next column to show ?> <?php endwhile; ?> </tr> <?php endwhile; ?> </table>
Записи базы данных:
CREATE TABLE `posts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'title', `pic_id` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'pic', `posted` datetime NOT NULL, `status` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'active', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*Data for the table `posts` */ insert into `posts`(`id`,`title`,`pic_id`,`posted`,`status`) values (1,'title_01','pic_01','2015-12-01 19:58:34','active'); insert into `posts`(`id`,`title`,`pic_id`,`posted`,`status`) values (2,'title_02','pic_02','2015-12-02 19:59:32','active'); insert into `posts`(`id`,`title`,`pic_id`,`posted`,`status`) values (3,'title_03','pic_03','2015-12-03 20:00:32','active'); insert into `posts`(`id`,`title`,`pic_id`,`posted`,`status`) values (4,'title_04','pic_04','2015-12-04 00:00:00','active'); insert into `posts`(`id`,`title`,`pic_id`,`posted`,`status`) values (5,'title_05','pic_05','2015-12-05 00:00:00','active'); insert into `posts`(`id`,`title`,`pic_id`,`posted`,`status`) values (6,'title_06','pic_06','2015-12-06 00:00:00','active'); insert into `posts`(`id`,`title`,`pic_id`,`posted`,`status`) values (7,'title_07','pic_07','2015-12-07 00:00:00','active'); insert into `posts`(`id`,`title`,`pic_id`,`posted`,`status`) values (8,'title_08','pic_08','2015-12-08 00:00:00','active'); insert into `posts`(`id`,`title`,`pic_id`,`posted`,`status`) values (9,'title_09','pic_09','2015-12-09 00:00:00','active'); insert into `posts`(`id`,`title`,`pic_id`,`posted`,`status`) values (10,'title_10','pic_10','2015-12-10 00:00:00','active'); insert into `posts`(`id`,`title`,`pic_id`,`posted`,`status`) values (11,'title_11','pic_11','2015-12-11 00:00:00','active'); insert into `posts`(`id`,`title`,`pic_id`,`posted`,`status`) values (12,'title_12','pic_12','2015-12-12 00:00:00','active'); insert into `posts`(`id`,`title`,`pic_id`,`posted`,`status`) values (13,'title_13','pic_13','2015-12-13 00:00:00','active');