[GastForen Archiv Perl und CGI Adressenscript für Intern-Bereich

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Archiv - Archivierte Foren
Themen
Beiträge
Moderatoren
Letzter Beitrag

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

26. Feb 2004, 23:40
Beitrag # 31 von 38
Beitrag ID: #72315
Bewertung:
(3379 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
1.) Das Script für das Änderungsformular:

#!/usr/bin/perl
# Einbinden der Module
use CGI::Carp qw(fatalsToBrowser);
use strict;
use CGI;
use DBI;

##### Verbindung zur Datenbank herstellen ####################

my $dbh=DBI->connect('dbi:mysql:Datenbank', 'Username', 'Passwort') || die "Kann keine Verbindung zur Datenbank herstellen: $DBI::errstr";
my $http=new CGI;

my $Name = $ENV{'REMOTE_USER'};

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

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

my $Abfrage=$dbh->prepare("SELECT ID, Username, [..], Sonstiges, LastChange FROM adressen WHERE Username=? ");
$Abfrage->execute($Name);
my @Datensatz = $Abfrage->fetchrow_array();

##### Sonderzeichen escapen
@Datensatz = map CGI::escapeHTML($_), @Datensatz;

my ($F01, [..], $F40) = @Datensatz;


print <<"ENDE";

<form action="aenderung.pl" method="post" name="Adressbuch" target="_top">
<table width="570" border="0" cellspacing="1" cellpadding="3" bgcolor="#700000">
<tr>
<td class="standart" align="left" valign="middle" bgcolor="#8b0000" width="40%"><b>Name</b></td>
<td class="standart" align="left" valign="top" bgcolor="#8b0000" width="60%"><input class="text3" type="text" name="AktuellerName" value="$F05" size="24" border="0"></td>
</tr>
[..]
<tr>
<td class="standart" colspan="2" align="right" valign="top" bgcolor="#8b0000"><input type="submit" name="Senden" value="Daten &uuml;bertragen" border="0"></td>
</tr>
</table>
</form>
ENDE

$Abfrage->finish;
$dbh->disconnect; # Datenbankverbindung trennen
exit;


_______________________________________________________________
2.) Das Script zum Übernehmen der Änderungen:

#!/usr/bin/perl
# Einbinden der Module
use CGI::Carp qw(fatalsToBrowser);
use strict;
use CGI;
use DBI;

##### Verbindung zur Datenbank herstellen ####################

my $dbh=DBI->connect('dbi:mysql:Datenbank', 'Username', 'Passwort') || die "Kann keine Verbindung zur Datenbank herstellen: $DBI::errstr";
my $http=new CGI;


##### Formularfelder einlesen ################################

my $i05 = $http->param('AktuellerName');
[..]
my $i39 = $http->param('Sonstiges');


##### Wer ist online? ########################################
my $Name = $ENV{'REMOTE_USER'};

my $Abfrage1=$dbh->prepare("SELECT ID FROM adressen WHERE Username = '$Name'");
$Abfrage1->execute();

(my $ID)=$Abfrage1->fetchrow_array;

$Abfrage1->finish;



##### Aktuelles Datum ########################################

my (undef, $min, $hour, $mday, $mon, $year, $wday, undef, undef) = localtime(time);
my $year = $year+1900;

if ($min < 10) {
my $min = "0$min";
}
if ($hour < 10) {
my $hour = "0$hour";
}

my @tag = ("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
my @monat = ("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");

my $Aenderungsdatum = "$tag[$wday], $mday. $monat[$mon] $year";


##### Änderung in Datenbank übernehmen #######################

my $query = $dbh->prepare ("UPDATE adressen SET NeuerName=?, [..], LastChange=? WHERE Username=? ");
print $dbh->errstr; #Errorstring
$query->execute($i05, [..], $Aenderungsdatum, $Name);
$query->finish;

print "Location: ../details.pl?id\=$ID\n\n";

$dbh->disconnect; # Datenbankverbindung trennen
exit;


als Antwort auf: [#64448]
X

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

27. Feb 2004, 11:41
Beitrag # 32 von 38
Beitrag ID: #72385
Bewertung:
(3379 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü,

Datensätze werden mit UPDATE nicht gelöscht.
Bist Du sicher, daß der Datensatz selbst verschwunden ist?

Du kannst den Inhalt der Variablen ($i05, [..], $Aenderungsdatum, $Name) mal überprüfen:


##### Änderung in Datenbank übernehmen #######################

my $query = $dbh->prepare ("UPDATE adressen SET NeuerName=?, [..], LastChange=? WHERE Username=? ");
print $dbh->errstr; #Errorstring
$query->execute($i05, [..], $Aenderungsdatum, $Name);
$query->finish;

print $http->header();
print $http->start_html();

print qq|

$i05 <br>
...
$Aenderungsdatum <br>
$Name <br>

$ID
|;

$dbh->disconnect; # Datenbankverbindung trennen
exit;

Ansonnsten kann man den Fehler nicht nachvollziehen, da jede Menge Variablen [..] fehlen.
Es wäre einfacher, wenn Du zum Testen weniger Variablen nehmen würdest.

Gruß Sabine


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

25. Mär 2004, 09:59
Beitrag # 33 von 38
Beitrag ID: #76777
Bewertung:
(3379 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo nochmal (Jahre später ;-)

Also ich weiß immer noch nicht, was da los ist. Habe mal rumprobiert. Der gesamte Datensatz wird nicht gelöscht. Der Name und die Dinge, die man nicht im Formular ändern kann, bleiben erhalten. Es wird sogar das Änderungsdatum aktuallisiert. Nur alles andere (was man mit den vielen Input-Feldern ändern kann) wird gelöscht. Das passiert übrigens nur, wenn man einen vorhandenen Eintrag löschen will.

Ein Beispiel: Beim ersten Besuch hat der Benutzer seinen Wohnort angegeben (Input-Felder 'PLZ' und 'Wohnort'). Beim 2. Besuch fällt ihm ein, dass er die PLZ falsch hat und die richtige weiß er irgendwie nicht. Also löscht er die Angabe im Feld 'PLZ' und klickt auf 'Daten ändern'. Darauf hin landet er auf einer leeren Profilseite. Alles weg (außer Name, Geburtstag und Änderungsdatum...)

Hier nochmal das KOMPLETTE Änderungs-Script (aenderung.pl):

#!/usr/bin/perl
# Einbinden der Module
use CGI::Carp qw(fatalsToBrowser);
use strict;
use CGI;
use DBI;

##### Verbindung zur Datenbank herstellen ####################

my $dbh=DBI->connect('dbi:mysql:XYZ', 'xyz', 'ZYX') || die "Kann keine Verbindung zur Datenbank herstellen: $DBI::errstr";
my $http=new CGI;


##### Formularfelder einlesen ################################

my $i05 = $http->param('AktuellerName');
my $i06 = $http->param('email');
my $i07 = $http->param('Email2');
my $i08 = $http->param('Website');
my $i09 = $http->param('ICQ');
my $i10 = $http->param('AIM');
my $i11 = $http->param('YIM');
my $i12 = $http->param('MSNM');
my $i14 = $http->param('H-Strasse');
my $i15 = $http->param('H-PLZ');
my $i16 = $http->param('H-Wohnort');
my $i17 = $http->param('H-Land');
my $i18 = $http->param('H-Tel1');
my $i19 = $http->param('H-Tel2');
my $i20 = $http->param('H-Mobil');
my $i21 = $http->param('H-Fax');
my $i22 = $http->param('H-Bemerkungen');
my $i23 = $http->param('Z-Strasse');
my $i24 = $http->param('Z-PLZ');
my $i25 = $http->param('Z-Wohnort');
my $i26 = $http->param('Z-Land');
my $i27 = $http->param('Z-Tel1');
my $i28 = $http->param('Z-Tel2');
my $i29 = $http->param('Z-Mobil');
my $i30 = $http->param('Z-Fax');
my $i31 = $http->param('Z-Bemerkungen');
my $i32 = $http->param('Familienstand');
my $i33 = $http->param('Partner');
my $i34 = $http->param('Kinder');
my $i35 = $http->param('Werdegang');
my $i36 = $http->param('Job-aktuell');
my $i37 = $http->param('Job-wo');
my $i38 = $http->param('Plaene');
my $i39 = $http->param('Sonstiges');


##### Wer ist online? ########################################
my $Name = $ENV{'REMOTE_USER'};

my $Abfrage1=$dbh->prepare("SELECT ID FROM adressen WHERE Username = '$Name'");
$Abfrage1->execute();

(my $ID)=$Abfrage1->fetchrow_array;

$Abfrage1->finish;



##### Aktuelles Datum ########################################

my (undef, $min, $hour, $mday, $mon, $year, $wday, undef, undef) = localtime(time);
my $year = $year+1900;

if ($min < 10) {
my $min = "0$min";
}
if ($hour < 10) {
my $hour = "0$hour";
}

my @tag = ("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
my @monat = ("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");

my $Aenderungsdatum = "$tag[$wday], $mday. $monat[$mon] $year";


##### Änderung in Datenbank übernehmen #######################

my $query = $dbh->prepare ("UPDATE adressen SET NeuerName=?, Email_1=?, Email_2=?, Website=?, ICQ=?, AIM=?, YIM=?, MSNM=?, H_Strasse=?, H_PLZ=?, H_Wohnort=?, H_Land=?, H_Tel1=?, H_Tel2=?, H_Mobil=?, H_Fax=?, H_Bemerkung=?, Z_Strasse=?, Z_PLZ=?, Z_Wohnort=?, Z_Land=?, Z_Tel1=?, Z_Tel2=?, Z_Mobil=?, Z_Fax=?, Z_Bemerkung=?, Familienstand=?, Partner=?, Kinder=?, Werdegang=?, Job_aktuell=?, Job_wo=?, Plaene=?, Sonstiges=?, LastChange=? WHERE Username=? ");
print $dbh->errstr; #Errorstring
$query->execute($i05, $i06, $i07, $i08, $i09, $i10, $i11, $i12, $i14, $i15, $i16, $i17, $i18, $i19, $i20, $i21, $i22, $i23, $i24, $i25, $i26, $i27, $i28, $i29, $i30, $i31, $i32, $i33, $i34, $i35, $i36, $i37, $i38, $i39, $Aenderungsdatum, $Name);
$query->finish;

print "Location: ../name/details.pl?id\=$ID\n\n";

$dbh->disconnect; # Datenbankverbindung trennen
exit;


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

25. Mär 2004, 10:23
Beitrag # 34 von 38
Beitrag ID: #76783
Bewertung:
(3379 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü, bevor ich Dein Script nochmal genau ansehe noch eine Frage.

Du schreibst:
>>Darauf hin landet er auf einer leeren Profilseite.
>>Alles weg (außer Name, Geburtstag und Änderungsdatum...)

Sind die "verlorenen" Felder nur auf der Profilseite nicht zu sehen
oder
sind die Inhalte der Felder auch wirklich in der Datenbanktabelle verschwunden.

Gruß Sabine


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

25. Mär 2004, 13:27
Beitrag # 35 von 38
Beitrag ID: #76834
Bewertung:
(3379 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ach so ein Schei*, mal geht's, dann wieder nicht. Jetzt probier ich schon ne halbe Stunde rum und alles funktioniert wunderbar.
Aber als das Profil leer angezeigt wurde waren diese Daten aus den Feldern in der Datenbank gelöscht. Ich hab mir doch die Datenbank mit PHPmyAdmin angeschaut als es mal wieder nicht ging, von daher weiß ich doch, dass der Name, Geburtstag und Änderungsdatum nicht gelöscht wurden (im Gegensatz zu allem anderen).
Vielleicht liegt es ja auch an der Verbindung oder wenn man irgendwie zuschnell oder zuoft klickt oder... keine Ahnung. Ich hab das Script und die Variablen auch schon mehrfach durchgesehen und keinen Fehler gefunden.


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

25. Mär 2004, 17:57
Beitrag # 36 von 38
Beitrag ID: #76909
Bewertung:
(3379 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü, solche Fehler wie "geht" --> "geht nicht" sind die schlimmsten.

Du könntest noch die Reihenfolge im Script so ändern:

##### Änderung in Datenbank übernehmen #######################
my $query = $dbh->prepare ("UPDATE adressen SET NeuerName=?, Email_1=?, Email_2=?, Website=?, ICQ=?, AIM=?, YIM=?, MSNM=?, H_Strasse=?, H_PLZ=?, H_Wohnort=?, H_Land=?, H_Tel1=?, H_Tel2=?, H_Mobil=?, H_Fax=?, H_Bemerkung=?, Z_Strasse=?, Z_PLZ=?, Z_Wohnort=?, Z_Land=?, Z_Tel1=?, Z_Tel2=?, Z_Mobil=?, Z_Fax=?, Z_Bemerkung=?, Familienstand=?, Partner=?, Kinder=?, Werdegang=?, Job_aktuell=?, Job_wo=?, Plaene=?, Sonstiges=?, LastChange=? WHERE Username=? ");
print $dbh->errstr; #Errorstring
$query->execute($i05, $i06, $i07, $i08, $i09, $i10, $i11, $i12, $i14, $i15, $i16, $i17, $i18, $i19, $i20, $i21, $i22, $i23, $i24, $i25,$i26, $i27, $i28, $i29, $i30, $i31, $i32, $i33, $i34, $i35, $i36, $i37, $i38, $i39, $Aenderungsdatum, $Name);
$query->finish;

##### Wer ist online? ########################################
my $Name = $ENV{'REMOTE_USER'};

my $Abfrage1=$dbh->prepare("SELECT ID FROM adressen WHERE Username = '$Name'");
$Abfrage1->execute();

(my $ID)=$Abfrage1->fetchrow_array;

$Abfrage1->finish;


##### Datenbankverbindung trennen ############################
$dbh->disconnect;
exit;

##### Profil anzeigen ############################
print "Location: ../name/details.pl?id\=$ID\n\n";


Also erst die Datenbankverbindung beenden bevor das neue Script details.pl aufgerufen wird.

Gruß Sabine


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

27. Mär 2004, 02:49
Beitrag # 37 von 38
Beitrag ID: #77150
Bewertung:
(3379 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ganz so wie du schreibst funktioniert das nicht.
Man kann den Namen (Wer ist online) nicht NACH dem DB-Update ermitteln, weil das Update wissen muss, wessen Daten aktuallisiert werden sollen.
Und dann kam noch ne Fehlermeldung, weil das "exit" immer noch an den Schluss gehört, also nach dem Aufruf der Profilseite mit details.pl

Ansonsten hab ich das jetzt soweit geändert. Nach den ersten Test scheint alles zu funktionieren, aber warten wir mal ab. Wenn wiedermal was gelöscht wird, melde ich mich wieder hier :-)

Danke nochmal, bis denn; Hanü


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

27. Mär 2004, 09:19
Beitrag # 38 von 38
Beitrag ID: #77156
Bewertung:
(3379 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ja stimmt, das kommt von kopieren und einfügen :-(

my $Name = $ENV{'REMOTE_USER'};
sollte eigentlich ganz oben stehen
und
exit;
ganz unten. Exit kannst Du auch ganz weglassen.

Gruß Sabine


als Antwort auf: [#64448]
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
18.06.2024

Online
Dienstag, 18. Juni 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow
Veranstaltungen
02.07.2024

Online
Dienstag, 02. Juli 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

Kontaktinformation: E-Mailschulungen AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow