Problem igen, galna funktioner och sånt...

PHP

3 svar · 175 visningar · startad av oelbal

Medlem sedan jan. 20014 973 inlägg
Trådstart#1

Nu blir jag galen. Fullständigt.
Detta har varit uppe i en tråd förut, där vi kom fram till en lösning, men det krånglar, så jag skulle vilja ha några spontana förslag på en ny lösning istället.

Jag har ett formulär som skickar ett antal variabler med $HTTP_POST_VARS. Nu vill jag att funktionen kollaVariabler() skall ta emot _ALLA_ $HTTP_POST_VARS och testa dem med htmlspecialchars().
Alltså, som en liten funktion för att filtrera det som elaka användare kan tänkas skicka. Jag skrev ner lite för att illustrera:

<?
if (isset($HTTP_POST_VARS['submit']))
{
kollaVariabler();
}
else
{
  ?>
  <html>
  <body>
  <form action="test3.php" method="post">
  <input type="text" name="var1"><br>
  <input type="text" name="var2"><br>
  <input type="submit" name="submit"><br>
  </form>
  </body>
  </html>
  <?
}

function kollaVariabler()
{
  global $HTTP_POST_VARS;
  while ($each_var = each($HTTP_POST_VARS))
  {
    htmlspecialchars($each_var[1]);
  }
  echo $HTTP_POST_VARS['var1'];
  echo $HTTP_POST_VARS['var2'];
}
?>

Om jag anger <html> och <body> i de båda rutorna så borde sidan echo'a ut & lt; html & gt; osv? Inte heller ' eller " konverteras...
Finns det någon som oooorkar ta sig tid att svara?

[Redigerat av oelbal den 23 jan 2002]

Medlem sedan mars 20007 896 inlägg
#2

Ah! Du kan inte anropa de globala associativa arrayerna om du vill få dem konverterade. Du får göra en egen global array. Eftersom att du lägger in varje värde från forumuläret i den temporära variabeln på by value-sätt, så kommer inte orginalvärdena att ändras när variablen formateras.

funktion kollaVariabler () {
&nbsp; &nbsp; global $postVärden;

&nbsp; &nbsp; while ( $värde = each ( $HTTP_POST_VARS ) ) {
&nbsp; &nbsp; &nbsp; $postVärden[] = htmlspecialchars ( $värde[ 1 ] );
&nbsp; &nbsp; }
}

Ett tips: Istället för att sätta en variabel till global, så att du kan använda samma variabel överallt, låt funktionen returnera en variabel/array istället. Mycket bättre. :)

Medlem sedan jan. 20014 973 inlägg
#3

Tack SPiN!

Dina förklaringar slår det mesta, det är alltid skoj att lära sig nått nytt...

Medlem sedan mars 20007 896 inlägg
#4

Var sin ko! :D

Jag lovar att det är minst lika kul om man lyckas banka lite vett i någon annans huvud också! :D ;)

267 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
135 ms — ändringar (db)