Gå til innhold

Dynamisk html skjema til php


Anbefalte innlegg

Hei, jeg trenger litt hjelp med hvordan jeg skal løse ett lite problem som har plaget meg en stund nå.

 

Jeg har ett dynamisk html skjema med 5 inputs på hver linje, brukeren kan legge til så mange linjer han ønsker.

 

De blir laget som:

vare0,antall0,type0,osv..

vare1,antall1,type1,osv..

vare2,antall2,type2,osv..

 

Disse blir sent til skjema.php (post)

 

Problemet er hvordan kan dette løses i skjema.php?

 

Nå har jeg en utrolig tungvindt løsning

$varenavn1 = $_REQUEST['varenavn1'] ;
$type1 = $_REQUEST['type1'] ;
$antall1 = $_REQUEST['antall1'] ;
$varenavn2 = $_REQUEST['varenavn2'] ;
$type2 = $_REQUEST['type2'] ;
$antall2 = $_REQUEST['antall2'] ;
osv....

Det må da være en mulighet til å gjøre dette dynamisk, jeg har sett meg blind på foreach og arrays nå

 

Jeg hadde satt stor pris på en pekepinn i rett retning

Håvard

Lenke til kommentar
Videoannonse
Annonse

Prøv deg frem med følgende kode, og modifiser den slik at den passer:

<?php
error_reporting(E_ALL ^ E_NOTICE);


if ($_POST['SkjemaOK'])
{
	$varenavn = array();
	$type = array();
	$antall = array();

	for ($x = 0; $x < 100; $x++)
	{
		if ($_POST['varenavn'.$x] == "" || $_POST['type'.$x] == "" || $_POST['antall'.$x] == "")
			continue;

		array_push($varenavn, $_POST['varenavn'.$x]);
		array_push($type, $_POST['type'.$x]);
		array_push($antall, $_POST['antall'.$x]);
	}

	// Bare for å vise at den faktisk har mottatt og registert data fra skjemaet ditt:
	echo "Antall lagt inn: ".count($varenavn)."<br />";
	for ($x = 0; $x < count($varenavn); $x++)
		echo "#".$x.": Varenavn: ".$varenavn[$x].", type: ".$type[$x].", antall: ".$antall[$x].". <br />";
}
?>
<html>
<body>
	<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
		<?php
			for ($x = 0; $x < 10; $x++)
			{
				echo "<fieldset>";
				echo "<legend>Felt #".$x."</legend>";
				echo "Varenavn: <input type='text' name='varenavn".$x."' />";
				echo "Type: <input type='text' name='type".$x."' />";
				echo "Antall: <input type='text' name='antall".$x."' />";
				echo "</fieldset>";
			}
		?>
		<input type="submit" name="SkjemaOK" value="OK" />
	</form>
</body>
</html>

(NB: Husk at du må renske/validere inndata før du skriver de til database eller fil.)

  • Liker 1
Lenke til kommentar

Bare for å få fram at det fungerer med array også gjorde jeg litt endringer i koden:

<?php
error_reporting(E_ALL ^ E_NOTICE);

   define('MAX_ANTALL_VARER',10);

if ($_POST['SkjemaOK'])
{
$varenavn = $_POST['varenavn'];
       $antall   = $_POST['antall'];
       $type     = $_POST['type'];

       for($x = 0; $x < MAX_ANTALL_VARER; $x++)
       {
           if ($varenavn[$x] == "" || $antall[$x] == "" || $type[$x] == "")
           {
               unset($varenavn[$x]);
               unset($antall[$x]);
               unset($type[$x]);
           }
           else
           {
               $str .= "Varenavn: ".$varenavn[$x].", type: ".$type[$x].", antall: ".$antall[$x].". <br />";
           }
       }

	// Bare for å vise at den faktisk har mottatt og registert data fra skjemaet ditt:
	echo "Antall lagt inn: ".count($varenavn)."<br />";
       echo $str;
}
?>
<html>
<body>
	<form action="" method="post">
		<?php
			for ($x = 0; $x < MAX_ANTALL_VARER; $x++)
			{
				echo "<fieldset>";
				echo "<legend>Felt #".$x."</legend>";
				echo "Varenavn: <input type='text' name='varenavn[]' />";
				echo "Type: <input type='text' name='type[]' />";
				echo "Antall: <input type='text' name='antall[]' />";
				echo "</fieldset>";
			}
		?>
		<input type="submit" name="SkjemaOK" value="OK" />
	</form>
</body>
</html>

 

Det skal også nevnes at man ALDRI bør bruke PHP_SELF uten htmlspecialchars.

 

Hvis du går til:

http://domain.com/script.php fungerer det flott, men hvis du går til:

http://domain.com/script.php/"><script>alert('pwned');</script>

 

vil du få en popup som sier "pwned". Og det er nettopp det du har blitt, "pwned". Siden vil være åpen for XSS.

Lenke til kommentar

[...]

Det skal også nevnes at man ALDRI bør bruke PHP_SELF uten htmlspecialchars.

 

Hvis du går til:

http://domain.com/script.php fungerer det flott, men hvis du går til:

http://domain.com/script.php/"><script>alert('pwned');</script>

 

vil du få en popup som sier "pwned". Og det er nettopp det du har blitt, "pwned". Siden vil være åpen for XSS.

Kan du utdype litt mer om hva som egentlig skjer når man bruker PHP_SELF?

 

Jeg prøvde følgende

/"><script>alert('pwned');</script>

i slutten på adressen til flere nettsider jeg har satt opp, og som har PHP_SELF i i et skjema, men jeg fikk ikke noen Javascript-alert-boks..

 

edit: Fant ut av det, serverene er antagelig konfigurert til å være beskyttet mot slik idioti. Men, da har jeg ihvertfall lært noe idag også.

Endret av greygenic
Lenke til kommentar

Det som skjer er at dobbeltfnutten " gjør at avsluttes, så kjøres koden etterpå. Dette fordi PHP_SELF kan endres av bruker ved å endre URLen. Men ja, mulig noen servere er beskyttet mot det. Jeg har selv testet dette i WAMP og der var det ikke noen beskyttelse. Man bør uansett ikke satse på at serveren har beskyttelse. Og det bør vel være safe ved å skrive htmlspecialchars($_SERVER['PHP_SELF']) :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...