Nico: CGI - Abfrageergebnisse in searchable database

Hallo,

die Felder fuer eine cig-Abfrage habe ich erstellt, und das, was in diese Felder eingetragen wird, wird auch >korrekt< uebernommen und aufgelistet wiedergegeben.

Jetzt stelle ich mir folgende Fragen:

1. Wie stelle ich es an, die Ergebnisse der Abfrage so zu konfigurieren, dass sie eine database aufgenommen werden, anstatt einfach untereinander aufgelistet zu sein?

2. Wie erstelle ich eine Routine, die es erlaubt, die database zu durchsuchen?

Herzlichen Dank fuer Eure Hilfe (in ...bitte... Anfaenger-verstaendlicher Form)

Nico

  1. Hallo Nico

    1. Wie stelle ich es an, die Ergebnisse der Abfrage so zu konfigurieren, dass sie eine database aufgenommen werden, anstatt einfach untereinander aufgelistet zu sein?

    falls du PERL benutzt mit dbmopen/dbmclose (für einfache Datenbanken)
    Diese Funktionen benutzen ein sogenanntes assoziatives Array, d.h. jeder Datensatz ist mittels eines Schlüsselwertes aufzufinden.

    reinschreiben etwa so:
    dbmpopen(%NamederDatenbank,"Pfad dahin",0600);   # 0400 lesen 0600 schreiben
    $NamederDatenbank{$Schlüssel} = "Datensatzinhalt";
    dbmclose(%NamederDatenbank);

    lesen:
    dbmopen(%NamederDatenbank,"Pfad dahin",0600);
    $Datensatz=$NamederDatenbank{$Schlüssel};
    dbmclose;

    hab‚s aber noch nicht ausprobiert. Soll unter Win32-Perl eventuell noch nicht funktionieren.

    Für größere Datenbanken versuch es mal mit MySQL als Datenbankmanagementsystem. Da kannst du dann mit SQL richtige Abfragen in deinen CGI-code einbauen.

    Chiau
    Pit

    1. Ich möchte mich auch näher mit Datenbanken, speziell SQL beschäftigen.
      Was genau benötige ich dazu ?

      Habe Erfahrungen mit CGI

      Gruß
      Andre

      1. Ich möchte mich auch näher mit Datenbanken, speziell SQL beschäftigen.
        Was genau benötige ich dazu ?

        Hallo Andre,

        vor zwei Wochen stand ich vor dem selben Problem wie du.

        Folgende Voraussetzungen: MySQL/MSQL auf dem Rechner installieren
        Perl-Modul DBI (ist bei perl5 glaube ich standardmäßig dabei, vergewissere dich, daß perl5 installiert ist).

        Hier ein paar kleine Routinen, mit denen ich arbeite:

        sub Create_DB_Connection{
        use DBI;
        $db_name = "test";
        $user = "ich";
        $pw = "Top-secret";
        $DSN  = "DBI:mysql:$db_name";
        $dbh  = DBI->connect($DSN,$user,$pw) die "Cannot connect: $DBI::errstr\n" unless $dbh;
        return;
        }

        #########################################

        sub Do_SQL{
          eval{
              $sth = $dbh->prepare($SQL);
             };

        if($@){
            $dbh->disconnect;
            print "Content-type: text/html\n\n";
            print "An ERROR occurred! $@\n";
            exit;
          }
          else
          {
          $sth->execute;
          }
        return ($sth);
        }

        ###################

        &Create_DB_Connection
        #stellt die Verbindung her

        $SQL = "select * from tabelle1";
        #das ist das SQL-Statement

        &Do_SQL;
        #führt das SQL-Statement aus

        while (@datensatz = $sth->fetchrow_array) {
             foreach $satz (@datensatz) {print $satz}
              }
        #gibt die einzelnen Datensätze aus

        $dbh->disconnect;
        #trennt die Verbindung zu Datenbank

        #zu $sth->fetchrow_array solltest du dir auch unbedingt die Manpage von DBI ansehen. Stehen sehr interessante Sachen drin.

  2. Hallo Pit, André und alle anderen,

    Ich stelle mir die Frage, weshalb ich ueberhaupt eine Datenbank anlegen soll. Genuegte doch voll und ganz, wenn die aufgelisteten Ergebnisse meiner cgi-Abfrage mit einer vernuenftigen Suchroutine so abzufragen waeren, dass die Ergebnisse der Suche ebenfalls aufgelistet wuerden.

    Aber !!!

    Wie erstelle ich eine Suchroutine, die die Ergebnisliste einer cgi-Abfrage durchsucht und die Suchergebnisse darstellt?

    Im voraus meinen besten Dank
    Nico

    1. Hallo Nico

      Falls Du die Ergebnisse von mehreren Browser-Anfragen durchsuchen willst, müssen die Daten in einer Datenbank gespeichert werden.

      -> siehe Beiträge von Pit und André

      Willst Du jedoch nur alle Input-Felder aus dem gerade übermittelten Formular (also alle CGI-Parameter in der CGI-Query oder am STDIN) durchsuchen und eine Auswahl davon darstellen, dann genügt es, in einer Schlaufe die Parameter zu durchlaufen und mit einem Regular-Expression die Gesuchten Ergebnisse zu ermitteln.

      Bitte präzisiere jedoch Deine Anforderungen, damit wir uns eine passendere Lösung ausdenken dürfen ;-)

      Grüsse

      Tom