Schrift
[thread]10951[/thread]

Textvorbelegung (HTML Input) mit Perl Variablen



<< >> 5 Einträge, 1 Seite
amun-ra198
 2007-12-04 11:53
#103425 #103425
User since
2007-10-11
13 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe mich mal wieder im HTML / Perl Wald verirrt und finde, obwohl die Lösung wahrscheinlich einfach ist, nicht raus :)

Ich gebe mit meinem Skript folgendes über den Browser aus:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
use CGI;
use strict;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);

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

my $description = $cgi->param('param6');

print "<tr><td>Beschreibung:&nbsp;&nbsp;</td><td><input name=\"description\" size=60 maxlength=128 value=\'$description\'></td></tr>";

(einige Elemente fehlen hier, weil hierfür nicht relevant)

Mein Problem stellen die Hochkommatas dar (also \'$description\' letzte Zeile). Lasse ich diese Weg so wird der Wert $description ausgegeben, jedoch nach dem ersten Leerzeichen abgeschnitten, was mir soweit auch logisch erscheint.
Belasse ich die Hochkommatas aber an dieser Stelle steht in meinem Feld zwar der entsprechende Werte (komplett), aber der Rest des Feldes wird mit Leerzeichen aufgefüllt (also 128-Wertlänge Leerzeichen). Das wiederum verstehe ich nicht.
Wenn ich vor oder nach obiger Zeile meinen Wert für $description ausgebe erhalte ich nur den Wert ohne Leerzeichen. Also kann ich die Leerzeichen auch nicht einfach heraustrennen, da der Wert an sich ja i.O. ist. Mit \" habe ich übrigens den gleichen Effekt. Es muss also irgendwie an der Art und Weise der Ausgabe liegen.

Ich stehe da gerade irgendwie auf dem Schlauch.
Kann mir jemand weiterhelfen?

Danke
MfG
renee
 2007-12-04 12:03
#103426 #103426
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Pinzipiell ist das schon richtig mit den \' ... Was da schief läuft kann ich Dir nicht sagen - bei mir funktioniert es. Hast Du Dir schonmal einen Dump angeschaut?

Also einfach mal den Code oben durch das hier ersetzen (testweise):
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl

use strict;
use warnings;
use CGI;
use Data::Dumper;

$Data::Dumper::Useqq = 1;

print CGI::header( 'text/plain' );
my %params = CGI::Vars();
print Dumper \%params;
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/
pq
 2007-12-04 12:15
#103427 #103427
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
amun-ra198+2007-12-04 10:53:46--
Code: (dl )
1
2
3
my $description = $cgi->param('param6');

print "<tr><td>Beschreibung:&nbsp;&nbsp;</td><td><input name=\"description\" size=60 maxlength=128 value=\'$description\'></td></tr>";

Ich stehe da gerade irgendwie auf dem Schlauch.
Kann mir jemand weiterhelfen?

ja, du selbst.
du sagst, wenn du $description vorher ausgibst, sind keine leerzeichen drin, in dem string mit
dem html aber schon. ich muss ganz ehrlich sagen, dass ich das nicht glaube.
Code (perl): (dl )
1
2
3
my $description = $cgi->param('param6');
print "<$description>\n";
print "<tr><td>Beschreibung:&nbsp;&nbsp;</td><td><input name=\"description\" size=60 maxlength=128 value=\'$description\'></td></tr>";

so, warum sollte nun $description einmal leerzeichen haben und einmal nicht.
die lösung besteht darin, die stelle zu finden, wo leerzeichen hinzugefügt werden.
schau dir den output des obigen codes an. schau dir bitte auch das entstandene html im browser
an. und dann, um augenkrebs zu vermeiden, solltest du perls wunderbaren quoting-operator
benutzen:
Code (perl): (dl )
print qq{<tr><td>Beschreibung:&nbsp;&nbsp;</td><td><input name="description" size=60 maxlength=128 value="$description"></td></tr>};

zu guter letzt sei dir noch gesagt: was, wenn $description " enthält? ganz einfach, du musst
den wert von $description escapen, mit CPAN:HTML::Entities. oder gleich einem templating-system,
dass das für dich erledigt. CPAN:HTML::Template oder CPAN:HTC machen das für dich.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Struppi
 2007-12-04 13:49
#103434 #103434
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Falls du nicht mit Templates arbeiten willst (was aber grundsätzlich zu empfehlen ist) würde ich mir an deiner Stelle mal das CGI Module genauer anschauen, diese kann nicht nur CGI Daten empfangen sondern auch komfortabel HTML ausgeben, insbsondere für Formulare und Tabellen sind die Funktionen extrem nützlich und kümmern sich um genau solche Probleme.

Dein Code würde z.b. so aussehen

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use CGI;
use strict;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);

print $cgi->header(); 

my $description = $cgi->param('param6');
my @rows;
push @rows, $cgi->td([
        'Beschreibung:', 
        $cgi->textfield(-name => 'description', -size => 60, -maxlength => 128, -value =>$description)
        ]
);
print $cgi->table( $cgi->Tr( \@rows ));
und wenn der Parameter nicht 'param6', sondern 'description' heißt füllt dir sogar das Modul das Feld automatisch aus.
amun-ra198
 2007-12-04 14:27
#103440 #103440
User since
2007-10-11
13 Artikel
BenutzerIn
[default_avatar]
Ich habe mir nach pq´s Empfehlung den Inhalt der Variablen nochmal genau angesehen (ist übrigens ein MySQL DB Eintrag) und dabei tatsächlich ein Leerzeichen gefunden, dass ganz am Ende des Strings steht und das mir vorher noch nicht aufgefallen war. Mit chop läßt sich dieses Leerzeichen interessanterweise nicht entfernen, so dass ich mir den benötigten Teil einfach mit einem substr rausgeholt habe. Und siehe da, das Feld wird nicht mehr komplett mit Leerzeichen gefüllt.

@struppi: Ich werde das in Zukunft so umsetzen. Danke!

Wie aus diesem einen Leerzeichen die vielen Leerzeichen generiert werden weiß ich zwar jetzt noch nicht, aber auf jeden Fall habe ich einen Ansatzpunkt.

Danke für Eure Ideen
<< >> 5 Einträge, 1 Seite



View all threads created 2007-12-04 11:53.