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

FF zeigt nur Quellcode an, IE kann HTML darstellen (Seite 2)



<< |< 1 2 3 >| >> 30 Einträge, 3 Seiten
Danwe
 2006-06-09 12:51
#7963 #7963
User since
2006-06-09
76 Artikel
BenutzerIn
[default_avatar]
Na gut, hier kommt das ganze script.
wundert euch nicht, die Einträge werden noch nicht alle an der richten Stelle geschrieben u. gespeichert, das mache ich als nächstes, habe meine Datenbank nochmal gründlich überdacht u. muss diese erst neu designen. Grundlegen funktioniert das aber.

Was nicht geht:
Firefox Anzeige

und auch komisch:
Oben frage ich ab, ob etwas über das Formular übergeben wurde und zwar mit : if($ENV{'REQUEST_METHOD'} eq 'GET')
er gibt immer true zurück, also geht davon aus dass etwas übergeben wurde. Somit wird dann auch immer ein neuer Eintrag in die DB gemacht obwohl das Formular garnicht ausgefüllt ist.
Gibts hier noch eine andere möglichkeit, oder muss ich wirklich ein paar Felder hernehmen u. abfragen, ob da etwas drinnen steht? Denn wenn nichts in den Feldern steht, dann sollten ja auch nur die bisherigen Einträge angezeigt werden, aber kein neuer gemacht werden.









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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#! /usr/bin/perl -w

use DBI;
use CGI;

use warnings;
use CGI::Carp qw/fatalsToBrowser/;

if($ENV{'REQUEST_METHOD'} eq 'GET') #Abfragen ob der user eine Eingabe gemacht hat
{
&GaestebuchEintrag();
}

&htmlGaestebuch();

#+-----------+-----------+----------+------------+-----------+--------+------------+
| Name | Datum | Zeit | Titel | Text | Mail | Website |
#+-----------+-----------+----------+------------+-----------+--------+------------+
#=====================================================================================#

sub GaestebuchEintrag
{
use CGI::Carp qw(fatalsToBrowser);
my $cgi = new CGI;

my $name = $cgi->param('name');
my $mail =$cgi->param('mail');
my $homepage =$cgi->param('homepage');
my $titel =$cgi->param('titel');
my $nachricht =$cgi->param('nachricht');

&dateNow();
my $datum =@dateNow[0];
my $zeit =@dateNow[1];

&connect();
my $sql = qq{insert into gaestebuch (Name,Datum,Zeit,Titel,Text,Mail,Website) values (?,?,?,?,?,?,?)};
my $sth = $dbh->prepare( $sql );
$sth->execute($name,$datum,$zeit,$titel,$text,$mail,$homepage);
$sth->finish();
&disconnect();

}


sub dateNow
{
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $CTIME_String = localtime(time);
$Monat+=1;
$Jahrestag+=1;
$Monat = sprintf("%02d",$Monat);
$Monatstag = sprintf("%02d",$Monatstag);
$Stunden = sprintf("%02d",$Stunden);
$Minuten = sprintf("%02d",$Minuten);
$Sekunden = sprintf("%02d",$Sekunden);
$Jahr+=1900;
my @Wochentage = ("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
my @Monatsnamen = ("","Januar","Februar","M&auml;rz","April","Mai","Juni",
"Juli","August","September","Oktober","November","Dezember");

#@dateNow=(["$Monatstag. $Monatsnamen[$Monat] $Jahr<br>\n"], ["$Stunden.$Minuten Uhr<br>\n"]);
$dateNow[0]="$Monatstag. $Monatsnamen[$Monat] $Jahr";
$dateNow[1]="$Stunden:$Minuten:$Sekunden";
}





sub htmlGaestebuch


{
print <<EOT;

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> #habs mal mit einem html Kopf ausprobiert hier, bringt aber auch nichts!

<html>
<head>
<title>Gästebuch</title>
<link rel="stylesheet" type="text/css" href="P:/an _ _ _/Daniel/styles.css">
</head>
<body>

EOT

print @dateNow[0];
print @dateNow[1];

&connect(); #Verbinden mit datenbank

"Database connection not made: $DBI::errstr";

my $sql = qq{select * from gaestebuch};
my $sth = $dbh->prepare( $sql );
$sth->execute();
while(@ergebnis=$sth->fetchrow_array)
{

print <<EOT;
<table class="guestTable" width = 400px><tr>
<td class="Date" width=125px rowspan=2>
<u><b>#1</b></u>
<p>
EOT
print $ergebnis[1];
print '<p> </td> <td class="Name" align = "Right">';
print "<b> $ergebnis[0] </b>";
print " aus ";
print "<b> $ergebnis[0] </b>";
print '</td> </tr> <tr> <td class="Text"> <h1>Eintrag Überschrift</h1>';
print $ergebnis[4];
print "</td> </tr> </table>";
}
$sth->finish();

&disconnect(); #Verbindung mit Datenbank trennen

print <<EOT;
<!-- Eingabefenster Tabelle -->
<form action='gaestebuch.plx' method='get'>
<table id ="InputTable">
<tr>
<td>Name:</td>
<td>
<input type="text" size="30" maxlength="30" name="name">
</td>
</tr>
<tr>
<td>E-Mail:</td>
<td>
<input type="text" size="30" maxlength="40" name='mail'>
</td>
</tr>
<tr>
<td>Homepage:</td>
<td>
<input type="text" size="30" maxlength="40" name="homepage">
</td>
</tr>

<tr>
<td><br></td>
<td><br></td>
</tr>

<tr>
<td>Titel: </td>
<td>
<input type="text" size="30" maxlength="40" name='titel'>
</td>
</tr>
<tr>
<td>Eintrag:</td>
<td>
<textarea cols='40' rows='20' name='nachricht'>Nachricht</textarea>
</td>
</tr>
<tr>
<td></td>
<td style="text-align:center;">
<input type='submit' value='Eintrag'>
</td>
</tr>
<table>
</form>

</body>
</html>
EOT
}

sub connect{
my $verbindung = "DBI:mysql:dwTest";
my $username = "xxxxxx";
my $password = "xxxxxx";

use DBI;
$dbh = DBI->connect($verbindung, $username, $password);
}

sub disconnect {
$dbh->disconnect();
}
\n\n

<!--EDIT|Danwe|1149843799-->
Linuxer
 2006-06-09 13:33
#7964 #7964
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Wo wird der HTTP-Header ausgegeben?

Ein HTTP-Stream besteht aus einem Header und dem eigentlichen Datenstrom.

Bevor Du irgendeinen HTML-Inhalt ausgibst, musst Du einen HTTP-Header ausgeben. Entweder mit
Code: (dl )
print "Content-type: text/html\n\n";
oder - was die schönere Variante ist - mit Hilfe des CGI Moduls, das Du ja bereits eingebunden hast:
Code: (dl )
print $cgi->header(-type => 'text/html');


Die Abfrage auf REQUEST_METHOD "GET", ob ein Beitrag eingetragen werden soll, ist schlecht, denn jeder simpler HTTP-request (also jedes Abholen eines Dokuments, Bilds, o.ä.) ist ein GET Request!
Eine Variante wäre das Überprüfen, ob die passende Datenfelder akzeptable Daten enthalten...

[edit1] reformatiert; GET-Absatz hinzugefügt\n\n

<!--EDIT|Linuxer|1149845984-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
nepos
 2006-06-09 14:01
#7965 #7965
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du willst unbedingt das CGI-Modul richtig benutzen und du willst ein
Code: (dl )
print header;
vor deine DTD packen.
Danwe
 2006-06-09 14:14
#7966 #7966
User since
2006-06-09
76 Artikel
BenutzerIn
[default_avatar]
ok, danke nun geht es im FF wieder.
nur die Stylesheet Datei wird nicht gefunden, im IE schon!?
der Pfad lautet P:/an _ _ _/testl/styles.css
Wenni ich ihn auf C:/styles.css ändere, dann funktioniert es auch im FF wieder.
GwenDragon
 2006-06-09 14:39
#7967 #7967
User since
2005-01-17
14861 Artikel
Admin1
[Homepage]
user image
[quote=Danwe,09.06.2006, 12:14]nur die Stylesheet Datei wird nicht gefunden, im IE schon!?
der Pfad lautet P:/an _ _ _/testl/styles.css
Wenni ich ihn auf C:/styles.css ändere, dann funktioniert es auch im FF wieder.[/quote]
Bitte schau dir mal an, wie HTML codiert wird.
http://www.html-seminar.de/
http://de.selfhtml.org

C:/styles.css oder P:/an _ _ _/testl/styles.css ist KEIN gültige URL!
Auf einem Server gibt es keine URL, die P:/... ist.\n\n

<!--EDIT|GwenDragon|1149850334-->
Froschpopo
 2006-06-09 14:51
#7968 #7968
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ich kann das konzept von microsoft nicht verstehen:
man will das internet verbessern, indem man kullanzen/toleranzen in einen browser einbaut, die optische fehler retouchieren. Ich glaube aber, dass genau das gegenteil eintritt: Die vielen Hobbyprogrammierer glauben eine schöne und funktionale Seite programmiert zu haben, was irtümlicherweise nicht der Fall sein kann, da der IE ihnen einfach die Schönheit vom Himmel lügt.
In meinen Augen verschlechtert das die Qualität des Internets weil einfach technisch nicht einwandfreie Tatsachen verschleiert werden. Webdesignern macht echt kaum noch spaß, weil man ständig damit beschäftigt ist jedes piss-script erstmal mit 10 browsern von unterschiedlichen herausgebern und aus 4 jahrgängen auszuprobieren! Anstatt, dass man mal einen standard auch einhält, macht jeder sein eigenes ding. das ist echt zum kotzen!
GwenDragon
 2006-06-09 14:58
#7969 #7969
User since
2005-01-17
14861 Artikel
Admin1
[Homepage]
user image
Der Internet Explorer ist leider zu tolerant. Er denkt die Fehler, die HTML-Programmierer machen, einfach weg.
Zudem funktionieren Skripte mit Links auf die lokalen Festplatten nur auf dem eigenen Rechner. Und nirgendwo anders.

Leider gehört zum Webdesign auch, sich mit den Macken nicht W3C-konformer Browser auszukennen. Spaß macht das nicht und kostet oft auch Geld und Zeit.

Klar vemiest sowas das Hobbyistendasein.\n\n

<!--EDIT|GwenDragon|1149850849-->
Danwe
 2006-06-09 15:10
#7970 #7970
User since
2006-06-09
76 Artikel
BenutzerIn
[default_avatar]
@GwenDragon:

Warum sollte P: nicht funktionieren? Ok, die Leerzeichen habe ich mal durch %20 ersetzt hat auch nicht geholfen, aber ich habe das noch nie gelsen, und ich habe mich schon viel mit HTML auseinander gesetzt und schon einige Seiten programmiert. Warscheinlich liegt das dann wohl daran, dass ich selten ein laufwerk P zur verfügung hatte.
Was meinst du mit "Auf einem Server gibt es keine URL, die P:/... ist." ?? Auf diesem Server gibt es eben ein Laufwerk, das P:/... ist, und auf dem ich das abgelegt habe.


Probleme macht igendwie noch das mit der Auswahl, ob jetzt ein neuer Eintrag gemacht werden soll, oder ob nur die Seite aufgebaut werden muss.
kann mir jemand eine gute Abfrage dafür verraten, die man möglichst nicht (versehentlich) umgehen kann, indem man z.B. die Seite nochmal neu lädt? Es sollte einfach nur ein Eintrag gemacht werden, wenn auf den Button geklickt wird.

Das funktioniert nicht:

my $gesendet =$cgi->param('gesendet');
if ($gesendet != "Eintrag")
{... }

der button gesendet hat den Wert Eintrag. Damit könnte man ja erkennen ob gerade etwas gesendet wurde, geh leider nicht.

Gibt es eigentlich einen großen unterschied zwischen "post" und "get"?
GwenDragon
 2006-06-09 15:24
#7971 #7971
User since
2005-01-17
14861 Artikel
Admin1
[Homepage]
user image
[quote=Danwe,09.06.2006, 13:10]@GwenDragon:

Was meinst du mit "Auf einem Server gibt es keine URL, die P:/... ist." ?? Auf diesem Server gibt es eben ein Laufwerk, das P:/... ist, und auf dem ich das abgelegt habe.[/quote]
P:/Directory/Subdirectory/Datei ist KEIN gültiger URI/URL.

http://de.wikipedia.org/wiki/Uniform_Resource_Identifier

Quote
Gibt es eigentlich einen großen unterschied zwischen "post" und "get"?

Schau dir mal http://de.wikipedia.org/wiki....ethoden an\n\n

<!--EDIT|GwenDragon|1149852351-->
renee
 2006-06-09 15:31
#7972 #7972
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
URL != Filesystem.

Wenn es auf der Platte ein P:/... gibt, heißt das noch lange nicht, dass die Verzeichnisse über eine URL erreichbar sind...

siehe Wikipedia:Wikipedia-Eintrag zu URL
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 3 >| >> 30 Einträge, 3 Seiten



View all threads created 2006-06-08 18:45.