[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:
(3350 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:
(3350 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:
(3350 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:
(3350 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:
(3350 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:
(3350 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:
(3350 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:
(3350 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