NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Problém s výpisem příspěvků

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Crrack
Člen
Avatar
Crrack:13.4.2016 16:30

Ahoj potřebuju pomoct podle tutorialů a knížky si dělám blog, ale příspěvky se mi zobrazují od nejstaršího po nejnovější. Potřeboval bych to prohodit. Aby na vrch byly ty nejnovější.
Zde je kód:

public function extractPosts() {
  $posts = $this->db->dbselect('posts', array('*'));
  foreach ($posts as $key => $post) {
    $posts[$key]['content'] =
      \Michelf\Markdown::defaultTransform($post['content']);
  }
  $template = 'list-posts.php';
  include_once 'frontend/template/' . $template;
}

a poté jen foreach na vypsaní:

<?php require_once 'inc/header.php'; ?>
<?php foreach ($posts as $post): ?>
  <h3><?php echo (!empty($post['title']) ?
    htmlspecialchars($post['title']) :
    'Příspěvek #' . $post['id']); ?></h3>
  <h3><?php echo (!empty($post['image']) ?
    htmlspecialchars($post['image']) :
    'Příspěvek #' . $post['id']); ?></h3>
  <p><?php echo implode(' ', array_slice(explode(' ',
    strip_tags($post['content'])), 0, 10)); ?> [...]</p>
  <a href="<?php echo $this->base->url."?post-id=".$post['id']; ?>"
    class="btn btn-primary">Podrobnosti</a>
  <hr/>
<?php endforeach; ?>
<?php require_once 'inc/footer.php'; ?>

Tady je ještě část souboru pro databazi.

public function dbselect($table, $col, $term = NULL) {
  $colsSQL = implode(', ', $col);
  $termSQL = '';
  $parameters = array();
  if (is_array($term)) {
    $i = 0;
    foreach ($term as $col => $value) {
      if ($i == 0) {
        $termSQL .= " WHERE `$col` = ?";
      } else {
        $termSQL .= " AND `$col` = ?";
      }
      $parameters[$i] = $value;
      $i++;
    }
  }

  $query = $this->db->prepare("SELECT $colsSQL
                                 FROM `$table`".
                                 $termSQL);
  try {
    $query->execute($parameters);
    $records = $query->fetchAll(PDO::FETCH_ASSOC);
  } catch (PDOException $e) {
    echo $e->getMessage();
    $records = false;
  }

  $query->closeCursor();
  return $records;
}

Děkuju moc za jakoukoliv pomoc :-)

 
Odpovědět
13.4.2016 16:30
Avatar
mayo505
Tvůrce
Avatar
mayo505:13.4.2016 16:41

no s týmto kódom to neni až také jednoduché, lebo máš jednu metódu ktorá vykonáva všetky selecty.
Jedno riešenie je pridanie nepovinného parametru funkcii dbselect a jeho použitie vo forme sql klauzuly order by tu

$query = $this->db->prepare("SELECT $colsSQL
                                 FROM `$table`".
                                 $termSQL);
 
Nahoru Odpovědět
13.4.2016 16:41
Avatar
Crrack
Člen
Avatar
Odpovídá na mayo505
Crrack:13.4.2016 22:19

Můžeš mi to prosím napsat jak to sepsat. Nějak i při hledaní jsem na to furt nepřišel. Já se PHP moc nevěnuji.

 
Nahoru Odpovědět
13.4.2016 22:19
Avatar
Odpovídá na Crrack
Dominik Klapuch:13.4.2016 23:15

Ten kód je moc divokej :) Nejlehčí budeš mít, když do metody dbSelect přidáš další parametr v podobě $orderBy a ten připojíš za $termSql.

V podstatě nějak takto:

public function dbselect($table, $col, $term = NULL, $orderBy = null).......
$query = $this->db->prepare("SELECT $colsSQL
                                 FROM `$table`".
                                 $termSQL . $orderBy);.....
dbSelect('tabulka', 'sloupce', 'nevim', 'ORDER BY datum DESC');
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
13.4.2016 23:15
Kód a data patří k sobě.
Avatar
mayo505
Tvůrce
Avatar
Odpovídá na Crrack
mayo505:14.4.2016 0:05

najľahšie to bude tak ak píše Dominik :)

 
Nahoru Odpovědět
14.4.2016 0:05
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.