Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3337[/thread]

Speichern geht nicht: Datensatz ändern - speichern geht nicht



<< |< 1 2 3 4 >| >> 33 Einträge, 4 Seiten
Ronaldl
 2003-09-20 10:04
#33607 #33607
User since
2003-09-09
28 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich lade den datensatz über eine suchroutine in ein Formular.
Dort ändre ich daten und übergebe eine artikelid. Diese kommt auch im "sub speichern" an. Aber abspeichern macht er nicht !! Hat da jemand eine Idee ??

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# ----------------------------------------------------------------------

sub anzeigen
{
my ($buch,$zu, $wo1) = @_;
my ($dbh, $sth, $ref, $anz);
$dbh = WebDB::connect();

$sth = $dbh->prepare ("SELECT ArtID, Reihenfolge, ArtNr, ArtGruppe, ArtNGruppe, ArtTitel, ArtText, ArtPreis, ArtMWSt, ArtRabatt, ArtEigenschaften, ArtBildklein, ArtBildgross FROM shop1_artikel_1 WHERE $wo1 LIKE '$buch' '$zu' ");
$sth->execute ();
while (my $ref = $sth->fetchrow_hashref ()){
my %hash = %{$ref};
print start_form (-action => url ()),
table (
Tr (
td ("ArtID:"),
td (textfield (-name => 'ArtIDA',
-size => 15,
-value => $hash{'ArtID'}))
),
Tr (
td ("ArtNr:"),
td (textfield (-name => "name",
-size => 15,
-value => $hash{'ArtNr'}))
),
Tr (
td ("ArtGruppe"),
td (textfield (-name => "name",
-size => 5,
-value => $hash{'ArtGruppe'}))
),
Tr (
td ("ArtNGruppe"),
td (textfield (-name => "name",
-size => 5,
-value => $hash{'ArtNGruppe'}))
),
Tr (
td ("ArtTitel:"),
td (textfield (-name => "name",
-size => 60,
-value => $hash{'ArtTitel'}))
),
Tr (
td ("ArtText:"),
td (textarea (-name => "name",
-cols => 60, -rows => 4,
-value => $hash{'ArtText'}))
),
Tr (
td ("ArtPreis:"),
td (textfield (-name => "name",
-size => 15,
-value => $hash{'ArtPreis'}))
),
Tr (
td ("ArtMWSt:"),
td (textfield (-name => "name",
-size => 15,
-value => $hash{'ArtMWSt'}))
),
Tr (
td ("ArtRabatt:"),
td (textfield (-name => "name",
-size => 15,
-value => $hash{'ArtRabatt'}))
),
Tr (
td ("ArtEigenschaften:"),
td (textfield (-name => "name",
-size => 15,
-value => $hash{'ArtEigenschaften'}))
),
Tr (
td ("ArtBildklein:"),
td (textfield (-name => "name",
-size => 25,
-value => $hash{'ArtBildklein'}))
),
Tr (
td ("ArtBildgross:"),
td (textfield (-name => "name",
-size => 25,
-value => $hash{'ArtBildgross'}))
),
),
br (),
submit (-name => "aktion", -value => "Speichern"),
" ",
submit (-name => "aktion", -value => "Daten Löschen"),
end_form ();
print p hr();
}

}
# ----------------------------------------------------------------------

sub speichern
{
my $dbh;
my $sth;
my $ref;
my ($IDA) = @_;
print $IDA; # hier kommt noch der Richtige wert an.

$dbh = WebDB::connect();
$dbh->do ("REPLACE INTO shop1_artikel_1 (Reihenfolge, ArtNr, ArtGruppe, ArtNGruppe, ArtTitel, ArtText, ArtPreis, ArtMWSt, ArtRabatt, ArtEigenschaften, ArtBildklein, ArtBildgross)"."VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", undef, param ("name"), param ("name"),param ("name"),param ("name"),param ("name"),param ("name"),param ("name"),param ("name"),param ("name"),param ("name"),param ("name"),param ("name"));

$sth = $dbh->prepare ( "SELECT * FROM shop1_artikel_1 WHERE ArtID = $IDA ");
$sth->execute ();
$ref = $sth->fetchrow_hashref ();
$sth->finish ();
$dbh->disconnect ();

}
#--------------------------------------------------------------------------
THX ,bis bald Ronald
ich
 2003-09-20 12:01
#33608 #33608
User since
2003-09-19
120 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

probier mal folgendes nach deinem replace into
Code: (dl )
print $dbh->{'mysql_error};


Gruss
ich
If you tell the truth you don't have to remember anything.
-- Mark Twain
Ronaldl
 2003-09-20 13:15
#33609 #33609
User since
2003-09-09
28 Artikel
BenutzerIn
[Homepage] [default_avatar]
Schade auch das zeigt mir nix an trotz
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);im Programmkopf
THX ,bis bald Ronald
format_c
 2003-09-20 13:29
#33610 #33610
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Warum verwendest du in diesem replace statement Platzhalter wenn du den klimbim dann eh hinten dran schreibst. hab ich noch nie gesehen.
Arbeite lieber mit der Vars Methode und setz die werte mal direkt rein:
Code: (dl )
1
2
3
my %v = $cgi->Vars();

..."REPLACE ..... VALUES('$v{name}','$v{name}',.....)"....


Die punkte bedezten nur dass ich zu faul war alles abzutippen.
Ach ja um dir auch wirklich Warnungen im HTML-Qelltext als kommentar ausgeben zu lassen musst du noch nach der ausgabe des headers ein warningsToBrowser(1); reinhauen.

Gruß Alex\n\n

<!--EDIT|format_c|1064050387-->
Ronaldl
 2003-09-20 14:05
#33611 #33611
User since
2003-09-09
28 Artikel
BenutzerIn
[Homepage] [default_avatar]
Kannst du mir itte erklären wo %v & Vars seine werte her bekommt und wie ich die zeile mit dem Replace korrekt aussieht was kann ich dann wech lassen und was nicht.

Code: (dl )
1
2
3
 my %v = $cgi->Vars();

..."REPLACE ..... VALUES('$v{name}','$v{name}',.....)"..
THX ,bis bald Ronald
format_c
 2003-09-20 14:20
#33612 #33612
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Das Hash %v bekommt seine Werte von der Methode Vars des Objektes $cgi aus der Klasse CGI.

Ich versuche mal eine analogie mit param herzustellen:
Code: (dl )
1
2
3
4
use CGI;
my $cgi = CGI->new();
my %v = ();
$v{$_} = param($_) for $cgi->keywords();


so arbeitet in etwa (natürlich nur veranschaulicht) die Vars Methode.

Hier der Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sub  speichern
{
# Objekt erstellen falls noch nicht geschehen
my $cgi = CGI->new();
# Alle Parameter ins Hash %v
my %v = $cgi->Vars();
my $dbh;
my $sth;
my $ref;
my ($IDA) = @_;
print $IDA; # hier kommt noch der Richtige wert an.

$dbh = WebDB::connect();
$dbh->do ("REPLACE INTO shop1_artikel_1 (Reihenfolge, ArtNr, ArtGruppe, ArtNGruppe, ArtTitel, ArtText, ArtPreis, ArtMWSt, ArtRabatt, ArtEigenschaften, ArtBildklein, ArtBildgross)
VALUES ('$v{name}','$v{name}','$v{name}','$v{name}','$v{name}','$v{name}','$v{name}','$v{name}','$v{name}','$v{name}','$v{name}','$v{name}')") or die DBI::errstr;
# use DBI muss vorhanden sein damit errstr ausgegenben werden kann oder muss durch das
# Package WebDB implementiert sein.
$sth = $dbh->prepare ( "SELECT * FROM shop1_artikel_1 WHERE ArtID = $IDA ");
  $sth->execute ();
  $ref = $sth->fetchrow_hashref ();
  $sth->finish ();
  $dbh->disconnect ();

}
#--------------------------------------------------------------------------


Gruß Alex\n\n

<!--EDIT|format_c|1064053492-->
format_c
 2003-09-20 14:29
#33613 #33613
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Aber irgendwie verstehe ich die Logik deines Codes nicht.

Was soll die Sub speichern eigentlich machen?
Ich verstehe das bis jetzt so, dass du alle Werte in der Tabelle shop1_artikel1 mit param("name") überschreibst und dann ein paar Datensätze ausgaben willst wo ArtID den Wert von $IDA hat was eigentlich ziemlich sinnlos ist. oder interpretiere ich deinen Code falsch. wenn ja vergiss meine Codemoldulation.

Gruß Alex
Ronaldl
 2003-09-20 14:34
#33614 #33614
User since
2003-09-09
28 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich bekomme da folgende fehlermeldung:
Code: (dl )
DBD::mysql::db do failed: You have an error in your SQL syntax near '' at line 1 at aend2.pl line 192.
THX ,bis bald Ronald
Ronaldl
 2003-09-20 14:38
#33615 #33615
User since
2003-09-09
28 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ist ganz einfach, ich habe da einen php shop ohne admin, ich mach jetzt den admin in perl dazu.
der code läd über eine abfrage einen datensatz in ein formular (s.o) ich ändere alle oder einen teil der felder ab und möchte dies dann in der DB wieder speichern.
THX ,bis bald Ronald
format_c
 2003-09-20 14:49
#33616 #33616
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Kurz du willst von einem bestehenden Produkt die Daten ändern?
Ich tät das folgendermaßen machen.
Gib die Daten in das Formular aus, di ID in einem hidden-field dazu.

Beim ändern-submit liest du alle werte wieder ein und updatest den Record nur:
[sql]UPDATE shop1_artikel1 SET feldname='$uebergebenerparameter',andererfeldname ='$andereruebergebenerparameter' WHERE id ='$uebergebenid'[/sql]

Gruß Alex
<< |< 1 2 3 4 >| >> 33 Einträge, 4 Seiten



View all threads created 2003-09-20 10:04.