perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 17
Click for quality!




12.02.2012 / 02:26

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragAnfänger! Suche Hilfe für ein Cronjob Script (DB +eMail-Versand)
Seitenanfang
Hallo an die Forum-Mitglieder,
das ist mein erstes Thema und ich hoffe mir kann jemand helfen.

Ich bin gerade dabei mir ein Script für einen Cronjob zu basteln, habe aber noch etwas wenig Ahnung von Perl.

Was ich gerne per Script abrufen möchte:

Ich möchte eine Tabellenspalte (Mysql-DB) auf neue Einträge hin kontrollieren (z.B. Spalte "Name") und mir die Ergebnisse per Mail zuschicken lassen.

Kann mir jemand beim Zusammenbau des Scripts helfen? Oder weiß jemand, wo es so ein Script schon fertig gibt?

Ich wäre für eine Hilfe sehr dankbar :-)

Viele Grüße
Tom

Datum: 13.07.2008-20:09

Beitragre: Anfänger! Suche Hilfe für ein Cronjob Script (DB +eMail-Versa
Seitenanfang
Was hast Du denn bisher versucht? Für die Arbeit mit der Datenbank empfehle ich DBI.

Datum: 14.07.2008-16:11

Beitragre: Anfänger! Suche Hilfe für ein Cronjob Script (DB +eMail-Versa
Seitenanfang
Hallo Renee,
Danke für deine Antwort!

Bisher habe ich diesen Code zusammengesetzt, der einzeln..DB-Anbindung und Email auch funktioniert. Nur das Zusammenspiel geht noch nicht, also daß ich meine Daten zugeschickt bekomme.Kannst du mal drüberschauen?

#!/usr/bin/perl

#include the DBI module which handles the database connection
use DBI;

#connect to the mysql base named 'test' using the user and password
$dbh = DBI->connect("dbi:mysql:xxxxx",'xxxxx','xxxxx');

#prepare and execute the query
$sth=$dbh->prepare("SELECT name FROM meinetabelle'") || die "Error : $DBI::errstr";
$sth->execute;

#close the connection
$sth->finish;
$dbh->disconnect;

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

$title='Perl Mail demo';
$to='irgendwo@irgendwo.de';
$from= 'irgendwo@test.de';
$subject='Meine Testmail';

open(MAIL, "|/usr/sbin/sendmail -t");

## Mail Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
## Mail Body
print MAIL "Diese Daten wurden eingefügt: $struct \n";

close(MAIL);

print "<html><head><title>$title</title>
</head>\n<body>\n\n";

## HTML content let use know we sent an email
print "<h1>$title</h1>\n";
print "<p>A message has been sent from to $to";
print "\n\n</body></html>";

Ich habe schon vieldran herumprobiert, kann sein daß einiges jetzt falsch ist. Ich glaube ab dem Mail-Header stimmt so einiges nicht mehr.
Was ich nochmal möchte:
Ich habe eine Anzeigen-Komponente installiert und würde gerne eine E-Mail bekommen, wenn z.B. eine neue Anzeige eingetragen wurde. Aber das dann eben NUR, WENN es eine neue Anzeige gibt. Ansonsten soll mir keine Mail zugeschickt werden!Ich denke auch,daß der Select-Befehl im Moment auch nicht mehr stimmt.

Kannst du mir etwas helfen dabei?Wäre total nett.

Grüße
Tom

Datum: 14.07.2008-17:52

Beitragre: Anfänger! Suche Hilfe für ein Cronjob Script (DB +eMail-Versa
Seitenanfang
Als erstes solltest Du Dir angewöhnen, "use strict" zu verwenden (siehe auch http://wiki.perl-community.de/bin/view/Wissensbasis/UseStrict ). Das hätte Dich auch darauf hingewiesen, dass $struct nirgends initialisiert wird.

Du solltest auc die Fehler bei "open(...)" abfangen:

open(MAIL, "|/usr/sbin/sendmail -t") or die $!;

Im SQL-Statement hast Du am Ende noch ein einzelnes Anführungszeichen, das weg muss.
Du führst das Statement aus und danach machst Du gleich ein "finish" - ohne, dass Du mit den Ergebnissen irgendwas machst.

Ansonsten sieht es doch gar nicht schlecht aus.

Datum: 15.07.2008-09:02

Beitragre: Anfänger! Suche Hilfe für ein Cronjob Script (DB +eMail-Versa
Seitenanfang
Hallo Renee,

ich weiß einfach nicht wie ich die Mail mit Inhalt abschicken soll.

Ich habe jetzt diesen Code erstellt:

#!/usr/bin/perl -w

use CGI;
use DBI;

use strict;
my ($key, $href, $ishead);

my $query = new CGI;

print $query->header();

# das ist natuerlich kein realer connect, da d
my $dbh = DBI->connect("dbi:mysql:xxxxxx",'xxxxx','xxxx') or exitWithError($ishead,'DB-Connect', $DBI::errstr);
#hier sollte das richtige Selectstatement hin und mit einer passenden where-Klausel versehen werden, um die Suche zu realisieren
my $sth = $dbh->prepare("SELECT userid, date_created, ad_headline, ad_zustand FROM meinetabelle WHERE ad_zustand = 'aktiv'") or exitWithError($ishead,'DB-prepare', $DBI::errstr);
$sth->execute or exitWithError($ishead,'DB-execute', $DBI::errstr);

my($userid, $date_created, $ad_headline, $ad_zustand);
while (($userid, $date_created, $ad_headline, $ad_zustand) = $sth->fetchrow()) {
print "$userid : $date_created : $ad_headline : $ad_zustand\n";
}

#close the connection
$sth->finish;
$dbh->disconnect;

# Der Pfad zu Ihrem Mailprogramm
$mailprog = '/usr/sbin/sendmail';

open (MAIL, "|$mailprog -t") || die $!;
print MAIL "To: 'test@test.de'\n";
print MAIL "From: 'test@test.de'\n";
print MAIL "Subject: Ihre Zugangsdaten\n";
print MAIL "Hier ihre Zugangsdaten\n";
#print MAIL "User: $user \n";
#print MAIL "Passwort: $passwort\n";
print MAIL "Viele Grüße\n";
print MAIL "Webmaster\n";
close(MAIL);

Wenn ich das Script bis zum Disconnect laufen lasse, bekomme ich meine Daten im Browser ausgegeben.Nur ab dem "Open_mail" gehts nicht mehr.
Wie bekomme ich denn meine Tabellendaten in die Mail und in einer Tabelle ausgegeben? Im Browser sollte ja dementsprechend am End enicht sausgegeben werden, wenn ich das Script per Cronjob laufen lassen möchte.

Grüße
Tom

Datum: 16.07.2008-14:23

Beitragre: Anfänger! Suche Hilfe für ein Cronjob Script (DB +eMail-Versa
Seitenanfang
Hier mal ein etwas aufbereiteter Code:

#!/usr/bin/perl -w

use CGI;
use DBI;

use strict;

my ($key, $href, $ishead);

my $query = new CGI;

print $query->header();

# das ist natuerlich kein realer connect, da d
my $dbh = DBI->connect("dbi:mysql:xxxxxx",'xxxxx','xxxx') or exitWithError($ishead,'DB-Connect', $DBI::errstr);
#hier sollte das richtige Selectstatement hin und mit einer passenden where-Klausel versehen werden, um die Suche zu realisieren
my $sth = $dbh->prepare("SELECT userid, date_created, ad_headline, ad_zustand FROM meinetabelle WHERE ad_zustand = ?") or exitWithError($ishead,'DB-prepare', $DBI::errstr);
$sth->execute('aktiv') or exitWithError($ishead,'DB-execute', $DBI::errstr);

my $mailtext = "";
while (my ($userid, $date_created, $ad_headline, $ad_zustand) = $sth->fetchrow()) {
my $row = "$userid : $date_created : $ad_headline : $ad_zustand\n";
$mail .= $row;
print $row;
}

#close the connection
$sth->finish;
$dbh->disconnect;

# Der Pfad zu Ihrem Mailprogramm
$mailprog = '/usr/sbin/sendmail';

open (MAIL, "|$mailprog -t") || die $!;
print MAIL <<'HEADER';
To: test@test.example
From: test@test.example
Subject: Ihre Zugangsdaten

HEADER

print MAIL <<"BODY";
Hier ihre Zugangsdaten

User: $user
Passwort: $passwort

Die Daten aus der DB:
$mailtext

Viele Grüße,
Webmaster
BODY

close(MAIL);

Datum: 16.07.2008-17:42

Beitragre: Anfänger! Suche Hilfe für ein Cronjob Script (DB +eMail-Versa
Seitenanfang
Hallo Renee,
vielen Dank für dein Beispiel-Script. Nur hat das nicht bei mir funktioniert. Das "use strict" nimmt er bei mir irgendwie garnicht.
Ich habe mir mit Müh und Not ein funktionierendes Script zuammengebastelt. Das gibtmirmeine Daten in der Mail aus.
Noch eine kleine Bitte! Kannst du mir nochmal schreiben, wie man diese 4 Variablen in eine dynamische Html-Tabelle schreiben kann, so das meine Daten leserlich (alle 4 in jeweils einer Zeile)in der Mail aufgeführt sind.Das wäre total cool, wenn ich meine Daten so per Mail bekommen würde.

Mein aktueller Code:


#!/usr/bin/perl -w

#include the DBI module which handles the database connection
use DBI;
use CGI::Carp qw(fatalsToBrowser);

$dbh = DBI->connect("dbi:mysql:xxxxxx",'xxxxxx','xxxxxx') or exitWithError($ishead,'DB-Connect', $DBI::errstr);

my $sth = $dbh->prepare("SELECT userid, date_created, ad_headline, ad_zustand FROM meinetabelle WHERE ad_zustand = ?") or exitWithError($ishead,'DB-prepare', $DBI::errstr);
$sth->execute('aktiv') or exitWithError($ishead,'DB-execute', $DBI::errstr);

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

while (my ($userid, $date_created, $ad_headline, $ad_zustand) = $sth->fetchrow()) {
my $row = "$userid : $date_created : $ad_headline : $ad_zustand \n";
$mail .= $row;
}

#close the connection
$sth->finish;
$dbh->disconnect;

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

$title='mail test';
$to='xxxxxxx@xxxxxx';
$from= 'xxxxxx@xxxxxxx';
$subject='Using Sendmail';

open(MAIL, "|/usr/sbin/sendmail -t");

## Mail Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
## Mail Body
#print MAIL "Hier werden alle Anzeigen aufgelistet, die neu eingegangen sind:\n\n";
#print MAIL "$mail\n";
print MAIL <<"BODY";

Die Daten aus der DB:
$mail
close(MAIL);

Grüße
Tom

Datum: 17.07.2008-18:30

Beitragre: Anfänger! Suche Hilfe für ein Cronjob Script (DB +eMail-Versa
Seitenanfang
Zum Thema use strict: Was meinst Du mit "nimmt er gar nicht"?? Gibt Perl jede Menge Fehlermeldungen aus?

Dann schau Dir das mal an:
http://wiki.perl-community.de/bin/view/Wissensbasis/UseStrict

Datum: 18.07.2008-11:01

Beitragre: Anfänger! Suche Hilfe für ein Cronjob Script (DB +eMail-Versa
Seitenanfang
Hi Renee,

Danke für deine Antwort.
Das mit dem.."nimmt er garnicht" war eben so gemeint, daß mein Script mit "strict" nicht funktioniert aber ohne schon.Aber das macht ja auch nichts, wenn mein Cronjob ohne "strict" funktioniert.

Kannst du mir vielleicht noch kurz texten, wie ich meine Ausgabe in der Mail als HTML-Tabelle hinbekomme?Habe auch schon viel gegoogelt darüber, aber nichts genaues gefunden.

Danke
Grüße
Tom
PS: Bin ja in vielen Foren angemeldet (wegen Joomla) aber ich habe noch nie so schnelle und gute Hilfe bekommen :-)

Datum: 19.07.2008-15:20

-






-
-