Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP POST:lla arvojen välitys

Sivun loppuun

Hoover [13.12.2006 17:04:25]

#

Mitenkä voisi POST:lla hoitaa tälläisen tilanteen arvojen välityksen. Kuvitellaan vaikka, että nämä arvot on $login ja $pass.

Tilanne:
login.php ->
menu.php (täällä on monta eri reittiä mihin voidaan lähtä) ->
(tähän asti tietojen välitys onnistuu, eli tiedot on menu.php:ssä otettu vastaan)

vaihtoehto1.php tai vaihtoehto2.php ->
loppu.php

Eli tuo menu.php:n jälkeen oleva risteys tuottaa ongelmia. Mitenkä arvot pystyisi lähettämään jompaan kumpaan tiedostoon? POST:llahan ei pysty formin tietoihin määrittämään kuin yhden tiedoston johon formin arvot viedään. Sama ongelma tulee vastaan jos yhdestä php tiedostosta haluttaisiin siirtyä joko eteen- tai taaksepäin.

Pelkistetty koodi:

// login.php
<?
<form action="menu.php" method="post">
$login input boxista
$pass input boxista
<input type='submit'>
</form>
?>

// menu.php
<?
<form action="kumpaa_painettiin.php" method="post">
Otetaan vastaan login ja pass piilokenttiin...
Hirveesti kenttiä täällä...
Lähetetään kenttien tiedot eteenpäin postilla.
<input type='submit' name='valinta' value='vaihtoehto1'>
<input type='submit' name='valinta' value='vaihtoehto2'>
</form>
?>

// kumpaa_painettiin.php
<?
Jos vaihtoehto1 niin pitäs postia tiedot vaihtoehto1.php
MuttaJos vaihtoehto2 niin pitäs postia tiedot vaihtoehto2.php

Tänne kusahtaa postit kun ei täällä ole mitään nappia millä postia. Tämä vaan tutkii kumpaa nappia painettiin.
?>

// vaihtoehto1.php
<?
<form action="loppu.php" method="post">
Otetaan vastaan postit
Kaikkee tietoo...
<input type='submit'>
</form>
?>

(Mod. edit. kooditagit!)

Metabolix [13.12.2006 17:20:24]

#

Mikset voisi laittaa sellaista kuin vaihtoehto.php, joka sisältää kummatkin vaihtoehdot? Säästyisit hypyttämästä käyttäjää pitkin ja poikin ja saisit postisi kulkemaan suoraan.

Hoover [13.12.2006 17:39:57]

#

Entäpä tämä taaksepäin liikkuminen sitten, jos jokaisessa tiedostossa on next ja back nappulat. Miten ihmeessä arvot saa takaisinpäin kulkemaan?

Jotenkin tunnostaa vaikealta tuo kun on vain yksi tiedosto jonne aina lähetetään formin arvot. Pitäisi saada vaikka tuolta loppu.php:stä tuotua login ja pass takaisin jompaan kumpaan vaihtoehtoon mistä sinne tultiin.

Sessioilla tuo varmaan olisi kovinkin helppo kun ei tarvitse postia tietoja, mutta tässä tapauksessa sessioita ei voi käyttää. :I

Kentti [13.12.2006 18:10:32]

#

Takaisinpäin? Voisitko tarkentaa, mitä tarkoitat tuolla takaisinpäin?

Hoover [13.12.2006 18:15:09]

#

Jos vaikka ensin mennään login -> menu -> vaihtoehto1, niin pitäisi samaa reittiä päästä takaisin menuun. Jokaisella sivulla on eteen- ja taakse -napit. Eteen-napilla se aina postilla viskoo arvoja seuraavalle formille. Miten sen saisi viskomaan Taakse-napilla edelliselle formille?

Kentti [13.12.2006 18:20:37]

#

Ensilukemalla tuntuu, että menisi näinkin yksinkertaisella, kuin laittaa siihen taakse-nappiin samalla periaatteella kuin eteen-nappiin niiden lomakkeiden välitys, eli jotain

if (isset($taakse_nappi)) // Ja tähän tietojen välitys

Hoover [13.12.2006 18:44:17]

#

Hmm... voisi muuten tehdä piiloformin jonka kentissä on salasanat/passut ja pistää Taakse-napin submit-napiksi siihen. Sitten olisi aina yhdellä sivulla kaksi formia: toisen arvot seuraavalle sivulle meneviksi ja toisen piiloformin arvot edelliselle sivulle. :o

Oikeastaan muuta ei tarvitsekaan siirtää taaksepäin siirryttäessä kuin tunnukset. Niillä voi sitten hakea/kirjoittaa tietokantaan.

Kentti [13.12.2006 19:16:30]

#

Vähän aiheesta ulkona, mutta tärkeää kuitenkin:
Mihin tahansa HTML-elementteihin ei saa ainakaan turvallisuutta vaativissa sovelluksissa laittaa mitään tärkeää tai vähemmän tarkeää tietoa attribuutteina. Varsinkin nuo hidden fieldit ovat javascript-injektiota käyttävälle herkkupaloja: ajatellaan, ettei niitä nähdä, mutta nähdään kumminkin. Ajatellaanpa tilannetta:

Sinulla on nettisivut, jossa on itsetoteutettu foorumi. Tarjoat siellä käyttäjälle mahdollisuuden poistaa ja muokata alle tietyn ikäisen viestin (kuten täällä putkassa). Jos olet käyttänyt hidden fieldiä, mikä olisi varmasti varsin mukava ja helppo tässä tapauksessa, se olisi varmaan näin:

<input type="hidden" name="piilokentta" value="viestin_id"/>

Vaikka tuo poisto/muokkaussysteemi olisi tarkistettu, niin ettei aivan helposti kuka vain pääse muokkaamaan toisen viestiä, voisi tuon arvon viestin_id muuttaa yksinkertaisella javascript-injektiolla:

javascript:void(document.forms[0].piilokentta.value="toisen_viestin_id");

Tuo kun osoiteriville.
Ja tuossa voisi olla minkä tahansa viestin tunnus, ensimmäisestä viimeiseen. Siinä olisi mukavaa varmasti jollain tuhota kaikki viestiti, jos laittaisi esim. for() silmukkaan tuon ja viesti-id:n 0:sta yllöspäin, ellei sitten viestin id:itä olisi "hashattu", mikä olisi kyllä varsin epäkäytännöllistä.

Hoover [13.12.2006 19:25:11]

#

Joo, minäkin varmaan olisin jonnekin sessioon tunkenut nuo tunnukset kulkemaan, mutta kun tässä projektissa ei saa ollenkaan evästeitä käyttää niin ei muutakaan keinoa tullut mieleen. Hidden-kentissä tietty ne arvot on aina salattuna, että ei kuitenkaan selväkielisenä näy missään vaiheessa.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta