Schrift
[thread]7009[/thread]

String lässt sich nicht ausgeben: Datenbankvariable in String



<< >> 5 Einträge, 1 Seite
Gast Gast
 2005-05-23 19:18
#55097 #55097
hallo,
ich habe folgendes problem.
in der Tabelle sind folgende Server eingetragen:

Par05.gda.pr.com
Par02.gda.pr.com
Par03.gda.pr.com
Par01.dmzgda.pr.com

In dem code frage ich diese Server aus der datenbank ab und möchte diese mit einem Text ausgeben.

Lider muss er wohl probleme mit den 'Punkten' in der Variable haben.

Alles was hinter der Variable an den String geschrieben wird, gibt er damm am Ende vor der Variable aus. Ich hatte sogar schon den Fall, das er alles davor überschrieben hat.

Zusätzlich überschreibt er immer wieder die Servervariable und zeigt diese nicht hintereinander an. Was man dann am ende sieht ist nur die letze Ausgabe mit dem letzten host in der Liste:

</a></center></td><td><center><a href="#" class="sapLnkSml">Par01.dmzgda.pr.com

Wenn ich jetzt anstatt dem Servername $ref->[1] die Server_Id ($ref->[0] == 1-4) Ausgebe, funktioniert es!

Weiß einer wie ich das beheben kann ?

Danke und Gruß jonas

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
use DBI;

my $hostname="";
my $database="";
my $user="";
my $password="";

my $dbh;

#-------------------------------------------------------------

db_connection();
Ausgabe();

#-------------------------------------------------------------

sub Ausgabe
{


my $sth = $dbh->prepare("SELECT * FROM SCN_Main_Server")or die "Fehler: ", $dbh->errstr();
$sth->execute();

while($ref = $sth->fetchrow_arrayref)
{

print "<td><center><a href=\"#\" class=\"sapLnkSml\">$ref->[1]</a></center></td>";

}
$sth->finish();
$dbh->disconnect();

}

sub db_connection
{
$dbh = DBI->connect("DBI:mysql:database=$database;host=$hostname",$user, $password, {RaiseError => 1});
}
Strat
 2005-05-23 19:35
#55098 #55098
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
so ganz werde ich aus deinem Problem nicht schlau...
wenn deine spalten id und servername usw. heissen, dann teste mal
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my $sth = $dbh->prepare("SELECT id, servername FROM SCN_Main_Server")
 or die "Fehler beim prepare: ", $dbh->errstr();

# beim execute tritt haeufiger ein fehler auf als beim prepare, gerade mysql
# schickt die abfrage erst beim execute an den server
$sth->execute()
 or die "Fehler beim execute: ", $dbh->errstr();

while (my $ref = $sth->fetchrow_arrayref() ){
 print qq~<td style="text-align:center"><a href="#" class="...">$ref->[1]</a></td>~;
} # while
$sth->finish();

sonst verwende einfach die namen der spalten anstelle von *, weil du dich sonst auf die reihenfolge von * nicht 100% verlassen kannst.

Nebenbei: wenn du mit RaiseError => 1 arbeitest, kannst du dir die Fehlerabfrage auch sparen, weil das script bei einem fehler sowieso stirbt; ich verwende RaiseError nie, sondern kuemmere mich lieber selbst um die fehlerbehandlung, weil ein die oft zu grausam ist\n\n

<!--EDIT|Strat|1116862565-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
xasaan
 2005-05-23 19:56
#55099 #55099
User since
2005-05-23
1 Artikel
BenutzerIn
[default_avatar]
hm das hat leider auch nciht funktioniert. ich versuche es noch etwas genauer zu beschreiben.

Ich habe ein Tabelle mit zwei Spalten
Server_Id und Server_Hostname diese haben folgenden Inhalt:

1 | Par05.gda.pr.com
2 | Par02.gda.pr.com
3 | Par03.gda.pr.com
4 | Par01.dmzgda.pr.com


Wenn ich nun den obrigen oder deinen quellcode benutze, kommt folgende Ausgabe zurück:


</a></td><td style="text-align:center"><a href="#" class="...">Par01.dmzgda.pr.com
Was er aber eigentlich schreiben sollte:
<td style="text-align:center"><a href="#" class="...">Par01.dmzgda.pr.com</a></td>

Er ersetzt also alles, was hinter der Variable ist, vor dir Variable. So sieht es zumindest aus. Zusätzlich überschreibt er die alten Ausgaben. Denn eigentlich sollte die Ausgabe am ende ja so aussehen:

<td style="text-align:center"><a href="#" class="...">Par05.gda.pr.com</a></td><td style="text-align:center"><a href="#" class="...">Par03.gda.pr.com</a></td><td style="text-align:center"><a href="#" class="...">Par02.gda.pr.com</a></td><td style="text-align:center"><a href="#" class="...">Par01.dmzgda.pr.com</a></td>

Erst wenn ich am ende des Strings :
Code: (dl )
print qq~<td style="text-align:center"><a href="#" class="...">$ref->[1]</a></td>~;

ein "\n" für einen zeilenumbruch setze, gibt er mir das ganze zumindest halbrichtig aus:

</a></td><td style="text-align:center"><a href="#" class="...">Par05.gda.pr.com
</a></td><td style="text-align:center"><a href="#" class="...">Par04.gda.pr.com
</a></td><td sty="text-align:center"><a href="#" class="...">Par03.gda.pr.com
</a></td><td style="text-align:center"><a href="#" class="...">Par02.gda.pr.com
</a></td><td style="text-align:center"><a href="#" class="...">Par01.dmzgda.pr.com

Trotzdem immer noch der Fehler mit dem "</a></td>" der irgendwie am Anfang der Zeile kommt.

wenn ich jetzt anstatt dem Server_Hostnamen die Server_ID ausgeben lasse, funktioniert es einwandfrei!

Weißt du sonst noch was?
Gruß Xasaan
GwenDragon
 2005-05-23 20:17
#55100 #55100
User since
2005-01-17
14790 Artikel
Admin1
[Homepage]
user image
Wenn schon, dann fehlt noch was!



Gibst du im Browser oder in der Konsole aus?
Code: (dl )
1
2
3
4
5
6
7
8
9
print "<table>";

while(my $ref = $sth->fetchrow_arrayref)
{
print "<tr>";
print "<td><center><a href=\"#\" class=\"sapLnkSml\">$ref->[1]</a></center></td>";
print "</tr>";
}
print "</table>";


Ich kapiere das Problem nicht. Geht es um die »schöne Ausgabe« des HTML?\n\n

<!--EDIT|GwenDragon|1116865487-->
Strat
 2005-05-23 20:21
#55101 #55101
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
das verstehe ich nicht; schreibe mal folgendes nach dem shebang:
Code: (dl )
1
2
use CGI;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);

schreibe das sql-statement folgendermaszen:
Code: (dl )
1
2
my $sth = $dbh->prepare("SELECT Server_ID, Server_Hostname FROM SCN_Main_Server")
or die "Fehler beim prepare: ", $dbh->errstr();

und schreibe die while-schleife folgendermaszen um:
Code: (dl )
1
2
3
4
5
6
7
8
print "----------------------\n";
while (my $row = $sth->fetchrow_hashref()) {
 print qq~<td style="text-align:center"><a href="\#">~;
 $row->{Server_Hostname} =~ s/\r//g; # CRs rauskicken
 print CGI::escapeHTML($row->{Server_Hostname}); # html-sonderzeichen escapen
 print qq~</a></td>\n";
} # while
print "------------------------\n";

was kommt nun als output?

fuehrst du das script in der shell oder ueber den webserver aus?

wenn es jetzt funktioniert hast, hast du es vermutlich in der shell ausgefuehrt, und hast am ende von Server_hostname ein CR drinnen\n\n

<!--EDIT|Strat|1116865338-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 5 Einträge, 1 Seite



View all threads created 2005-05-23 19:18.