Beiträge von ledzep

    Habe folgendes Problem hole mir mit dem Select Daten aus einer Datenbank um diese in einem Drop-Down Menü in einem Formular anzuzeigen. Diese können dann ausgewählt. Um die ID zu übermitteln wird als Absendwert die ID übergeben. Das ganze weil die Datenbank aus mehreren Tabellen besteht.

    Wie übergebe ich auch den Inhalt der zwischen steht auch noch an das script welches die formulardaten in der datenbank speichert und eine datei hochlädt.

    --------------sql-statement------------------

    $sql=qq{SELECT DISTINCT p.pid, p.projekt, mc_rd3_autorprojekt.pid
    FROM mc_rd3_projekt p, mc_rd3_autorprojekt, mc_rd3_icd
    WHERE p.pid=mc_rd3_autorprojekt.pid
    };

    ----------Ende SQL-Statement-------------------

    ----------Drop-Down Auswahlfeld----------------

    <select name="vorhandprojekte">
    <option></option>
    [$ while (($p_pid, $p_projekt) = $icd_ergebnis->fetchrow_array()) $]
    <option value="[+ $p_pid +]">[+ $p_projekt +]</option>


    [$ endwhile $]

    -------------Ende Auswahlfeld----------------
    zum parsen der daten verwende ich param.
    zum zwischenspeichern der daten die funktion %data.

    also im perlscript wird dann das ganze

    in $data{vorhandprojekte} gespeichert da hab ich die id die ich für die verknüpfung der tabellen brauche.

    also meine Idee war ein Hidden-Feld um das projeknamen zu übergeben. Allerdings weiß ich nicht wie es ausschauen muss das ich den auch übermitteln kann.

    ich mir vorstelle d.h. die funktioniert garnicht.
    Vielleicht weiß jemand woran es liegt, schätze es ist ein logisches Problem.

    Gruß

    ledzep

    ist mir gestern auch aufgefallen, das man sich vom script-verzeichnis aus in der verzeichnishierarchie auf-und ab bewegen muss. funktioniert jetzt auch es in einem anderen verzeichnis zu speichern. allerdings muss man den punkt auch weglassen.

    Hi Leute finde den Fehler in dem Script nicht.
    Vielleicht kann mir jemand helfen. Allerdings wird auch keine Fehlermeldung erzeugt. Sondern Statt der Erfolgsmeldung nur eine Lehre Seite.
    Es handelt sich um ein Dateiuploadscript. Die Datei wird auch nicht im angegebenen Pfad abgespeichert. Díe Frage ist wie gebe ich hier den Pfad richtig an?

    ------------------------------

    #!/usr/bin/perl -w

    use strict;
    use CGI; # Modul fuer CGI-Programme

    my $cgi = new CGI; # neues Objekt erstellen

    # Content-type fuer die Ausgabe
    print $cgi->header(-type => 'text/html');

    # die datei-daten holen
    my $file = $cgi->param("uploaded_file");

    # dateinamen erstellen und die datei auf dem server speichern
    my $fname = 'file_'.$$.'_'.$ENV{REMOTE_ADDR}.'_'.time;
    my $pfad = "\\dev.erlf.siemens.de:8000/test/mc-rd3/icds/icdpflege/icdformular/files/";
    open (DAT, '>$pfad.$fname' or die 'Error processing file: ',$!);

    # Dateien in den Binaer-Modus schalten
    binmode $file;
    binmode DAT;

    my $data;
    while(read $file,$data,1024) {
    print DAT $data;
    }
    close DAT;

    print <<"HTML";
    <html>
    <head>
    <title>Fileupload</title>
    </head>
    <body bgcolor="#FFFFFF">
    <h1>Die Datei $file wurde erfolgreich hochgeladen.</h1>


    Die Datei $file wurde erfolgreich auf dem Server
    gespeichert.
    </p>
    </body>
    </html>
    HTML

    -------------------------------------

    Gruß

    ledzep

    Hallo habe folgendes Script um eine Datei auf den Webserver hochzuladen.
    Wie intergriere ich jedoch den Zugriff auf einen Apache Server mit reqest in dieses Script?

    use CGI;
    use CGI::Carp 'fatalsToBrowser';
    use Data::Dumper;

    $CGI::POST_MAX = 1024 * 1024; # Hoechstens 1 MByte akzeptieren!
    my $query = new CGI;

    use WebCenter;

    my $timestamp = time();
    my $scriptname = "checkin1.pl";
    # my ($dir) = ($ENV{SCRIPT_FILENAME} =~ q#(.*)/#);


    use Apache::Request;
    my $r = Apache->request();
    my $apr = Apache::Request->new($r);

    # Es sind Daten angekommen; auswerten.
    my $filefh = $query->upload('filename');
    my $finfo = $query->uploadInfo($filefh);

    # Es sind Daten angekommen; auswerten.
    my $filefh = $query->upload('filename');
    my $finfo = $query->uploadInfo($filefh);

    # Wir pruefen aber zuerst, ob der File-Transfer auch
    # richtig abgeschlossen werden konnte (User hat nicht
    # mit STOP die Uebertragung geschlossen):
    if (!$filefh && $query->cgi_error) {
    my $errmsg = $query->header(-status => $query->cgi_error);
    print
    $query->header(),
    $query->start_html("Fehler"),
    "Fehler beim Upload: $errmsg",
    $query->end_html();
    exit 0;
    }

    while (<$filefh>) {
    # Tue etwas mit der aktuellen Zeile in $_

    # Der Filehandle ist okay, wir lesen nun alle Daten ein
    # und speichern sie irgendwohin. Wir gehen davon aus,
    # dass es sich um eine binaere Datei handelt:
    open(OUTFILE, "> /tmp/fromupload.$$") or die "can't create file: $!\n";
    while (read($filefh, $buffer, 1024)) {
    print OUTFILE $buffer;
    }
    close(OUTFILE);

    # Okay, alles klar!
    print
    $query->header(),
    $query->start_html('File uploaded'),
    "Erhalten: ", $query->p(),
    $query->pre(Dumper($finfo)),
    $query->end_html();


    # Wir speichern auch die diversen Informationen zu dieser Datei
    # in einem Logfile (das sollte lieber mittels flock()
    # atomar geschehen (NYI)).
    open(LOGFILE, ">> \\dev.erlf.siemens.de:8000/") or die "can't open log: $!\n";
    print LOGFILE "/tmp/fromupload.$$:\n", Dumper($finfo), "\n";
    close(LOGFILE);


    Gruß

    ledzep

    solltest statt dem spaltenamen den tabellenamen verwenden dann sollte es funktionieren

    wie viele tabellen hast du überhaupt?

    mit der abfrage lässt du dir doch nur die werte der spalte table_name aus der tabelle user_ tables anzeigen. bei spaltennamen solltest du keinen unterstrich verwenden, kann einen leicht durcheinander bringen.

    Hallo,

    weiß jemand welche Besonderheiten es gibt wenn man von einer Windows Workstation eine Datei auf einen Unix-Server auf dem ein Share ingerichtet ist?

    Beim Formular z.B. oder beim Uploadskript?

    Mein Uploadskript schaut so aus.

    #!/usr/bin/perl


    use CGI;
    use Cwd qw(cwd);

    use WebCenter;

    my $timestamp = time();
    my $scriptname = "checkin1.pl";
    my ($dir) = ($ENV{SCRIPT_FILENAME} =~ q#(.*)/#);

    sub form {
    use Apache::Request;
    my $r = Apache->request();
    my $apr = Apache::Request->new($r);
    my @keys = $apr->param;

    my %form;
    foreach my $key(@keys) {

    my @value = $apr->param($key);
    next unless scalar @value;

    if ( @value > 1 ) {
    $form{$key} = \@value;
    } else {
    $form{$key} = $value[0];
    }
    }

    my $upload = $apr->upload;
    if ($upload) {
    $form{UPLOAD} = $upload;
    }

    return \%form;
    }


    my $form = form(); # Wherever you put this function
    my $msgID = $form->{msgID};

    my $saveDir="files";

    if (my $file = $form->{UPLOAD}) {
    ($filename) = $file->filename =~ m/[\\\/]([^\\\/]+)$/; # If you need the name
    # Save the file at $filelocation
    if ( open(F, ">\\ural\icd\$saveDir\${filename}") ) {
    my $filehandle = $file->fh;
    while (my $d = <$filehandle>) {
    print F $d;
    }
    close F;
    } else {
    $r->log()->error("Ich hab ein Problem(...chen):\n$!\n");
    }
    }

    #-------------------------


    print "Location: done.html\n\n";

    Vielleicht kann mir ja jemand helfen weil ich weiß nicht wo das Problem liegt.
    hab auch beim formular method auf "post" gesetzt funktioniert ja auch wenn ich auf einen anderen Server hochlade. Bloß auf den Unix-Share lässt sich die Datei nicht ablegen. Hab auch alle Rechte d.h. r,w und x.

    Gruß

    ledzep

    wie schaut des in perl aus?

    Habe ein HTML Formular über das ich mir den Pfad durch ein Fileupload-Feld hole. Das Formular wird dann ein Script "rd3insert.pl" übergeben das die Informationen zu der Datei in der Datenbank speichert also dann auch den Pfad auf dem Server wo die Datei abgelegt werden soll.

    Der Pfad wird in einem Feld "dateiname" in der Relation "mc_rd3_icd" der Datenbank abgelegt. Also muss der Upload gemacht werden bevor der INSERT in die betroffenen Tabelle gemacht wird.

    hier das bisherige Script.

    use strict;
    use DBI;
    use CGI;
    use WebCenter;

    my (%data) = WebCenter::parseParam();
    my $dbh = WebCenter::connectDB(100);


    # ---------------- Print teil ANFANG -----------------------
    my $p;
    my $xx;
    my $q = new CGI;
    my $next_seq_projekt;
    my $next_seq_autor;
    my $next_seq_icd;


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

    # hier mal alle uebergebenen werte ausgeben:

    my @names = $q->param();
    foreach $p (@names) {

    $xx = $q->param($p);
    print "$p = $xx
    ";
    }
    # ---------------- Print teil ENDE -----------------------

    # Projekt und Autor existieren bereits

    # wenn Projekt und Autor aus der Liste gewählt werden, steht dort ein Wert >= 1 drinnen.
    # wenn nicht gewählt, steht dort nichts drinnen
    # also Abfrage entweder:
    # if ( ($data{vorhandprojekte} >= 1) && ($data{vorhandautor} >= 1) )
    # oder einfach nur:
    # if ( ($data{vorhandprojekte}) && ($data{vorhandautor}) )
    # == heißt, wenn in denbeiden Feldern "etwas" steht

    if ( ($data{vorhandprojekte}) && ($data{vorhandautor}) )
    {

    my $next_seq_projekt;
    my $next_seq_autor;
    my $next_seq_icd;

    print "
    im 1. if - FALL
    ";
    print "
    Gewaehlte Projektnummer = $data{vorhandprojekte}
    ";
    print "
    Gewaehlte Autornummer = $data{vorhandautor}
    ";

    # Eintrag von pid und aid in die Relation mc_rd3_autorprojekt zwecks Verknüpfung der Tabellen mc_rd3_autor und mc_rd3_projekt. -->
    print "Jetzt insert in Tabelle MC_RD3_AUTORPROJEKT
    ";
    $dbh->do(qq{ INSERT
    INTO MC_RD3_AUTORPROJEKT
    (AID,PID)
    VALUES (
    '$data{vorhandautor}',
    '$data{vorhandprojekte}'
    )
    }
    ) or WebCenter::error($DBI::err, undef, undef, $dbh);

    $dbh->commit;

    ($next_seq_icd)= $dbh->selectrow_array('select SEQ_MC_RD3.nextVal FROM DUAL') or WebCenter::error($DBI::err);
    print "Sequence = $next_seq_projekt
    ";

    $dbh->do(qq{ INSERT
    INTO MC_RD3_ICD
    (ICDID,DATUM,AUTORID,VERSION,TITEL,STICHWORT1,STICHWORT2,STICHWORT3,DATEINAME,PROJEKTID)
    VALUES (
    $next_seq_icd,
    '$data{datum}',
    '$data{vorhandautor}',
    '$data{version}',
    '$data{titel}',
    '$data{stichwort1}',
    '$data{stichwort2}',
    '$data{stichwort3}',
    '$data{dateiname}',
    '$data{vorhandprojekte}'

    )
    }
    ) or WebCenter::error($DBI::err, undef, undef, $dbh);


    $dbh->commit;

    }

    if ( ($data{vorhandprojekte}) && (!$data{vorhandautor}) )
    {

    my $next_seq_projekt;
    my $next_seq_autor;
    my $next_seq_icd;

    ($next_seq_autor)= $dbh->selectrow_array('select SEQ_MC_RD3.nextVal FROM DUAL') or WebCenter::error($DBI::err);
    print "Sequence = $next_seq_autor
    ";

    $dbh->do(qq{ INSERT
    INTO MC_RD3_AUTOR
    (AID,NAME,VORNAME)
    VALUES
    (
    $next_seq_autor,
    '$data{name}',
    '$data{vorname}'
    )

    }
    ) or WebCenter::error($DBI::err, undef, undef, $dbh);

    $dbh->do(qq{ INSERT
    INTO MC_RD3_AUTORPROJEKT
    (AID,PID)
    VALUES (
    $next_seq_autor,
    '$data{vorhandprojekte}'
    )
    }
    ) or WebCenter::error($DBI::err, undef, undef, $dbh);

    ($next_seq_icd)= $dbh->selectrow_array('select SEQ_MC_RD3.nextVal FROM DUAL') or WebCenter::error($DBI::err);
    print "Sequence = $next_seq_icd
    ";

    $dbh->do(qq{ INSERT
    INTO MC_RD3_ICD
    (ICDID,DATUM,AUTORID,VERSION,TITEL,STICHWORT1,STICHWORT2,STICHWORT3,DATEINAME,PROJEKTID)
    VALUES (
    $next_seq_icd,
    '$data{datum}',
    $next_seq_autor,
    '$data{version}',
    '$data{titel}',
    '$data{stichwort1}',
    '$data{stichwort2}',
    '$data{stichwort3}',
    '$data{dateiname}',
    '$data{vorhandprojekte}'


    )
    }
    ) or WebCenter::error($DBI::err, undef, undef, $dbh);


    $dbh->commit;

    }


    if ( (!$data{vorhandprojekte}) && ($data{vorhandautor}) )
    {


    my $next_seq_projekt;
    my $next_seq_autor;
    my $next_seq_icd;

    ($next_seq_projekt)= $dbh->selectrow_array('select SEQ_MC_RD3.nextVal FROM DUAL') or WebCenter::error($DBI::err);
    print "Sequence = $next_seq_projekt

    ";

    $dbh->do(qq{ INSERT
    INTO MC_RD3_PROJEKT
    (PID,PROJEKT)
    VALUES
    (
    $next_seq_projekt,
    '$data{projekt}'
    )

    }

    ) or WebCenter::error($DBI::err, undef, undef, $dbh);


    $dbh->do(qq{ INSERT
    INTO MC_RD3_AUTORPROJEKT
    (AID,PID)
    VALUES (
    '$data{vorhandautor}',
    $next_seq_projekt
    )
    }
    ) or WebCenter::error($DBI::err, undef, undef, $dbh);


    ($next_seq_icd)= $dbh->selectrow_array('select SEQ_MC_RD3.nextVal FROM DUAL') or WebCenter::error($DBI::err);
    print "Sequence = $next_seq_icd

    ";

    $dbh->do(qq{ INSERT
    INTO MC_RD3_ICD
    (ICDID,DATUM,AUTORID,VERSION,TITEL,STICHWORT1,STICHWORT2,STICHWORT3,DATEINAME,PROJEKTID)
    VALUES (
    $next_seq_icd,
    '$data{datum}',
    '$data{vorhandautor}',
    '$data{version}',
    '$data{titel}',
    '$data{stichwort1}',
    '$data{stichwort2}',
    '$data{stichwort3}',
    '$data{dateiname}',
    $next_seq_projekt

    )
    }
    ) or WebCenter::error($DBI::err, undef, undef, $dbh);

    $dbh->commit;


    }


    if ( (!$data{vorhandprojekte}) && (!$data{vorhandautor}) )

    {


    my $next_seq_projekt;
    my $next_seq_autor;
    my $next_seq_icd;

    ($next_seq_projekt)= $dbh->selectrow_array('select SEQ_MC_RD3.nextVal FROM DUAL') or WebCenter::error($DBI::err);
    print "Sequence = $next_seq_projekt

    ";

    $dbh->do(qq{ INSERT
    INTO MC_RD3_PROJEKT
    (PID,PROJEKT)
    VALUES
    (
    $next_seq_projekt,
    '$data{projekt}'
    )
    }
    ) or WebCenter::error($DBI::err, undef, undef, $dbh);


    ($next_seq_autor)= $dbh->selectrow_array('select SEQ_MC_RD3.nextVal FROM DUAL') or WebCenter::error($DBI::err);
    print "Sequence = $next_seq_autor
    ";

    $dbh->do(qq{ INSERT
    INTO MC_RD3_AUTOR
    (AID,NAME,VORNAME)
    VALUES
    (
    $next_seq_autor,
    '$data{name}',
    '$data{vorname}'
    )

    }
    ) or WebCenter::error($DBI::err, undef, undef, $dbh);

    $dbh->commit;


    $dbh->do(qq{ INSERT
    INTO MC_RD3_AUTORPROJEKT
    (AID,PID)
    VALUES (
    $next_seq_autor,
    $next_seq_projekt
    )
    }
    ) or WebCenter::error($DBI::err, undef, undef, $dbh);

    $dbh->commit;


    print "Jetzt insert in Tabelle MC_RD3_ICD
    ";

    ($next_seq_icd)= $dbh->selectrow_array('select SEQ_MC_RD3.nextVal FROM DUAL') or WebCenter::error($DBI::err);
    print "Sequence = $next_seq_icd

    ";

    $dbh->do(qq{ INSERT
    INTO MC_RD3_ICD
    (ICDID,DATUM,AUTORID,VERSION,TITEL,STICHWORT1,STICHWORT2,STICHWORT3,DATEINAME,PROJEKTID)
    VALUES (
    $next_seq_icd,
    '$data{datum}',
    $next_seq_autor,
    '$data{version}',
    '$data{titel}',
    '$data{stichwort1}',
    '$data{stichwort2}',
    '$data{stichwort3}',
    '$data{dateiname}',
    $next_seq_projekt

    )
    }
    ) or WebCenter::error($DBI::err, undef, undef, $dbh);


    $dbh->commit;

    }

    print "Der Eintrag des Datensatzes in der Datenbank war erfolgreich!\n

    ";

    $dbh->disconnect;

    print "\Neuer Eintrag
    \n";
    print "\Zur Übersicht
    \n";


    Wie schaut der Teil vor dem INSERT in die Tabelle mc_rd3_icd aus, wo der Dateiupload durchgeführt wird?

    Habe sowas bisher nicht gemacht.

    Gruß

    ledzep

    Hallo.

    habe ein Formular über das ich daten in die datenbank eintragen möchte habe aber mehrere tabellen.

    bei oracle sql gibt es die möglichkeit sich die nächste freie nummer vor dem eintragen der id zu holen. (next sequence)

    wie schaut hier die genaue syntax aus?

    als scriptsprache verwende ich perl.

    Gruß

    ledzep

    Hallo Leute,

    wie funktioniert die überprüfung auf buchstaben mit einen Javascript
    d.h. nur Zeichen von A-Z und a-z sowie umlaute und scharfes ß?

    Aufbau meines bisherigen Javascripts

    <script type="text/javascript">

    function chkFormular(wert) {
    if (document.icd.datum.value == "") {
    alert("Bitte geben Sie ein Datum ein!");
    document.icd.datum.focus();
    return false;
    }

    if (document.icd.datum.value.indexOf(".") == -1) {
    alert("Bitte geben Sie das Datum im Format: tt.mm.jjjj an");
    document.icd.datum.focus();
    return false;
    }

    if (document.icd.datum.value.length < 10) {
    alert("Bitte geben Sie das Datum im Format: tt.mm.jjjj an");
    document.icd.datum.focus();
    return false;
    }

    if (document.icd.vorhandprojekte.value == ""
    && document.icd.projekt.value == "") {
    alert("Bitte geben Sie ein Projekt an!");
    document.icd.vorhandprojekte.focus();
    document.icd.projekt.focus();
    return false;
    }

    if (document.icd.vorhandautor.value == ""
    && document.icd.name.value == "") {
    alert("Bitte geben Sie einen Autor an!");
    document.icd.vorhandautor.focus();
    document.icd.name.focus();
    return false;
    }

    if (document.icd.titel.value == "") {
    alert("Bitte geben Sie einen Titel ein!");
    document.icd.titel.focus();
    return false;
    }

    if (document.icd.stichwort1.value == "") {
    alert("Bitte geben Sie ein Stichwort ein!");
    document.icd.stichwort1.focus();
    return false;
    }

    if (document.icd.dateiname.value == "") {
    alert("Bitte geben Sie den Dateinamen des ICDs an!");
    document.icd.dateiname.focus();
    return false;
    }

    if (document.icd.version.value == ""){
    alert("Bitte geben Sie die Version des ICDs!");
    document.icd.version.focus();
    return false;
    }

    if (document.icd.datei.value == "") {
    alert("Sie habe vergessen das ICD hochzuladen!");
    document.icd.datei.focus();
    return false;
    }
    }

    </script>

    Gruß

    ledzep

    so einfach ist das nicht in der firma wo ich bin. der punkt is das die datei gleichzeitig mit den mehreren informationen zu dem dokument wie autor, name, vorname, titel etc. in der datenbank gespeichert werden sollen. so solls jedenfalls sein. es gibt auch einen speziellen datentyp bei oracle-datenbanken dafür "blob".