Rolf B: Probleme Data in Date-Bank zu einsetzen

Beitrag lesen

Hallo Joseba,

ok, folgende Korrekturen:

1. Ein kleiner Kopierfehler von mir in dem <article> Teil von PostOkT, da sollte

   <h2>Message from <?= htmlspecialchars($message['name']) ?> (<?= htmlspecialchars($message['email'])?>)</h2>

stehen ($message['email'] statt $message['name']).

2. Ein Fehler von Dir. Du hast am Ende von getMessages { und } hinzugefügt.

Dein Code:

    function getMessages()
    {
        .....
        if ($result === FALSE)
        {
            $this->reportPDOError("fetchAll(ASSOC) failed", $sql, $statement);

            return $result;
        }
    }

Mein Code:

    function getMessages()
    {
        .....
        if ($result === FALSE)
            $this->reportPDOError("fetchAll(ASSOC) failed", $sql, $statement);

        return $result;
    }

Der Unterschied ist: Mein Code führt den return-Befehl immer aus. Dein Code führt den return-Befehl nur aus, wenn fetchAll einen Fehler gemeldet hat. Wenn fetchAll ein Ergebnis liefert, führt deine Funktion überhaupt keinen return Befehl aus, das heißt: getMessages gibt NULL zurück.

Es gibt verschiedene Meinungen, ob man { und } hinschreiben soll, wenn zu einem if nur ein einziger Befehl gehört. Ich lasse sie dann weg. Andere sagen: das ist schlecht, schreibe sie immer hin. Für Dich ist es vielleicht besser, sie hinzuschreiben.

Etwas ähnliches hat Du am Anfang von getMessages gemacht. Da steht bei Dir:

        $db = getConnection();
        if (!$db) return false;
        {
            $sql = "SELECT name, email, message, datetime FROM mela ORDER BY datetime DESC";
            $statement = $db->query($sql);
        }

Da steht if (!$db) - das ist erstmal der if Befehl. Wenn $db also FALSE ist, wird der Befehl hinter dem if ausgeführt. Dieser Befehl steht in der gleichen Zeile: return false;. Damit ist der if und alles, was dazu gehört, zu Ende. Die beiden nächsten Zeilen haben mit dem if nichts mehr zu tun.

PHP hätte also sagen können: Da steht ein { und ich weiß nicht was das bedeuten soll. Aber PHP ist aus der Sprache C entstanden, und da kann man jederzeit einen { } Block verwenden. In C ist das sinnvoll, weil es da Einfluss auf die Sichtbarkeit von Variablen hat. In PHP gibt es diesen Einfluss nicht. Ein { } Block, der nicht zu einem Befehl wie if oder foreach gehört, hat keine Wirkung. Ich habe dazu etwas im Netz gesucht, und tatsächlich eine Diskussion dazu bei stackoverflow gefunden. Manche Leute verwenden solche Blöcke, um zu zeigen, dass bestimmte Dinge zusammengehören. Na gut. Das kann man tun. Aber ich glaube, bei Dir ist es nicht nötig.

Ich schlage vor, dass Du diese Version von getMessages nimmst:

    function getMessages()
    {
        $db = getConnection();
        if (!$db)
        {
            return false;
        }

        $sql = "SELECT name, email, message, datetime FROM mela ORDER BY datetime DESC";
        $statement = $db->query($sql);

        if (!$statement)
        {
            $this->reportPDOError("Cannot create query", $sql, $db);
            return false;
        }

        $result = $statement->fetchAll(PDO::FETCH_ASSOC);

        if ($result === FALSE)
        {
            $this->reportPDOError("fetchAll(ASSOC) failed", $sql, $statement);
        }
        return $result;
    }

3. Mein Fehler: der foreach Befehl in PostOkT. Wir haben schon oft geschrieben, dass es an solchen Stellen besser ist, die "alternative Syntax" zu verwenden.

Normale Syntax:

      foreach ($messages as $message)
      {
          // PHP Befehle 
      }

Alternative Syntax:

      foreach ($messages as $message) :
          // PHP Befehle 
      endfor;

Das { am Anfang der Schleife wird zu einen : am Ende der forach-Zeile, und das } am Ende der Schleife zu endfor;. Die alternative Syntax ist besser lesbar, wenn in der Schleife HTML steht. Das } übersieht man leicht, ein fettes endfor; nicht. In der Version, die ich verloren habe, statt noch die alternative Syntax drin. Das kannst Du noch ändern:

            foreach ($messages as $message) :
?>
<article>
   <h2>Message from <?= htmlspecialchars($message['name']) ?> (<?= htmlspecialchars($message['email'])?>)</h2>
   <p>Created <?= $message['datetime'] ?></p>
   <p><?= $message['message'] ?></p>
</article>
<?php
            endfor;

So, mehr sehe ich erstmal nicht.

Rolf

--
sumpsi - posui - clusi
0 53

Probleme Data in Date-Bank zu einsetzen

liebewinter
  • datenbank
  • php
  1. 1
    Rolf B
    1. 0
      liebewinter
    2. 0
      dedlfix
  2. 0
    pl
    1. 1
      Rolf B
      1. 0
        liebewinter
        1. 0
          Rolf B
          1. 0
            liebewinter
      2. 0
        liebewinter
        1. 0
          Rolf B
          1. 0
            liebewinter
            1. 0
              liebewinter
              1. 0
                liebewinter
                1. 0
                  Rolf B
                  1. 0
                    Wallpappe
                  2. 0
                    dedlfix
                    1. 0
                      Rolf B
                      1. 0
                        dedlfix
                        1. 0
                          Rolf B
                          1. 0
                            liebewinter
                            1. 0
                              Rolf B
                              1. 0
                                liebewinter
                                1. 0
                                  Rolf B
                                  1. 0
                                    liebewinter
                                    1. 0
                                      Rolf B
                                      1. 0
                                        liebewinter
                                        1. 0
                                          Rolf B
                                          1. 0
                                            liebewinter
                                            1. 0
                                              liebewinter
                                            2. 0
                                              Rolf B
                                              1. 0
                                                Tabellenkalk
                                                1. 0
                                                  Rolf B
                                              2. 0
                                                liebewinter
                                              3. 0
                                                liebewinter
                                                1. 0
                                                  Rolf B
                                                  1. 0
                                                    liebewinter
                                                    1. 0
                                                      liebewinter
                                                    2. 0
                                                      Rolf B
                                                      1. 0
                                                        liebewinter
                                                        1. 0
                                                          Rolf B
                                                          1. 0
                                                            liebewinter
                                                            1. 0
                                                              liebewinter
                                                          2. 0
                                                            liebewinter
                                                            1. 0
                                                              liebewinter
                                                              1. 0
                                                                Rolf B
                                                                1. 0
                                                                  liebewinter
                              2. 0
                                liebewinter
                                1. 0
                                  Rolf B
                                  1. 0
                                    Matthias Apsel
                                    1. 0
                                      Rolf B
                  3. 0
                    liebewinter
    2. 0
      pl