Howard_ Skrevet 2. september 2010 Del Skrevet 2. september 2010 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
greygenic Skrevet 2. september 2010 Del Skrevet 2. september 2010 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.) 1 Lenke til kommentar
Howard_ Skrevet 2. september 2010 Forfatter Del Skrevet 2. september 2010 Tusen takk for at du tok deg tid til dette, skal se litt nærmere på koden. Lenke til kommentar
Warz Skrevet 2. september 2010 Del Skrevet 2. september 2010 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
greygenic Skrevet 2. september 2010 Del Skrevet 2. september 2010 (endret) [...] 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 2. september 2010 av greygenic Lenke til kommentar
Warz Skrevet 2. september 2010 Del Skrevet 2. september 2010 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå