seb: Datenbank Output wird nicht angezeigt

Hallo,
ich hatte vor einen simplen Blog für eigene Zwecke in Perl zu schreiben.
Als Datenbank verwende ich MLDBM. Mein Problem besteht darin, dass wenn ich die Seite im Browser aufrufe, ich die Inhalte nicht angezeigt bekomme. Wenn ich jedoch das Script in der Shell ausführe, sehe ich den gewünschten Output!

<code>

html start hier

for(my $i=1; $i <= $db{index}{num}; $i++) {
   print p("$db{$i}{message}")."\n";
   print p("by $db{$i}{user} at $db{$i}{date}")."\n";
}

html ende hier

</code>

zur Erläuterung:
$db{index}{num} enthält die maximale Anzahl der Einträge
Für jeden Eintrag gibt es einen Hash mit "message user date"
also Hash 1, 2, 3, für den jeweiligen Eintrag.

btw:
Ich Wünsche euch ein frohes Weihnachtsfest!

Seb

  1. Hello,

    hast Du auch einen Content-Header vorweggeschickt?

    print "Content-type: text/html\r\n\r\n";

    Harzliche Grüße vom Berg und Frohe Weihnachtszeit

    Tom

    --
    Nur selber lernen macht schlau

    1. <code>

      #!/usr/bin/perl

      use strict;
      use CGI qw(:standard);
      use CGI::Carp qw(fatalsToBrowser);
      use MLDBM qw(DB_File Storable);

      our $dbm_file = "/home/seb/blog.db";

      our %db;
      tie %db, "MLDBM", $dbm_file;

      print header();
      print start_html(-Title => "Blog");
      print "<link href="style.css" rel="stylesheet" type="text/css" media="screen" title="style">\n";
      print start_form();

      print h1("Blog")."\n";

      for(my $i=1; $i <= $db{index}{num}; $i++) {
              print p("$db{$i}{message}")."\n";
              print p("by $db{$i}{user} at $db{$i}{date}")."\n";
      }

      print end_form();
      print end_html();

      untie %db;

      </code>

      <browser ouput>

      <!DOCTYPE html
       PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
      <head>
      <title>Blog</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      </head>
      <body>
      <link href="style.css" rel="stylesheet" type="text/css" media="screen" title="style">
      <form method="post" action="/priv/blog.cgi" enctype="multipart/form-data">
      <h1>Blog</h1>
      </form>
      </body>
      </html>

      </browser output>

      <shell output>

      Content-Type: text/html; charset=ISO-8859-1

      <!DOCTYPE html
              PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
      <head>
      <title>Blog</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      </head>
      <body>
      <link href="style.css" rel="stylesheet" type="text/css" media="screen" title="style">
      <form method="post" action="" enctype="multipart/form-data">
      <h1>Blog</h1>
      <p>Hello World!</p>
      <p>by seb at 12:43 24.12.2007</p>
      </form>
      </body>
      </html>

      </shell output>

      Ich weiß nich warum er mir den Datenbankeintrag nicht im Browser anzeigt...

      Seb

      1. Ich weiß nich warum er mir den Datenbankeintrag nicht im Browser anzeigt...

        Offensichtlich ist deine Datenbankstruktur eine andere als du annimmst. Deine Schleife ist sowieso merkwürdig, aber ohne die genaue From der Daten zu kennen läßt sich nichts konkretes sagen.

        Laß dir mal mit Data::Dumper die Struktur anzeigen.

        Struppi.

        1. Offensichtlich ist deine Datenbankstruktur eine andere als du annimmst. Deine Schleife ist sowieso merkwürdig, aber ohne die genaue From der Daten zu kennen läßt sich nichts konkretes sagen.

          Warum sollte die Struktur eine andere sein als ich annehme, wenn ich das Script normal ausführe bekomme ich meine gewünschten Daten.

          In der Datenbank befinden sich Hashes, der eine heisst
          index mit einem Skalar num der die maximale Anzahl der Einträge beinhaltet.

          Die weiteren Hashes haben Zahlen als Namen, der letzte ist also in index num vermerkt. Theoretisch funktioniert es ja, wie der aufruf in der Shell betsätigt. Mein Problem ist nur das ich dies beim aufruf im Browser nicht bekomme...

          Seb

          1. Offensichtlich ist deine Datenbankstruktur eine andere als du annimmst. Deine Schleife ist sowieso merkwürdig, aber ohne die genaue From der Daten zu kennen läßt sich nichts konkretes sagen.

            Warum sollte die Struktur eine andere sein als ich annehme, wenn ich das Script normal ausführe bekomme ich meine gewünschten Daten.

            Weil du nicht das Ergebniss bekommst das du erwartest?
            Was heißt normal ausführen?

            In der Datenbank befinden sich Hashes, der eine heisst
            index mit einem Skalar num der die maximale Anzahl der Einträge beinhaltet.

            wie wird dieser ermittelt?
            Welchen Wert hat der?

            Die weiteren Hashes haben Zahlen als Namen, der letzte ist also in index num vermerkt. Theoretisch funktioniert es ja, wie der aufruf in der Shell betsätigt. Mein Problem ist nur das ich dies beim aufruf im Browser nicht bekomme...

            Dann ist irgendetwas falsch. Wir können dir aber natürlich nicht sagen was, da wir nicht Wissen was in deiner DB steht.

            Struppi.

            1. Weil du nicht das Ergebniss bekommst das du erwartest?
              Was heißt normal ausführen?

              in der Shell ausführen:
              ./blog.cgi

              In der Datenbank befinden sich Hashes, der eine heisst
              index mit einem Skalar num der die maximale Anzahl der Einträge beinhaltet.

              wie wird dieser ermittelt?

              $db{index}{num}

              Welchen Wert hat der?

              im moment 1

              Dann ist irgendetwas falsch. Wir können dir aber natürlich nicht sagen was, da wir nicht Wissen was in deiner DB steht.

              Momentane Struktur:

              %index
                 $num=1
              %1
                 $message="Hello World!"
                 $date="12:43 24.12.2007"
                 $user="seb"

              Seb

              1. Weil du nicht das Ergebniss bekommst das du erwartest?
                Was heißt normal ausführen?

                Dann hat dein Problem keine lolgische Erklärung, also nicht mit dem was wir Wissen. Kann es sein dass die Rechte nicht stimmen?
                Warum prüfst du nicht ob eine Operation tasächlich erfolgreich ist?
                Steht ja auch so in der Doku:
                $dbm = tie %o, 'MLDBM' [..other DBM args..] or die $!;

                Struppi.

                1. Dann hat dein Problem keine lolgische Erklärung, also nicht mit dem was wir Wissen. Kann es sein dass die Rechte nicht stimmen?
                  Warum prüfst du nicht ob eine Operation tasächlich erfolgreich ist?

                  Okay das ist mir jetzt peinlich. Ich habe den die angefügt und bekam ein Permission Denined. Nachdem ich die Rechte der Datenbank für www-data angepasst habe funktioniert die Seite.

                  Vielen dank und Entschuldigung!

                  Frohes fest!

                  Seb

            2. Hello,

              gibt es da sowas, wie unterschiedliche Zugriffsrechte?

              Harzliche Grüße vom Berg und Frohe Weihnachtszeit

              Tom

              --
              Nur selber lernen macht schlau

              1. gibt es da sowas, wie unterschiedliche Zugriffsrechte?

                Ja. Aber frag mich nicht nach Deatils bin keine Linux Experte.

                Struppi.

      2. our $dbm_file = "/home/seb/blog.db";
        our %db;

        Btw, Finger weg von our, wenn Du kein Modul schreiben willst *und* die via our deklarierten Variablen öffentlich sein sollen. Aber das nur am Rande :)

        Siechfred

        --
        Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.