webForumDet fria alternativet

CSS-klasser ignoreras???

8 svar · 325 visningar · startad av aasah

aasahMedlem sedan mars 20034 471 inlägg
#1

Möjligen borde det här postas i CSS-forumet, är osäker som vanligt...

Jag har ett registreringsskript som stoppar in nya users i en tabell. För att förhindra att man av misstag försöker köra samma postdata omigen försöker jag för ögonblicket skicka iväg ev positiv feedback till ett speciellt skript som skriver ut det man skickar in. Enligt detta tips. Alltså, om inserten gick bra så kommer denna glada info från en ny sida.

Problemet är bara att trots att den ivägskickade strängen specificerar CSS-klasser som ger färg på texten, så skrivs texten ut i svart??? Eftersom dessa "class-anrop" finns med i källan fattar jag inte varför det inte funkar... :x

Nedan följer lite relevanta kodsnuttar:

sidans källa skrev:

//....
<style type="text/css">
<!--
//...
.karm {
color: #DC143C;
}

.gold {
color: #FFCC00;
}
//...
-->
</style></head>
<body><P class=\"karm\">Successfully created 1 new visitor (Anna)!</P>
<h2 class=\"gold\">Currently this is all registered users</h2>
<P class=\"karm\">Eva since 2004-08-12<BR>
Anna since 2004-09-06<BR></P>

(Radbrytena har jag lagt in här för att öka läsbarheten.)

sidans URL skrev:

http://www.tydal.nu/aasah/message.php?Adv=\<P%20class="karm">
Successfully%20created%201%20new%20visitor%20(Anna)!</P>
<h2%20class="gold">Currently%20this%20is%20all%20registered%20users</h2>
<P%20class="karm">Eva%20since%202004-08-12<BR>
Anna%20since%202004-09-06<BR></P>

(Radbrytena har jag lagt in här för att öka läsbarheten.)

PHP-koden som skickar iväg det:

      $message = "<P class=\"karm\">Successfully created " . 
mysql_affected_rows() . " new visitor (".$anvNamn.")!</P>";
$qNew = "SELECT Namn, RegD FROM User";
$res = mysql_query($qNew) or die("$sorry ");
$message .= "<h2 class=\"gold\">Currently this is all 
registered users</h2><P class=\"karm\">";
while ($row = mysql_fetch_array($res))
         $message .= "$row[0] since $row[1]<BR>";
$message .= "</P>";
header("Location: message.php?Adv=".$message);

Och dito som tar hand om det:

//I message.php
if (isSet($_GET["Adv"]))
   echo $_GET["Adv"]."<BR>";
else echo "<P class=\"karm\">".$_GET["mess"]."<BR></P>";
printCopyright("b");

Någon som begriper varför det inte funkar??? :q

MatteMedlem sedan aug. 20002 975 inlägg
#2

I och för sig borde det ganske räckt med att skicka iväg variablerna, och haft övrig HTML-kod i message.php, men du har väl dina skäl.

Testa att köra din variabel $message genom urlencode innan du lägger dit den på URL-en.

PeeerMedlem sedan mars 20025 907 inlägg
#3
<body>[...]<P class=\"karm\">Successfully created 1 new visitor (Anna)!</P>[...]

Är det html-koden som ser ut så, så är det inte konstigt att det inte fungerar. Plocka bort dina \ framför citattecknen så fungerar det kanske bättre?

aasahMedlem sedan mars 20034 471 inlägg
#4

Var ända in i glödheta... kommer de \" ifrån??? Har ändrat men de försvinner inte...?

sidans källa skrev:

<body><P class=\"karm\">Successfully created 1 new visitor (HHHHH)!</P>
<h2 class=\"gold\">Currently this is all registered users</h2>
<P class=\"karm\">Eva since 2004-08-12<BR>
Karin since 2004-09-06<BR>
Anna since 2004-09-06<BR>
Johan since 2004-09-06<BR>
HHHHH since 2004-09-06<BR></P>

Antalet dummy-users bara växer... Radbrytningar åter inlagda för läsbarhetens skull.

$message = '<P class="karm">Successfully created ' . mysql_affected_rows() . 
' new visitor ('.$anvNamn.')!</P>';
$qNew = "SELECT Namn, RegD FROM User";
$res = mysql_query($qNew) or die("$sorry ");
$message .= '<h2 class="gold">Currently this is all registered 
users</h2><P class="karm">';
while ($row = mysql_fetch_array($res))
         $message .= "$row[0] since $row[1]<BR>";
$message .= "</P>";
header("Location: message.php?Adv=".urlencode($message));

//message.php
if (isSet($_GET["Adv"]))
   echo urldecode($_GET["Adv"])."<BR>";  //utgår ifrån att decode behövs?
else echo "<P class=\"karm\">".$_GET["mess"]."<BR></P>";

Fattar om möjligt ännu mindre nu... :x

PeeerMedlem sedan mars 20025 907 inlägg
#5

Det är inte så att du har "magic_quotes_gpc" aktiverat i php.ini? Isåfall lägger php själv till backslash framför dina citattecken. Kör dina strängar genom stripslashes() innan du skriver ut dem och se om det fungerar bättre. :)

aasahMedlem sedan mars 20034 471 inlägg
#6

Ååååh!!! Tusen tack, Peeer! :birp

Kan det vara farligt att plocka bort dessa slashes före ett echo??? Alltså, kan det öppna för ett säkerhetshål??? :q :o

PeeerMedlem sedan mars 20025 907 inlägg
#7

Inte vad jag vet. Däremot bör du köra htmlentities() på all data du skriver ut som du hämtar från adressfältet. Man skulle ju kunna trycka in ett javascript i url'en och då har du ett säkerhetshål!

Fast kör du htmlentities på strängarna så kommer du ju inte kunna skicka htmlkod genom dem (som du gör nu).

Intressant länk

aasahMedlem sedan mars 20034 471 inlägg
#8

Peeer skrev:

... Fast kör du htmlentities på strängarna så kommer du ju inte kunna skicka htmlkod genom dem (som du gör nu).

Intressant länk

Tack vare denna mycket intressanta länk kommer jag att lösa min vidareskickning på annat sätt så att jag kan slänga in htmlentitities. TACK, Peeer!!! :D

aasahMedlem sedan mars 20034 471 inlägg
#9

Borde inte detta lösa problemet:

//message.php
if (strpos($_GET["mess"], "<"))
   echo "This string contains values best ignored. :-(";
else echo "<P class=\\"karm\\">".$_GET["mess"]."<BR></P>";

??? :q Eller kan fula saker stoppas in utan ett "<" ?

(Jag skickar inte längre HTML-taggar med den.)

134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
131 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)