[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

6. Jan 2004, 23:11
Beitrag # 1 von 38
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo und gutes Neues noch nachträglich!

Würde mich freuen, wenn ihr mir bei einem Adressbuch-Perlscript für unsere ABI-Page helfen könntet. Und zwar möchte ich das Design durch ein Template anpassen können. Das Script soll im Template Kommentare durch eigene Daten ersetzen, so dass z.B. der Seitentitel entsprechend angepasst wird bzw. der Hauptinhalt oder der Quelllink zu einem Bild. Ich habe im Netz schon nach anpassbaren Adressbuch-Scripts gesucht, aber irgendwie war nicht das Richtige dabei. Am Besten hat mir bei all dem http://www.little-idiot.de/mysql/mysql-275.html gefallen.

Ich habe mir schon etliche Gedanken gemacht und das Grundgerüst für das Script zusammengebastelt. Leider kommt man nicht weit, wenn man die entsprechenden Befehle nicht kennt oder versteht und alles dreimal nachschlagen muss :o( Wiso gibt es eigentlich keinen Perl-Volkshochschulkurs???

Allgemeines zum Script:
- Die Adress-Daten sind in einer mySQL Datenbank gespeichert, ebenso die Nicknames und Loginnamen der Personen
- Das Design soll durch ein Template anpassbar sein
- Die Übersichtsseite mit allen Namen existiert bereits (index.html) Die Namen sind mit dem Script verlinkt "adressen.pl?id=hanue"
- Klickt man auf einen Namen soll das Script die Seite mit den Details (Anschrift etc.) anzeigen.
- Bei der Detailansicht soll es auch einen Link zum Bearbeiten geben "adressen.pl?edit=hanue", wobei der Eintrag nur bearbeitet werden kann, wenn es die Daten der eingeloggten Person sind.

//edit: Habe den Code gelöscht, weil er so nicht funktioniert und nicht zum Ensatz kam.

Nachtrag: Habe gerade erst von dem HTML::Template Modul gelesen und das mal versucht irgendwie einzubauen. Das funktioniert ja so ähnlich wie wenn man Kommentare verwendet. Nur mit dem @list wird's schwierig...

(Dieser Beitrag wurde von Hanü am 28. Jan 2004, 04:48 geändert)
X

Adressenscript für Intern-Bereich

Anonym
Beiträge gesamt: 22827

7. Jan 2004, 12:17
Beitrag # 2 von 38
Beitrag ID: #64506
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü,

>>Die Adress-Daten sind in einer mySQL Datenbank gespeichert,
>>ebenso die Nicknames und Loginnamen der Personen

Und wo ist das Passwort das zum jeweiligen Benutzernamen gehört?

Hattest Du nicht Benutzername und Passwort in der Datei .htpasswd gespeichert?
Sind die Benutzernamen nun doppelt vorhanden, also auch in der Datenbank?

Mysql macht doch erst Sinn ab 10000 Benutzer/Adressen.
Warum willst Du das denn nun mit einer Mysql-Datenbank machen?

Dein Beispiel bezieht sich auf den Zugriff mit dem DBI-Modul auf eine Adreßdatenbank im Textformat (*.csv),
also nicht auf eine Mysql-Datenbank.

http://www.little-idiot.de/mysql/mysql-275.html

Hier der Orginal-Artikel von Michael Schilli im Linux-Magazin:

http://www.linux-magazin.de/...5/DBflat/dbflat.html

Gruß Sabine


als Antwort auf: [#64448]
(Dieser Beitrag wurde von SabineP am 7. Jan 2004, 23:59 geändert)

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

8. Jan 2004, 11:22
Beitrag # 3 von 38
Beitrag ID: #64679
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Sabine, genau das hab ich auch schon gefunden :) Dieses Beispiel kann auch mit ner Datenbank verwendet werden, wenn du dir die Anfangszeilen näher anschaust, da kann man auch die Login-Daten für ne DB eingeben, und in der Anleitung steht auch, dass man nur wenige Zeilen im Script ändern muss, wenn man anstelle der Textdatei ne Datenbank verwenden möchte.

Warum ich eine mySQL-DB verwenden möchte?
In der .htpasswd sind zwar die Benutzernamen gespeichert, aber das wars doch auch schon, ich kann doch nicht weitere Infos wie die Anschrift oder den richtigen Namen in der htaccess speichern !?? Und ob ich diese Daten jetzt in der mySQL-DB speichere, oder in einer Textdatei... ist für mich beides kompliziert^^. Nur diese mySQL scheint mir irgendwie sicherer zu sein wie eine Textdatei !? und ich kann sie mit phpmyadmin schnell bearbeiten

Dieses Beispielscript gefiel mir eigentlich nur, weil ich da sehen kann, wie man die Daten zum bearbeiten anzeigen kann. Die Suchfunktion, das Anlegen eines neuen Datensatzes und die dort verwendete Gesamtübersicht will ich ja gar nicht.

Es soll eine Klassenliste sein, wenn man auf den Namen klickt sieht man die Anschrift und weitere Details zur Person, welche von der entsprechenden Person aktuallisiert werden können. Das wars schon. Und das Design würd ich mit nem Template anpassen.... *träum*

LG Andreas


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

28. Jan 2004, 04:46
Beitrag # 4 von 38
Beitrag ID: #67686
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Irgendwie schreib ich immer viel zu viel.

Habe einen Teil geschafft!
1. Profilansicht (Mit Klick auf den Link adressen.pl?id=34 wird eine Seite geöffnet, welche die Daten der Person 34 in einer Tabelle anzeigt)
2. Eigene Daten ändern (da der Username in der Umgebungsvariablen steckt, braucht man nur eine Abfrage der Datenbank machen, alle Userinfos in ein @Datensatz speichern und mit Print erzeugt man dann ein Formular, wobei in die Input-Felder als value die Angaben aus der BD eingesetz werden. Momentane Lösung: Nach der Änderung wird das Formular per Mail versand und die DB muss dann von Hand aktuallisiert werden)

Frage:
Wie erreiche ich, dass die Daten nicht nur Ausgelesen und Angezeigt, sondern nach der Änderung auch in der DB gespeichert werden?

Gruß Hanü


als Antwort auf: [#64448]
(Dieser Beitrag wurde von Hanü am 25. Jul 2004, 18:03 geändert)

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

28. Jan 2004, 11:35
Beitrag # 5 von 38
Beitrag ID: #67719
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü, in diesem Beispiel

http://www.little-idiot.de/mysql/mysql-275.html

macht das (Ändern) dieser Abschnitt im Script

my $sql = qq[
UPDATE addressbook
SET id=$id, fname=$fname, lname=$lname, phone=$phone, email=$email, notes=$notes
WHERE id = $id];

Gruß Sabine


als Antwort auf: [#64448]
(Dieser Beitrag wurde von SabineP am 28. Jan 2004, 11:36 geändert)

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

30. Jan 2004, 04:40
Beitrag # 6 von 38
Beitrag ID: #68114
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ok, ich mach das wohl am Besten mit nem neuen Script.
Das Formular übergibt die Daten mit klicken auf den Send-Button.
Wie müsste das Script aussehen? Oder besser: Wie speichere ich die übergebenen Daten in $-Parameter, die die Namen der Formularfelder haben? Also z.B. zwei Textfeld haben den Namen "PLZ" und "Ort" und die Werte "12345" und "Irgendwo". Wie erreiche ich, dass
$PLZ = "12345" und $Ort = "Irgendwo" damit ich das für den SQL-Befehl gleich weiterverarbeiten kann? Oder muss ich die alle einzeln mit
my $PLZ = $dbh->quote(param('PLZ')); speichern?

Und die zweite Frage: Die SQL-Datenbank mag keine Gänsefüße "". Wie verhindere ich, dass der User welche übergibt?

______________________________
Vorschlag für das Script:

#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);

# DBI-Modul und Datenquelle

use DBI;
my $DB_DSN = "DBI:mysql:xyz"; # Datenbank
my $DB_USER = "xyz"; # Benutzer
my $DB_PASSWD = "xyz"; # Passwort

my $dbh = DBI -> connect ($DB_DSN, $DB_USER, $DB_PASSWD) || die "Kann keine Verbindung zu $DB_DSN herstellen: $DBI::errstr";

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

##############################################
##### 1: Daten ändern

my $sql = qq[
UPDATE datenbankname
SET plz=$PLZ, wohnort=$Ort
WHERE User=$Name];

$dbh->do($sql) or die "Die Daten konnten nicht aktuallisiert werden. ($sql)";

##############################################
##### 2: Profil anzeigen (mit den neuen Daten)
##### - hier fehlt noch der entscheitede Refresh-Befehl

my $Abfrage=$dbh->prepare("SELECT * FROM datenbankname WHERE Username = '$Name'");
$Abfrage->execute();

while (@Datensatz=$Abfrage->fetchrow_array) {
($id,)=@Datensatz;
print "Location: http://www.xyz.de/...ssen.pl?id=$id\n\n";
}

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


als Antwort auf: [#64448]
(Dieser Beitrag wurde von Hanü am 2. Feb 2004, 13:34 geändert)

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

2. Feb 2004, 12:50
Beitrag # 7 von 38
Beitrag ID: #68498
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü,

hier ist mal ein Beispielskript für eine Tabelle mit dem Namen adressen.
Die einzelnen Tabellenspalten sind:
id, name, plz, ort

In der Spalte name stehen die Benutzernamen, die identisch sind mit den Benutzernamen in der Datei .htpasswd

Habe das Skript noch einmal geändert!

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

# Verbindung zur Datenbank herstellen
my $db=DBI->connect('dbi:mysql:Datenbankname;Hostname','Benutzername','Passwort');
my $http=new CGI;

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

my $plz = $http->param('plz');
my $ort = $http->param('ort');

# HTTP-Header ausgeben
print $http->header();
print $http->start_html();

if ($http->param('update') ne ''){

#Änderungsformular

my $query = $db->prepare("SELECT id, name, plz, ort FROM adressen WHERE name='$name' ");
print $db->errstr; #Errorstring
$query->execute();
my @abfrage = $query->fetchrow_array();

print qq|<form action="adresse.pl" method="post">|;
print qq|<table border="1">|;
print qq|<tr><td>$abfrage[0]<td>$abfrage[1]<input type="hidden" name="name" value="$abfrage[1]"><td><input type="text" name="plz" value="$abfrage[2]"><input type="text" name="ort" value="$abfrage[3]"></table>|;
print qq|<input type="submit" value="speichern" name="update1">|;
print qq|</form>|;

}

elsif ($http->param('update1') ne ''){

#Änderungen in Datenbank übernehmen

if ($plz ne '' && $ort ne ''){
my $query = $db->prepare ("UPDATE adressen SET plz='$plz', ort='$ort' WHERE name='$name' ");
print $db->errstr; #Errorstring
$query->execute();
}
print qq|&Auml;nderung durchgeführt<br><a href="adresse.pl">zur Adressenanzeige</a>|;
}

else {

# Adresse anzeigen
my $query = $db->prepare("SELECT id, name, plz, ort FROM adressen WHERE name='$name' ");
print $db->errstr; #Errorstring
$query->execute();

# Tabellenkopf
print qq|<form action="adresse.pl" method="post">|;
print qq|<table border="1">|;

# Datenbankeintrag in ein Array lesen und in Tabelle schreiben
my @abfrage = $query->fetchrow_array();

print qq|<tr><td>$abfrage[0]<td>$abfrage[1]<td>$abfrage[2]<td>$abfrage[3]<td><input type="submit" name="update" value="&auml;ndern">|;
print qq|</table></form><br><br>|;
}

# Datenbank-Verbindung beenden
$db->disconnect();

# HTML-Dokument beenden
print $http->end_html();


Gruß Sabine


als Antwort auf: [#64448]
(Dieser Beitrag wurde von SabineP am 3. Feb 2004, 10:26 geändert)

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

8. Feb 2004, 23:41
Beitrag # 8 von 38
Beitrag ID: #69469
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Sabine,

großes DANKE erst mal, ich hatte leider noch keine Zeit, werde das Script demnächst genauer unter die Lupe nehmen und ausprobieren. Ich melde mich dann. Danke nochmal!

Andreas


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

17. Feb 2004, 06:30
Beitrag # 9 von 38
Beitrag ID: #70794
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, habe jetzt mal versucht, das Script zum Übernehmen der Daten anzupassen. Aber erst noch ne Frage:

if ($plz ne '' && $ort ne ''){
my $query = $db->prepare ("UPDATE adressen SET plz='$plz', ort='$ort' WHERE name='$name' ");
print $db->errstr; #Errorstring
$query->execute();
}
print qq|&Auml;nderung durchgeführt<br><a href="adresse.pl">zur Adressenanzeige</a>|;
}

Was bewirkt hier die if-Zeile??? Dürfen die Felder nicht leer sein?




Nun zu meinem Versuch: Beim Aufruf durch klick auf "Senden" im Formular kommt folgende Fehlermeldung: Can't call method "param" on an undefined value at aenderung.pl line 16. Hier das Script 'aenderung.pl':

#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);

# DBI-Modul und Datenquelle

use DBI;
my $DB_DSN = "DBI:mysql:xxx"; # Datenbank
my $DB_USER = "xxx"; # Benutzer
my $DB_PASSWD = "xxx"; # Passwort

my $dbh = DBI -> connect ($DB_DSN, $DB_USER, $DB_PASSWD) || die "Kann keine Verbindung zu $DB_DSN herstellen: $DBI::errstr";


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

my $i05 = $http->param('AktuellerName');
my $i06 = $http->param('email');
my $i07 = $http->param('Email2');
# [..] usw. ca. 40 Felder


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

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

while (@Datensatz1=$Abfrage1->fetchrow_array) {
($ID,,,,)=@Datensatz1;
}

$Abfrage1->finish;



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

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

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

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

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


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

my $query = $dbh->prepare ("UPDATE adressen SET NeuerName='$i05', Email_1='$i06', Email_2='$i07', Website='$i08', [..], LastChange='$Aenderungsdatum' WHERE name='$Name' ");
print $dbh->errstr; #Errorstring
$query->execute();

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


$Abfrage->finish;

$dbh->disconnect; # Datenbankverbindung trennen

exit;


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

17. Feb 2004, 10:34
Beitrag # 10 von 38
Beitrag ID: #70834
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü,

if ($plz ne '' && $ort ne '')

nur wenn das Feld plz und ort im Formular nicht leer sind, wird die UPDATE-Anweisung (Daten ändern) ausgeführt.

Die Fehlermeldung: Can't call method "param" zeigt, daß Du das CGI-Modul nicht eingebunden hast.
Es fehlen die Zeilen
use CGI; und my $http=new CGI;

Hier noch einmal die ersten Zeilen:

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

# Verbindung zur Datenbank herstellen
my $db=DBI->connect('dbi:mysql:Datenbankname;Hostname','Benutzername','Passwort');
my $http=new CGI;

##### Wer ist online? #####
steht schon in der Variable $name
my $name = $ENV{'REMOTE_USER'};
Der User, der gerade online und eingeloggt ist wird also nicht aus der Datenbank ermittelt.

Was möchtest Du denn noch an dem Script anpassen?

Gruß Sabine


als Antwort auf: [#64448]
(Dieser Beitrag wurde von SabineP am 17. Feb 2004, 11:07 geändert)

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

17. Feb 2004, 11:38
Beitrag # 11 von 38
Beitrag ID: #70850
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ok, habe die Module eingebunden. Wenn ich das Script aufrufe kommen noch viel mehr Fehlermeldungen in der Form:

Global symbol "@Datensatz1" requires explicit package name at aenderung.pl line 58.
Global symbol "$ID" requires explicit package name at aenderung.pl line 59.

Außerdem für $min, $hour, $mday,... nur nicht für die übertragenen Felder $ort usw. und am Schluss steht noch

Execution of aenderung.pl aborted due to compilation errors.

##### Wer ist online? ##### hab ich deshalb reingemacht, weil ich am Ende bei print "Location: ../name/details.pl?id=$ID\n\n"; nicht den Username, sondern die ID brauche, was 2 paar Stiefel sind (warum einfach, wenns auch kompliziert geht ;-) Wobei ich mir noch gar nicht sicher bin, ob das so funktioniert (da müsste wahrscheinlich noch ein refresh rein)

Zitat Was möchtest Du denn noch an dem Script anpassen?

An deinem Script? Nichts weiter. Das ist ok so wie es ist! Nur an meinem kaputten Versuch. (Im Prinzip hab ich das Gleiche wie du gemacht, nur auf 3 einzelne Scripte verteilt. Ich habe ein details.pl, das die Daten durch Aufruf mit ?id=xx anzeigt, ein adressform.pl, welches das Änderungsformular erzeugt und jetzt ein aenderung.pl, welches die Daten ändern soll und dann zur aktuallisierten Profilansicht weiterleitet. Bisher hatte ich anstelle des aenderung.pl einen Formmailer gesetzt)


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

17. Feb 2004, 11:55
Beitrag # 12 von 38
Beitrag ID: #70856
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hanü, schreib mal,

my @Datensatz1
in der Zeile 58

my $ID
in der Zeile 59

das ist durch
use strict;
erforderlich

Gruß Sabine


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

17. Feb 2004, 13:49
Beitrag # 13 von 38
Beitrag ID: #70877
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ok, hab das soweit überall eingefügt. Jetzt kommt nur noch das hier:

Global symbol "$ID" requires explicit package name at aenderung.pl line 90.
Execution of aenderung.pl aborted due to compilation errors.

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

Was ist jetzt noch falsch? Ich habs auch schon so probiert:
print "Location: http:// my.url.de/login/adressen/details.pl?id\=$ID\n\n";
und ohne den Backslash \ vor dem =

Eigentlich wird doch $ID extra hier deklariert:
while (my @Datensatz1=$Abfrage1->fetchrow_array) {
(my $ID,,,,)=@Datensatz1;
}


als Antwort auf: [#64448]
(Dieser Beitrag wurde von Hanü am 25. Jul 2004, 18:08 geändert)

Adressenscript für Intern-Bereich

oesi50
  
Beiträge gesamt: 2315

17. Feb 2004, 14:12
Beitrag # 14 von 38
Beitrag ID: #70878
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hi Hanü,

ersetze:

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

while (@Datensatz1=$Abfrage1->fetchrow_array) {
($ID,,,,)=@Datensatz1;
}

durch:

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

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


Grüße Oesi
Ich weiß, dass ich nichts weiß... (Sokrates)


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

17. Feb 2004, 18:01
Beitrag # 15 von 38
Beitrag ID: #70928
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
OK, das Script bringt keine Fehlermeldung mehr. Nach Klick auf 'Senden' werde ich wie gewünscht zur Profilansicht weitergeleitet. Allerdings werden die Änderungen nicht in die Datenbank übernommen. Hier nochmal das 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:Datenbank', 'Username', 'Passwort') || 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');
# [..] usw. ca. 40 Felder
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 #######################################################

(undef, my $min, my $hour, my $mday, my $mon,my $year, my $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='$i05', Email_1='$i06', Email_2='$i07', [..], Plaene='$i38', Sonstiges='$i39', LastChange='$Aenderungsdatum' WHERE name='$Name' ");
print $dbh->errstr; #Errorstring
$query->execute();
$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

17. Feb 2004, 18:27
Beitrag # 16 von 38
Beitrag ID: #70931
Bewertung:
(4419 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hanü,
wie sieht das Änderungsformular aus?
Wie sehen die Spaltennamen Deiner Tabelle aus (Groß-Kleinschreibung beachten)?

Was mir erstmal auffällt:

WHERE Username = '$Name'
WHERE name = '$Name'

Wie heißt denn die Spalte nun richtig, die die Benutzernamen der eingeloggten User enthält?

Ist der Benutzername unique also eindeutig (es darf keine doppelten Benutzernamen geben) ?

Gruß Sabine


als Antwort auf: [#64448]
(Dieser Beitrag wurde von SabineP am 17. Feb 2004, 18:36 geändert)

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

18. Feb 2004, 08:31
Beitrag # 17 von 38
Beitrag ID: #70993
Bewertung:
(4419 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Die Spalte heißt 'Username', hab das geändert - funzt trotzdem noch nicht. Es gibt keine doppelten Einträge bei Username und ID.

Am Änderungsformular liegt's nicht, ich hab den Fehler gefunden!: Hab den SQL-Befehl mal mit dem von PHPmyAdmin verglichen, da werden die Namen der Spalten/Felder noch in schräge Gänsefüße gesetzt (wie heißen die eigentlich). So funktionierts:

("UPDATE `adressen` SET `NeuerName`='$i05', `Email_1`='$i06', `Email_2`='$i07', [..], `Sonstiges`='$i39', `LastChange`='$Aenderungsdatum' WHERE `Username`='$Name' ");

Jetzt frag ich mich, warum der erste SQL-Befehl trotzdem (ohne diese ``) funktioniert?!

Und ein Problem gibt es trotzdem noch: Wenn die Besucher Anführungszeichen ""''``´´ in die Felder eingeben versagt das Script, weil die SQL-DB das nicht mag. Ne Idee wie man das umgehen oder verhindern kann?

Ansonsten nochmal RIESEN DANK für die ganze Hilfe!!!!!!!!!!


als Antwort auf: [#64448]
(Dieser Beitrag wurde von Hanü am 18. Feb 2004, 08:37 geändert)

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

18. Feb 2004, 10:35
Beitrag # 18 von 38
Beitrag ID: #71013
Bewertung:
(4419 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü,

diese ` Backticks werden nur benötigt, wenn Du Sonderzeichen oder reservierte Wörter verwendest im Spaltenname:
http://www.mysql.de/.../Reserved_words.html

Beachten Sie, dass, falls der Bezeichner ein reserviertes Wort ist oder Sonderzeichen enthält, er bei der Benutzung immer in ` angegeben sein muss.
http://www.mysql.de/doc/de/Legal_names.html

Um Probleme bei der Eingabe von ""''``´´ zu verhindern schreibst Du für alle Variablen $irgendwas ein Fragezeichen in die SQL-Anweisung.
Dadurch werden auch sogenannte SQL-Injektionen (Benutzer tippen SQL-Anweisungen ins Textfeld ein) verhindert.
Die Variablen schreibst Du dann in der richtigen Reihenfolge in die Klammern hinter execute(hierhin).

Beispiel:

my $query = $db->prepare ("UPDATE adressen SET NeuerName=?, Email_1=?, Email_2=?, [..], Sonstiges=?, LastChange=? WHERE Username=?);
print $db->errstr; #Errorstring
$query->execute($i05, $i06, $i07, [..], $i39, $Aenderungsdatum, $Name);

Gruß Sabine
[Netscape 4 ist mein Freund]


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

18. Feb 2004, 14:23
Beitrag # 19 von 38
Beitrag ID: #71070
Bewertung:
(4419 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das funktioniert so nicht?!
Hab das jetzt so versucht:

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

und so:
my $query = $dbh->prepare ("UPDATE `login` SET `NeuerName`=?, [..], `Sonstiges`=?, `LastChange`=? WHERE `Username`=? ");
print $dbh->errstr; #Errorstring
$query->execute($i05, [..], $i39, $Aenderungsdatum, $Name);

und so:
my $query = $dbh->prepare ("UPDATE login SET NeuerName=?, [..], Plaene=?, LastChange=? WHERE Username=? ");
print $dbh->errstr; #Errorstring
$query->execute($i05, [..], $i39, $Aenderungsdatum, $Name);

Hat alles nicht funktioniert. Gilt der Bindestrich "-" als Sonderzeichen? Weil... so reservierte Namen verwende ich eigentlich nicht. Nur der Bindestrich - und Underline _

Der Satz
Zitat Ein Name muss aus alphanumerischen Zeichen des aktuellen Zeichensatzes bestehen und darf darüber hinaus `_' und `$' enthalten.

verbietet den Bindestrich, wenn ich das richtig sehe. Also ändern?

(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, Username)


als Antwort auf: [#64448]
(Dieser Beitrag wurde von Hanü am 18. Feb 2004, 14:33 geändert)

Adressenscript für Intern-Bereich

Anonym
Beiträge gesamt: 22827

18. Feb 2004, 14:46
Beitrag # 20 von 38
Beitrag ID: #71074
Bewertung:
(4419 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Deine letzte Variante wäre richtig.

und so:
my $query = $dbh->prepare ("UPDATE login SET NeuerName=?, [..], Plaene=?, LastChange=? WHERE Username=? ");
print $dbh->errstr; #Errorstring
$query->execute($i05, [..], $i39, $Aenderungsdatum, $Name);

Nimm mal die Bindestriche aus dem Spaltenname raus. Der Bindestrich ist das Minuszeichen zum Rechnen.

Wenn es dann immer noch nicht geht müssen wir mal noch ein paar Errorstrings ausgeben.

Gruß Sabine


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

18. Feb 2004, 15:15
Beitrag # 21 von 38
Beitrag ID: #71079
Bewertung:
(4409 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Es lag tatsächlich an dem Bindestrich/Minuszeichen! Die Änderungen werden jetzt übernommen, auch Einträge mit "´`' werden übernommen und im der Profilansicht korrekt angezeigt...

Nur beim Änderungsformular wieder nicht. Ich hab das mal getestet: In ein Feld "test" eingetragen und gespeichert. Im Profil wird es richtig angezeigt. Klick ich dann auf 'Daten ändern' ist das Feld im Formular jedoch leer. Im Quellcode steht es aber so drin: value=""test""

Da muss man wohl im aenderungsformular.pl was ändern, im Bereich:

my $Abfrage=$dbh->prepare("SELECT * FROM adressen WHERE Username = '$Name'");
$Abfrage->execute();
while (@Datensatz=$Abfrage->fetchrow_array) {
($F01, $F02, $F03,[..] $F40)=@Datensatz;

nur was? Muss man das irgendwie mit Backslash \ machen?


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

18. Feb 2004, 16:59
Beitrag # 22 von 38
Beitrag ID: #71097
Bewertung:
(4409 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü,

an die Sonderzeichen habe ich noch gar nicht gedacht.

Die Abfrage für das Änderungsformular:

my $Abfrage=$dbh->prepare("SELECT Spaltenüberschriften, mit, Komma, getrennt FROM adressen WHERE Username = ? ");
$Abfrage->execute($Name);
my @Datensatz = $Abfrage->fetchrow_array();

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

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

Die while-Schleife habe ich mal gestrichen, weil ja nur ein Datensatz selektiert wird.
Und SELECT * eignet sich nur zu Testzwecken.

Das Escapen der Sonderzeichen ist für die Anzeige des Datensatzes auch nützlich, also nicht nur beim Änderungsformular.
@Datensatz = map CGI::escapeHTML($_), @Datensatz;

Gruß Sabine


als Antwort auf: [#64448]
(Dieser Beitrag wurde von SabineP am 18. Feb 2004, 17:03 geändert)

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

19. Feb 2004, 11:47
Beitrag # 23 von 38
Beitrag ID: #71214
Bewertung:
(4409 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Dieses escapen verursachte wieder einen Fehler, weil ich das Modul Strict und CGI im aenderungsformular.pl nicht eingebunden hatte. Nachdem ich das gemacht hab kamen wieder zig Fehlermeldungen, weil das "my" hier fehlte: (my $F01, my $F02, [..], my $F40) = @Datensatz;

Hab ich korrigiert. Jetzt kommt keine Fehlermeldung, aber es hat sich auch nichts geändert zu vorher. Wenn ein Eintrag "test" vorhanden ist, wird er im Quelltext immernoch als value=""test"" dargestellt und das Feld ist im Browser leer.

Warum soll ich nochmal dieses Escape-Teil in der normalen Ansicht (details.pl) einfügen? Die funktioniert doch eigentlich, da wird auch das "test" oder das Wort kommt's (mit Apostroph) richtig in die Seite eingebunden und angezeigt

Gruß Hanü


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

19. Feb 2004, 12:27
Beitrag # 24 von 38
Beitrag ID: #71227
Bewertung:
(4409 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü,

schreib mal das escapeHTML gleich nach dieser Zeile:

my @Datensatz = $Abfrage->fetchrow_array();

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

Angenommen in der Datenbank steht <test> anstatt "test",
dann kann die Zelle mit dem Eintrag <test> in der normalen Ansicht nicht angezeigt werden.

mit
@Datensatz = map CGI::escapeHTML($_), @Datensatz;

wird aus den beiden spitzen Klammer im HTML-Code &lt; und &gt;
und aus " wird &quot;

Gruß Sabine


als Antwort auf: [#64448]
(Dieser Beitrag wurde von SabineP am 19. Feb 2004, 12:28 geändert)

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

19. Feb 2004, 13:05
Beitrag # 25 von 38
Beitrag ID: #71236
Bewertung:
(4409 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So fuktionierts. Kann ich eigentlich dieses "use strict;"-Modul beim Änderungsformular auch weglassen? So wie ich das jetzt beim details.pl gesehen habe, brauch ich für das
@Datensatz = map CGI::escapeHTML($_), @Datensatz;
nur "use CGI;" Dann bräuchte ich nämlich dieses "my" nicht immer eingeben?!

Und noch eine Frage habe ich: Muss man bei diesen Scripts drauf achten, ob sie Multiuser-fähig sind? Also von mehreren Leuten gleichzeitig benutzt werden können, ohne dass die Daten in der Datenbank gelöscht werden? Ich kann mir das eigentlich nur für das aenderung.pl vorstellen, weil dieses das einzige Script ist, das Daten in die DB schreibt.
aenderungsformular.pl und details.pl lesen nur und zeigen die Daten dann an?!

Gruß Andreas


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

19. Feb 2004, 14:13
Beitrag # 26 von 38
Beitrag ID: #71258
Bewertung:
(4409 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Du kannst das my auch vor die Klammer schreiben:

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

use strict; sollte man eigentlich in jedem Perl-Script verwenden, um Fehler zu vermeiden.

Das Script kann von beliebig vielen Usern gleichzeitig verwendet werden,
auch dem mySQL-Server ist es egal wieviele User gerade ihre Daten ändern.

Gruß Sabine



als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

19. Feb 2004, 14:57
Beitrag # 27 von 38
Beitrag ID: #71268
Bewertung:
(4409 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Kann man das auch bei der Datumsermittlung so schreiben:
my (undef, $min, $hour, $mday, $mon, $year, $wday, undef, undef) = localtime(time);
[Nachtrag: Ja, man kann, habs eben ausprobiert]

Wenn die while-Schleife rausfällt, ist dann $Abfrage->finish; noch erforderlich? (genauso bei $query->finish;?)

Gruß Hanü


als Antwort auf: [#64448]
(Dieser Beitrag wurde von Hanü am 19. Feb 2004, 15:24 geändert)

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

19. Feb 2004, 16:47
Beitrag # 28 von 38
Beitrag ID: #71301
Bewertung:
(4409 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hanü,

$Abfrage->finish; und $query->finish;
brauchst Du in Deinem Script nicht,

beides wird überflüssig durch
$dbh->disconnect;

Gruß Sabine


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

26. Feb 2004, 20:53
Beitrag # 29 von 38
Beitrag ID: #72293
Bewertung:
(4409 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi, einige Leute haben sich beschwert und ich hab es auch schon gemerkt: Manchmal werden die Daten nach einer Änderung nicht übernommen sondern komplett gelöscht!? Mir ist es aufgefallen, als ich die Eingabe in einem Feld leer lies, um diesen einen Eintrag zu löschen. Leider war dann der komplette Datensatz gelöscht!?

Ansonsten funktioniert alles wunderbar!
Viele Grüße Hanü


als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

26. Feb 2004, 21:32
Beitrag # 30 von 38
Beitrag ID: #72300
Bewertung:
(4409 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü, wie sieht denn jetzt das Script für das
Änderungs-Formular und das Update-Script aus?

Gruß Sabine



als Antwort auf: [#64448]

Adressenscript für Intern-Bereich

Hanü
Beiträge gesamt: 219

26. Feb 2004, 23:40
Beitrag # 31 von 38
Beitrag ID: #72315
Bewertung:
(3384 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]

Adressenscript für Intern-Bereich

SabineP
Beiträge gesamt: 7586

27. Feb 2004, 11:41
Beitrag # 32 von 38
Beitrag ID: #72385
Bewertung:
(3384 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:
(3384 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:
(3384 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:
(3384 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:
(3384 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:
(3384 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:
(3384 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