jeIIy Skrevet 16. september 2014 Del Skrevet 16. september 2014 Si at vi har to forms på en side: <form action="index.php" method="POST"> <input type="text" name="id" value="ID" size="1"> <input type="submit" value="Lagre"> </form> <form action="index.php" method="POST"> <input type="text" name="id" value="ID" size="1"> <input type="text" name="fornavn" value="Nytt Fornavn"> <input type="submit" value="Lagre"> </form> så har vi php kode for å gjøre noe med forms. <?php if(!empty($_POST[id]) && !empty($_POST[fornavn])) { } ?> <?php if(!empty($_POST[id])) { } ?> Hva er det som gjør at php vet hvilket forms den skal gjøre actions på? Gjetter den seg fram siden disse forms er ulike? hva om begge formsa bare innehold ID? Lenke til kommentar
Feh Skrevet 16. september 2014 Del Skrevet 16. september 2014 Når du trykker submit i en av disse formene blir bare de variablene som er i formen submitted. Dvs. år du submitter den øverste formen vil bare den siste if-setningen kjøres, mens den første vil feile fordi fornavn ikke er satt. Det som blir problemet her er at begge if-setningene kjøres dersom du submitter den nederste formen. For å forhindre dette kan du gjøre noe ala dette (quick fix): <form action="index.php?something" method="POST"> <input type="text" name="id" value="ID" size="1"> <input type="submit" value="Lagre"> </form> <form action="index.php?something_else" method="POST"> <input type="text" name="id" value="ID" size="1"> <input type="text" name="fornavn" value="Nytt Fornavn"> <input type="submit" value="Lagre"> </form> Og behandlet dette på følgende måte i PHP koden: <?php if(isset($_GET['something'])) { } ?> <?php if(isset($_GET['something_else'])) { } ?> For deretter å se om variablene er satt inne i disse if-setningen. Lenke til kommentar
ahw_ Skrevet 16. september 2014 Del Skrevet 16. september 2014 (endret) Det Feh foreslo er en fullgod løsning. En annen metode som også kan være fullgod er å bruke en usynlig input: <form action="index.php" method="POST"> <input type="hidden" name="form_id" value="something"> <input type="text" name="id" value="ID" size="1"> <input type="submit" value="Lagre"> </form> <form action="index.php" method="POST"> <input type="hidden" name="form_id" value="something_else"> <input type="text" name="id" value="ID" size="1"> <input type="text" name="fornavn" value="Nytt Fornavn"> <input type="submit" value="Lagre"> </form> Med PHP gjør du det samme som Feh sa, men f.eks. if($_POST['form_id'] == 'something') { i stedet for if(isset($_GET['something'])) { Endret 16. september 2014 av ahw_ 1 Lenke til kommentar
::TeknoFoben:: Skrevet 16. september 2014 Del Skrevet 16. september 2014 Det Feh foreslo er en fullgod løsning. En annen metode som også kan være fullgod er å bruke en usynlig input: <form action="index.php" method="POST"> <input type="hidden" name="form_id" value="something"> <input type="text" name="id" value="ID" size="1"> <input type="submit" value="Lagre"> </form> <form action="index.php" method="POST"> <input type="hidden" name="form_id" value="something_else"> <input type="text" name="id" value="ID" size="1"> <input type="text" name="fornavn" value="Nytt Fornavn"> <input type="submit" value="Lagre"> </form> Med PHP gjør du det samme som Feh sa, men f.eks. if($_FORM['form_id'] == 'something') { i stedet for if(isset($_GET['something'])) { Skal det ikke være $_POST og ikke $_FORM? Dette ser uansett ut til å være den beste løsningen. Husk uansett og sjekk at isset($_POST['fornavn'], $_POST['id']) Jeg ser at du bruker $_POST[id] istedenfor $_POST['id'] -- dette er ikke den godkjente metoden og er en du bør unngå - den vil gi error meldinger i konsolen. Lenke til kommentar
ahw_ Skrevet 16. september 2014 Del Skrevet 16. september 2014 Skal det ikke være $_POST og ikke $_FORM? Oj, beklager. Du har helt rett! Lenke til kommentar
jeIIy Skrevet 17. september 2014 Forfatter Del Skrevet 17. september 2014 Når du trykker submit i en av disse formene blir bare de variablene som er i formen submitted. Dvs. år du submitter den øverste formen vil bare den siste if-setningen kjøres, mens den første vil feile fordi fornavn ikke er satt. Det som blir problemet her er at begge if-setningene kjøres dersom du submitter den nederste formen. For å forhindre dette kan du gjøre noe ala dette (quick fix): <form action="index.php?something" method="POST"> <input type="text" name="id" value="ID" size="1"> <input type="submit" value="Lagre"> </form> <form action="index.php?something_else" method="POST"> <input type="text" name="id" value="ID" size="1"> <input type="text" name="fornavn" value="Nytt Fornavn"> <input type="submit" value="Lagre"> </form> Og behandlet dette på følgende måte i PHP koden: <?php if(isset($_GET['something'])) { } ?> <?php if(isset($_GET['something_else'])) { } ?> For deretter å se om variablene er satt inne i disse if-setningen. Kan man bruke GET selv om method står som POST? + Hvis jeg skal endre verdier eller sette inn verdier i database, er det da greit å bruke denne eller burde jeg gå for ahw_ sin løsning? Lenke til kommentar
Feh Skrevet 17. september 2014 Del Skrevet 17. september 2014 (endret) Man kan bruke GET og POST omhverandre på denne måten. GET henter kun det som står etter ? i URLen, uavhengig av hva som postes. Du kan til og med skrive inn noe for hånd i URLen og få PHP til å fange det opp.Det var dog en liten glipp fra min side som ikke la merke til det, for det er generelt ikke anbefalt å bruke disse omhverandre, men som nevnt fullt mulig. Alternativt kan man også bruke REQUEST for å hente forskjellige variabler og slippe å tenke på metoden som brukes, men denne tar imot både COOKIE, POST og GET og bør ikke brukes med mindre man vet hva man driver med, uten at jeg gidder å utdype noe mer enn det.Eventuelt som ahw_ sa kan man bruke hidden inputs <input type="hidden" name="something" value="" /> og <?php if(isset($_POST['something'])) { if(!empty($_POST[id]) && !empty($_POST[fornavn])) { } } ?> Hvis du skal kjøre update eller insert i etterkant vil det i prinsippet være like utrygt med alle de forskjellige metodene. Du må uansett sanitere/validere inputene og/eller bruke prepared statements som ordner mye av dette for deg. Endret 17. september 2014 av Feh Lenke til kommentar
jeIIy Skrevet 17. september 2014 Forfatter Del Skrevet 17. september 2014 Man kan bruke GET og POST omhverandre på denne måten. GET henter kun det som står etter ? i URLen, uavhengig av hva som postes. Du kan til og med skrive inn noe for hånd i URLen og få PHP til å fange det opp. Det var dog en liten glipp fra min side som ikke la merke til det, for det er generelt ikke anbefalt å bruke disse omhverandre, men som nevnt fullt mulig. Alternativt kan man også bruke REQUEST for å hente forskjellige variabler og slippe å tenke på metoden som brukes, men denne tar imot både COOKIE, POST og GET og bør ikke brukes med mindre man vet hva man driver med, uten at jeg gidder å utdype noe mer enn det. Eventuelt som ahw_ sa kan man bruke hidden inputs <input type="hidden" name="something" value="" /> og <?php if(isset($_POST['something'])) { if(!empty($_POST[id]) && !empty($_POST[fornavn])) { } } ?> Den er god, takk for hjelpen 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å