Discussion:
PHP:lle arvot HTML-lomakkeelta
(too old to reply)
Pertsa
2010-04-09 17:32:58 UTC
Permalink
Tällainen alussa taapertavan PHP-opiskelijan probleema käsillä.
Perehtyneille asia lienee aivan selvää. Yritelmä tähän mennessä on
tällainen:

<form action="http://myhost/upload11.htm" method="post">
UserID: <input name="UserID" value="67890" /><br />
Name: <input name="Name" value="Peter" /><br />
<!-- The calculated MD5 is the third value to pass -->
<input type="hidden" name="MD5" value=$aMD5 />
<input type="submit" value="Send">
</form>
<br />

<?php
$Tmp = "67890" . "Peter"; // Combine values.
$aMD5 = md5($Tmp); // Calculate MD5 for the two first values.
?>

Tämä avaa ruudulle lomakkeen jossa on 2 kenttää, UserID ja Name, joihin
on tässä valmiiksi täytettyn alkuarvot. Käyttäjä voi muuttaa kenttien
arvoja. Sen jälkeen PHP-skripti laskee MD-5 summan noille annetuille
arvoille. SEND-buttonilla ko. kaksi tietoa ja MD5 lukema kolmantena
arvona lähetetään eteenpäin.

Yllä olevassa mallissahan $Tmp muuttujaan kerätään virheellisesti
vakiotekstejä. Kun oikeasti pitäisi tietenkin saada ne lomakkeelle
käyttäjän editoimat kenttien sisällöt.

Mitenkä nuo tiedot saadaan HTML:n puolelta PHP-skriptin puolelle? Tässä
kohtaa ei Basic-ohjelmointikokemuksella leikkaa nyt vaan yhtään.

Kaikenlaisia Curl:eja ym. olen plärännyt Helpeistä avuksi eilisen ja
tämän päivän. Jollakin sellaisella ilmeisesti tiedot saisi, mutta
Windows-testiserveriympäristössäni PHP:n Curl ei lähde lainkaan tulille.

Ehdotuksia? Koko yllä oleva skripti voidaan tarvittaessa hylätä, kunhan
tämän toiminnallisuuden saisi PHP.llä jotenkin syntymään.


p.
Mika Iisakkila
2010-04-09 18:18:32 UTC
Permalink
Post by Pertsa
Mitenkä nuo tiedot saadaan HTML:n puolelta PHP-skriptin puolelle?
Tässä kohtaa ei Basic-ohjelmointikokemuksella leikkaa nyt vaan yhtään.
Ei suoraan haluamallasi tavalla oikein mitenkään. Sen sisäistänet, kun
vain muistat, että skriptisi ei tee enää yhtään mitään sen jälkeen kun
sen tulostus ml. tuo lomake on selaimella. Seuraava tilaisuus laskea
jotain PHP:llä on silloin, kun selain postaa ne uudelleen palvelimelle
(eli tuolle upload11-skriptillesi).

Jos siis haluat laskea tuon MD5-summan ennen kuin lopputulos päätyy
tuolle upload11.htm -skriptille, joudut kierrättämään asiat ensin
vielä kerran palvelimen kautta jollekin php-skriptille, jossa sitten
jotain voidaan laskea. Se voi kyllä olla näyttämättä mitään, ja vain
uudelleenohjata lopputulokset lopulliselle käsittelyskriptille jolloin
käyttäjä ei asiaa juuri huomaa.

Toinen vaihtoehto on tehdä homma Javascriptillä, jossa siinä sattuu
olemaan yhteensopiva md5-funktio. Ei tosin sitten enää aina toimi jos
selaimessa ei ole JS päällä tai se ei sitä edes osaa.
--
http://www.hut.fi/u/iisakkil/ --Foo.
Pertsa
2010-04-10 11:32:19 UTC
Permalink
Post by Mika Iisakkila
Jos siis haluat laskea tuon MD5-summan ennen kuin lopputulos päätyy
tuolle upload11.htm -skriptille, joudut kierrättämään asiat ensin
vielä kerran palvelimen kautta jollekin php-skriptille, jossa sitten
jotain voidaan laskea.
Tällaiseen johtopäätökseen itsekin päädyin. Tosin vain n. 80%
varmuudella, epäilytti edelleen. Piti tulla kysäisemään välillä asialla
vahvistusta ja apuja.

Alkoi usko mennä että olenko ymmärtänyt PHP:stä mitään, kun
yksinkertaista juttua ei saanut 2 päivän manuaalien ja esimerkkien
lukemisen jälkeenkään onnistumaan.

Periaatteessa homman saa hoidettua jakamalla se kahdelle PHP-skriptille,
vaikka näin:

<!-- Main.php -->
<form action="docalc.php" method="post">
UserID: <input name="UserID" value="67890" /><br />
Name: <input name="Name" value="Peter" /><br />
<input type="submit" value="Send">
</form>
<br />


<!-- DoCalc.php -->
<?php
$aMD5 = md5($_POST['UserID'] . $_POST['Name']); // Calculate MD5
//for the two first values.
echo "<form action=\"http://myhost/upload11.htm\" method=\"post\" >";
echo "<input name=\"UserID\" type=\"hidden\" value=\"{$_POST['UserID']}"
."\">";
echo "<input name=\"Name\" type=\"hidden\" value=\"{$_POST['Name']}" ."\">";
echo "UserID: {$_POST['UserID']}<br />";
echo "Name: {$_POST['Name']}<br />";
echo "MD5= $aMD5"."<br />";
echo "<input type=\"submit\" name=\"Save\" value=\"Send-2" ."\"><br />";
?>

Tällaisen ratkaisun sain jo ennen alkuperäistäkin kysymystäni rääpittyä
kasaan. Tällä homma tosiaan ainakin periaatteessa toimii.
Ensin Main:ille syötetään arvot ja lähetetään se DoCalc:ille joka laskee
MD5-summan ja lähettää lomakkeen tiedot lopulliseen kohteeseen.
Post by Mika Iisakkila
uudelleenohjata lopputulokset lopulliselle käsittelyskriptille jolloin
käyttäjä ei asiaa juuri huomaa.
Tähän kohtaan en ole keksinyt ratkaisua, että mitenkä tuo 2-vaihe
piilotetaan käyttäjältä. Nythän käyttäjä joutuu painamaan kahdella
lomakkeella Send-nappulaa ennenkuin MD5-laskettu data saadaan lähtemään
eteenpäin.

Miten saisi tuon DoCalc-lomakkeen lähettämään datat PHP:n keinoin
automaattisesti ja näkymättömästi eteenpäin? Olen hatarasti löytänyt
vain ehdotuksia ratkaista asia PHP:ssä Curlilla tai jollakin Socket
menetelmällä.

Win/Apache testiserverini PHP ei toistaiseksi suostu tunnistamaan eikä
löytämään koko Curlia millään. Socket-esimerkkejä lukemalla taas en ole
keksinyt että missä kohtaa siinä lähetetään ko. FormData.

Alkoi tosiaan itsestä tuntua että nyt teen jotakin perustavalla lailla
väärin.

En vain ole hoksannut jotakin ilmiselvää PHP-ratkaisua jolla tällaiset
hoidetaan. Siksi oli pakko vaan tulla kyselemään vinkkejä muilta.
Post by Mika Iisakkila
Toinen vaihtoehto on tehdä homma Javascriptillä, jossa siinä sattuu
*Tähän* simppeliltä kuulostavaan hommaan haluaisin keksiä muun kuin
Javascript-ratkaisun. Mutta jos sellaista ei ylipäätään ole olemassa,
siten että homma hoituu käyttäjältä piilotettuna niin pakko kai alkaa
niitä .JS -päätteen takana olevia proceduureja ja manuaalejakin sitten
lukea ja opetella.


p.
Ari Saastamoinen
2010-04-10 12:50:16 UTC
Permalink
Post by Pertsa
Tähän kohtaan en ole keksinyt ratkaisua, että mitenkä tuo 2-vaihe
piilotetaan käyttäjältä. Nythän käyttäjä joutuu painamaan kahdella
lomakkeella Send-nappulaa ennenkuin MD5-laskettu data saadaan
lähtemään eteenpäin.
Olet siis tekemässä verkkokauppaa. En tunne paypällin systeemiä,
mutta yleensä noissa md5-hasheissa on mukana joku salasanan tyyppinen
salainen osa, joten ET HALUA tehdä tuon md5-summan laskemista
asiakkaan koneella, eli siis esim. javascript on tuohon ehdoton EI.

Miksi yleensäkään ottaen haluat tehdä tuon yhdessä vaiheessa kun
kaikki muutkin webbikaupat tekevät tuon useammassa vaiheessa?

Ensin kliksuttelet, mitä haluat ostaa, ja sitten tulee yhteenvetosivu,
jossa todetaan, että tällaiset olisi tulossa. Onko nämä oikein? Tuon
yhteenvetosivun muodostavassa skriptissä voit sitten lastea tuonne sen
haluamasi md5summankin mukaan, ja jos käyttäjä painaa sitä OK nappia,
niin se sitten postaa tuon yhteenvetosivulla olevan lomakkeen
(jonka mahdollisesti jopa kaikki kentät ovat tyyppiä hidden).

Tai jos tuon välttämättä yksivaiheisena tehdä, niin sitten sun
todellakin kannattaa tehdä tuo webbirequesti siellä PHP-skriptissä,
esim. tuota mainitsemaasi curlia käyttäen, ja onnistuu tuo ihan hyvin
stream_*-funkkareita käyttäenkin, niin ei tartte php:ssa välttämättä
curl-laajennosta.
Post by Pertsa
Win/Apache testiserverini PHP ei toistaiseksi suostu tunnistamaan eikä
löytämään koko Curlia millään. Socket-esimerkkejä lukemalla taas en
ole keksinyt että missä kohtaa siinä lähetetään ko. FormData.
Ensin avaat yhteyden. Sen jälkeen lähetät sinne HTTP-requestin (Luen
HTTP:n speksit) Ensimmäisellä rivillä käytetty metodi eli useimmiten
GET/POST sitten välilyönti ja URLin localpartti ja välilyönnin jälkeen
vielä HTTP:n versio. Nykyään kannattaa laittaa mukaan myös
HTTP/1.1:ssä määritelty Host: headeari (Vaikka muuten tekiskin 1.0:n
mukaisen requestin)

Esim. tuosta requestista.
lomake
<form method=get action="http://joku.jossain/scripti.php">
<input type=hidden value=bar name=foo><input type=submit>
</form>
onnistuisi seuraavalla requestilla

GET /scripti.php?foo=bar HTTP/1.1
Host: joku.jossain
[tässä pitää olla tyhjä rivi]

Jos kyseessä on method=post, niin se olisi sitten jotain tämän
tyyppistä (menee ulkomuistista, joten saattaa olla virhe)

POST /scripti.php HTTP/1.1
Host: joku.jossain
Content-Length: 7
[tässäkin pitää olla tyhjä rivi]
foo=bar

Mutta ei tuota requestia kannata itse kokonaan muodostaa, kun
PHP:ssakin on valmiina useitakin tapoja tehdä HTTP-requesti. Jos
kyseessä on POST-metodi, niin itse tekisin luultavasti PHP-streameilla
(tai sitten tuolla cURL:lla)

GET metodin saattaisin tehdä ihan vain yksinkertaisesti fopen():lla.
--
Arzka oh3mqu+***@hyper.fi - En halua follareita mailina
1. Valitse sopiva paikka, ei ihmisten tai rakennusten lahella, jossa
paukku voi aiheuttaa hairiota. - Iso-Kiinalaisen kayttoohje
Seppo Loisa
2010-04-10 14:17:47 UTC
Permalink
Post by Ari Saastamoinen
Mutta ei tuota requestia kannata itse kokonaan muodostaa, kun
PHP:ssakin on valmiina useitakin tapoja tehdä HTTP-requesti. Jos
kyseessä on POST-metodi, niin itse tekisin luultavasti PHP-streameilla
(tai sitten tuolla cURL:lla)
GET metodin saattaisin tehdä ihan vain yksinkertaisesti fopen():lla.
file() olisi ehkä vähän suoraviivaisempi. Ulkopuolisen URLin avaaminen
pitänee olla sallittu.

POST-metodista löytyy googlella lukemattomia esimerkkikoodeja esim.
hakusanoilla "send post php"

Eikös tällaiset muuten pitäisi hoitaa SSL-salattuna eli
https-requestilla?
Pertsa
2010-04-12 13:39:31 UTC
Permalink
Post by Ari Saastamoinen
Olet siis tekemässä verkkokauppaa.
Kaikkinensa meikäläisellä on tämän PHP-kamppailun paikkeilla useampiakin
erilaisia tavoitteita. Kuten vaikka tällaisia:

a) Yrittää opetella mitä ja miten PHP:llä voi hommaa tehdä ja mitä ei
voi tehdä.
b) Opetella löytämään Manual:eista suunnilleen oikeita kohtia mistä
löytyisi suunnilleen käyttökelpoisimpia vastauksia esille tuleviin
probleemeihin jne.
c) Saada selvilla minkä tyyppisiä ja kokoisia asioita pystyn tällä
saamaan aikaiseksi. Ja missä toisaalta on raja, jonka takana opetteluun
menevä aika vs. mahdollisesti myöhemmin saatava hyöty eivät enää tunnu
kohtaavan toisaan lainkaan.
Post by Ari Saastamoinen
Ensin kliksuttelet, mitä haluat ostaa, ja sitten tulee yhteenvetosivu,
jossa todetaan, että tällaiset olisi tulossa. Onko nämä oikein?
Vähän sellaisempana konkreettisempana välitavoitteena on saada
OpenSourcea olevaan webbikauppasysteemiin liitettyä kotimainen
maksusysteemi.

Kahden tuttavan rättinettikauppafirmoissa tällaiset on käytössä.
Kotimaisia maksusysteemejä ei kukaan ole näihin webbikauppoihin
toteuttanut. Eivätkä nettikoodarifirmat välitä tämän suuntaisiin
tiedusteluihinkaan juuri vastailla, lienee liian pientä bisnestä.

Itsekin olen ollut tuttaville hissuksiin, enkä mitään alustavaakaan ole
kummallekaan lupaillut tai vihjannut. Omin nokin aloin katsoa minne
saakka pääsee. Kauppapalikkaohjelmien nimiäkään en viitsi tässä
yhteydessä mainita. Noloa jos on vielä pakko myöntää olevansa ns. käsi
näissä hommissa, eikä valmista lopultakaan tule.

Kyseinen webbikauppasysteemi on melkoista PHP-risukkoa. Tai itselle
melkein kaikki yli 20 riviä pitkä PHP-skripti on edelleen risukkoa.
Siellä kaupparisukossa siis on jo olemassa sisällä jonkinlainen Paypal
systeemi. Mutta suomalaisten maksajien pitäisi silloin osata Paypalin
kanssa asioida maksamisensa tyystin englanniksi, joka ei asiakaskunnan
ikäluokka huomioiden oikein mallaa.

Tuon Paypal-palikan toimintaa olen yrittänyt ymmärtää. Mutta maksamisen
PHP:hän on erilaisten kuorrutteiden ja kikkailujen sisällä. Skripti
pomppii toivottoman tuntuisesti erilaisten Templateiden CSS:ien, ja
javascriptien ja PHP:iden sisällä.

En oikein millään päässyt juonesta kiinni. Oli pakko tehdä tuollainen
oma minimalistinen erillinen PHP-maksupalikka, jolla on helpompaa
testata. Ei tarvitse aina ensin ostella webbikaupasta muutamaa tuotetta,
sitten maksuvalikoiden kautta edetä ja antaa e-maileja ja
puhelinnumeroita ym. ennenkuin pääsee taas kertaalleen ajamaan läpi
varsinaista maksupalikkaa.
Post by Ari Saastamoinen
GET metodin saattaisin tehdä ihan vain yksinkertaisesti fopen():lla.
Header-menetelmän sain lopulta toimimaan. Ja juuri nyt, tätä toimintoa
laajemmalle en ehdi tai viitsi yrittää testailla ja opiskella.

Thanksit vinkeistä, taistelu jatkuu, ei ole likikään vielä valmis.
Kaikenlaisten maksusta tulevien palautteiden ym. käsittelemiset edelleen
aivan auki.


p.
Mika Iisakkila
2010-04-10 14:28:05 UTC
Permalink
Post by Pertsa
Post by Mika Iisakkila
uudelleenohjata lopputulokset lopulliselle käsittelyskriptille jolloin
käyttäjä ei asiaa juuri huomaa.
Tähän kohtaan en ole keksinyt ratkaisua, että mitenkä tuo 2-vaihe
piilotetaan käyttäjältä. Nythän käyttäjä joutuu painamaan kahdella
lomakkeella Send-nappulaa ennenkuin MD5-laskettu data saadaan
lähtemään eteenpäin.
Miten saisi tuon DoCalc-lomakkeen lähettämään datat PHP:n keinoin
automaattisesti ja näkymättömästi eteenpäin? Olen hatarasti löytänyt
vain ehdotuksia ratkaista asia PHP:ssä Curlilla tai jollakin Socket
menetelmällä.
Sen voisi tosiaan tehdä niin, että tässä toisen vaiheen skriptissä
(joka siis laskee kentät valmiiksi) tehdään taustalla uusi http-pyyntö
lopulliselle skriptille. Se onnistuu ihan fopen("http://....") ilman
sen kummempaa äheltämistä jos kyseisessä php:ssä on stream wrapperit
mukana, ja aika outo asennus on jos ei ole. Tässä siis parametrit
URL:iin mukaan ja vastaanottava skripti saa ne GET-metodina.

Itse tarkoitin sellaista ratkaisua, jossa tämä välivaiheen skripti
ei varsinaisesti tulosta mitään, vaan pelkästään http-headerin
"Location", joka ohjaa selaimen uudelle sivulle. Eli jotain

<?php
/* laskenta tähän */
header("Location: http://loppu/homma.php?user=foo&md5=bar");
?>

...eikä muuta. Jos haluaa käyttää tuota header()-funktiota, kyseinen
skripti ei saa ennen sitä tulostaa mitään (ei edes tyhjiä rivejä).

Mutta jos se MD5-summa on tosiaan esittämässä jotain tarkistusta
jottei lopullista operaatiota tehdä jotenkin lomakkeiden ohi, niin
näissäkin saa kyllä tovin pohtia mahdollisia turvallisuusongelmia.
Näkyyhän se tuossa location-headerissakin suoraan jos joku sitä haluaa
kurkkia.
--
http://www.hut.fi/u/iisakkil/ --Foo.
Mika Iisakkila
2010-04-10 14:39:09 UTC
Permalink
Jaa niin -- sotkeakseni asiaa lisää ehdotan tutustumaan ennemmin
php-sessioihin, jos on tekemässä jotain nettikauppatyyppistä hommaa.
Muutoin kaikkien ostoskorien sun muiden parametrien kuskaamisesta
edestakaisin get- ja post-metodeilla tulee pian hirveä sotku.

Sessioon tungetut muuttujat siis säilytetään palvelimen päässä, eivätkä
koskaan edes tule käyttäjän selaimeen joten tarkitussummat sun muut
ovat turvassa siellä. Ei ole ollenkaan niin hankala homma kun miltä se
aluksi näyttää, pienen alkuasettelun jälkeen $_SESSION[] -taulukkoon
tungetut muuttujat vain yksinkertaisesti ovat siellä sivulta toiselle
siirtyilystä huolimatta.
--
http://www.hut.fi/u/iisakkil/ --Foo.
Ari Saastamoinen
2010-04-11 00:20:17 UTC
Permalink
Post by Mika Iisakkila
aluksi näyttää, pienen alkuasettelun jälkeen $_SESSION[] -taulukkoon
tungetut muuttujat vain yksinkertaisesti ovat siellä sivulta toiselle
siirtyilystä huolimatta.
Tässä vaiheessa kannattaa mainita, että ainakin kerran olen ollut
debuggaamassa virhettä joka loppujen lopuksi johtui siitä, että PHP:n
sessiossa oli törmäys ja sama sessionid oli kahdella käyttäjällä.
Sitä en tiedä, että onko tuota sessiokoodia sittemmin parannettu,
mutta tuokin on ainakin joskus ollut mahdollista.
--
Arzka oh3mqu+***@hyper.fi - En halua follareita mailina
1. Valitse sopiva paikka, ei ihmisten tai rakennusten lahella, jossa
paukku voi aiheuttaa hairiota. - Iso-Kiinalaisen kayttoohje
Mika Iisakkila
2010-04-11 12:05:54 UTC
Permalink
Post by Ari Saastamoinen
Tässä vaiheessa kannattaa mainita, että ainakin kerran olen ollut
debuggaamassa virhettä joka loppujen lopuksi johtui siitä, että PHP:n
sessiossa oli törmäys ja sama sessionid oli kahdella käyttäjällä.
Sitä en tiedä, että onko tuota sessiokoodia sittemmin parannettu,
mutta tuokin on ainakin joskus ollut mahdollista.
Eiköhän se ole ollut bugi, joka on todnäk korjattu kiireen vilkkaa.
Siihen ei kyllä kannata lähteä, että kekseistä kieltäytyville
selaimille sallii sessio-id:n kuskaamisen URL:in mukana, mikä ainakin
joskus oli fallback-default. Ne on sitten Googlessa ja vaikka missä...

Mutta en minä näe mitään älyä ryhtyä kuskaamaan ostoskorin kaltaista
muuttujamäärää (jos siihen nyt ylipäätään on tulossa jotain
monimutkaisempaa kuin yksi tuote) mitenkään muuten kuin sessioissa tai
väliaikaisissa tietokantatauluissa. Jälkimmäisessäkin on kovasti omia
ongelmiaan.
--
http://www.hut.fi/u/iisakkil/ --Foo.
Pertsa
2010-04-12 13:57:35 UTC
Permalink
Post by Mika Iisakkila
Jaa niin -- sotkeakseni asiaa lisää ehdotan tutustumaan ennemmin
php-sessioihin, jos on tekemässä jotain nettikauppatyyppistä hommaa.
Onneksi ei sellainen hulluus ja kunnianhimo ole iskenyt päälle että ihan
kokonaista omaa webbikauppasysteemiö alkaisi nollista vääntää.

Noita erilaisia OpenSource webbikauppoja on onneksi eri tasoisina
riittävä määrä maailmalla olemassa.
Post by Mika Iisakkila
Sessioon tungetut muuttujat siis säilytetään palvelimen päässä, eivätkä
Täytyypä hakea sanahaulla onko Session tuttu ja käytetty väline tuolla
kauppasoftassa. Koetan elää sen tarjoaman rungon mukaan, enkä ala itse
alkaa kehittää ohelle mitään uusia menetelmiä. Saas nähä kuinka lopulta
käy tässä.

p.
Ari Saastamoinen
2010-04-11 00:16:40 UTC
Permalink
Post by Mika Iisakkila
Itse tarkoitin sellaista ratkaisua, jossa tämä välivaiheen skripti
ei varsinaisesti tulosta mitään, vaan pelkästään http-headerin
"Location", joka ohjaa selaimen uudelle sivulle. Eli jotain
Noi mäkin tuota olisin ehdottanut, mutta esimerkkilomakkeessa oli
method=post, joka ei noin yksinkertaisesti onnistu.
--
Arzka oh3mqu+***@hyper.fi - En halua follareita mailina
1. Valitse sopiva paikka, ei ihmisten tai rakennusten lahella, jossa
paukku voi aiheuttaa hairiota. - Iso-Kiinalaisen kayttoohje
Pertsa
2010-04-12 13:52:29 UTC
Permalink
Post by Mika Iisakkila
"Location", joka ohjaa selaimen uudelle sivulle. Eli jotain
header("Location: http://loppu/homma.php?user=foo&md5=bar");
Tuolla Headerilla tämä kysymys nyt näyttäisi alkavan ratkeamaan, thanks.

Kiinteällä parametrillä "user=foo&md5=bar" sain heti toimimaan. Mutta
sitten astui monen tunnin tenkkapoo, ja yön yli nukkuminenkin vastaan.

Kokeilin sitkesti työntää tälleen:
header("Location: http://loppu/homma.php?$_POST");
ja ihmettelin kun ei mitään lähde eteenpäin.

Debuggaamalla katsoen $_POST taulukossa näyttäisi olevan sisällä juuri
oikeanlainen merkkijono, oikeilla erotinmerkeillä. Mutta eihän sitä
taulukkoa noin voikaan parametsinä antaa, vaan pitää keräillä taulukon
sisältä arvot ensin Stringiin.
Hämäyksen aiheutti se että taulukko _näyttää_ debuggerissa olevan
Stringimuotoinen pötkö, ja että sen siksi hyvinkin voisi postata
sellaisenaan eteenpäin. Ei toimi, mutta kantapään kautta toki kaiken
viime kädessä oppii.

On tämä PHP alkajalle samperin hankala väline. Kaikkea PHP:n parserit
sallivat, pilkkuja ja puolipisteitä ja kenoviivoja ja kulmasulkuja ym.
voi olla siellä ja täällä. Ja mitä vaan voi tarjota parametriksi eri
paikkoihin.

Eikä mistään Compile-tyyppisen kääntämisen mallisesti varoiteta. Mutta
ei vaan toimi, ja käsipelin haeskelemalla ja koleilemalla on keksittävä
että mikäs tällä kertaa ahistaa.

p.
Ari Saastamoinen
2010-04-12 18:27:34 UTC
Permalink
Post by Pertsa
taulukkoa noin voikaan parametsinä antaa, vaan pitää keräillä taulukon
sisältä arvot ensin Stringiin.
Ja kun sitä stringiäsi rakennat, niin kannattaa huomata, että
HTTP-protokollan varaamat merkit pitää koodata ja nuo arvot kannattaa
ajaa urlencode() -function läpi
Post by Pertsa
On tämä PHP alkajalle samperin hankala väline. Kaikkea PHP:n parserit
sallivat, pilkkuja ja puolipisteitä ja kenoviivoja ja kulmasulkuja
ym. voi olla siellä ja täällä. Ja mitä vaan voi tarjota parametriksi
eri paikkoihin.
Moni aloittelija pitää tuota helpottavana asiana, ja kokeneemmat
ohjelmoijat sitten haluavat tiukemmin tyypitetyn kielen? (Itse tosin
arvostan löysän tyypityksen joustavuutta enemmän kuin tiukan
tyypityksen tuomaa varmuutta - enhän mä tuota tarvitse, kun eihän
MINUN koodissani ole bugeja ;)
Post by Pertsa
Eikä mistään Compile-tyyppisen kääntämisen mallisesti varoiteta. Mutta
ei vaan toimi, ja käsipelin haeskelemalla ja koleilemalla on
keksittävä että mikäs tällä kertaa ahistaa.
Nykyään taitaa olla aika monessa distrossa PHP:n oletusasetukset niin,
että se ei kettuile asioista (Kun on liian monta huonoa PHP-koodaria,
joiden ohjelmat antais kiljoona warning:ia, niin ovat ajatelleet, että
nuo kiljoona koodaria on tyytyväisempiä kun tulkki ei enää valita
niitten koodista) Sun kannattaa PHP:stasi laittaa kaikki varoitukset
päälle, niin huomaat esim. alustamattomien muuttujien käytön yms.
--
Arzka oh3mqu+***@hyper.fi - En halua follareita mailina
1. Valitse sopiva paikka, ei ihmisten tai rakennusten lahella, jossa
paukku voi aiheuttaa hairiota. - Iso-Kiinalaisen kayttoohje
Ari Saastamoinen
2010-04-10 00:49:35 UTC
Permalink
Post by Pertsa
Tämä avaa ruudulle lomakkeen jossa on 2 kenttää, UserID ja Name,
joihin on tässä valmiiksi täytettyn alkuarvot. Käyttäjä voi muuttaa
kenttien arvoja. Sen jälkeen PHP-skripti laskee MD-5 summan noille
annetuille arvoille. SEND-buttonilla ko. kaksi tietoa ja MD5 lukema
kolmantena arvona lähetetään eteenpäin.
En ole ihan varma ymmärsinkö oikein, mutta ilmeisesti haluaisit, että
selain lähettäisi palvelimelle lomakkeen lähetyksen yhteydessä
valmiiksi lasketun md5-summan? Tuo ei onnistu pelkällä HTML:llä ja
PHP:lla lainkaan vaan pitää tehdä selaimessa ajettava ohjelma
esimerkiksi javascriptillä. (PHP;tahan ei ajeta siinä selaimessa)

Mutta en kyllä ymmärrä, miksi noin haluat tehdä? Mikset lomakkeella
lähetä vain niitä kahta tekstikenttää, ja sitten lähetyksen jälkeen
lasket sen haluamasi md5-summan siellä PHP.ohjelmassasi? Tuolle sinun
toimintatavallesi en keksi mitään muuta käyttöä kuin se, että haluat
varmistaa, että requesti ei ole hajonnut matkalla. Ei tuon requestin
hajoamisen pitäisi olla ongelma mikäli huolehdit siitä, että kaikki
eri merkistökooduakset käsitellään oikein. (Ja vaikak et
huolehtisikaan, niin tuo esittämäsi tapa ei tilannetta korjaa muuten
kuin mahdollistaa vikatilanteeen huomaamisen)
Post by Pertsa
Mitenkä nuo tiedot saadaan HTML:n puolelta PHP-skriptin puolelle?
Tässä kohtaa ei Basic-ohjelmointikokemuksella leikkaa nyt vaan yhtään.
Siis jos sulla on lomake
<form><input type='text' name='foo'><input type='submit'></form>

niin tuon tekstikentän sisällön saat siinä vastaanottavassa
PHP-ohjelmassa muuttujasta $_REQUEST['foo']
--
Arzka oh3mqu+***@hyper.fi - En halua follareita mailina
1. Valitse sopiva paikka, ei ihmisten tai rakennusten lahella, jossa
paukku voi aiheuttaa hairiota. - Iso-Kiinalaisen kayttoohje
Pertsa
2010-04-10 11:45:05 UTC
Permalink
Post by Ari Saastamoinen
En ole ihan varma ymmärsinkö oikein, mutta ilmeisesti haluaisit, että
selain lähettäisi palvelimelle lomakkeen lähetyksen yhteydessä
valmiiksi lasketun md5-summan?
SiisWin/Apache testiserverilläni pyörii toiminto olkoon nimeltään vaikka
"Testikauppa". Testikauppani on yhteydessä maksukorttifirmaan, olkoon
tässä vaikka nimeltään "PayPal".

Testailuja varten tarvitsen toiminnon jolla saan helposti selaimella
testattua MD5-laskettujen datablokkien lähettämistä maksukorttifirmalle.
Post by Ari Saastamoinen
Mutta en kyllä ymmärrä, miksi noin haluat tehdä? Mikset lomakkeella
lähetä vain niitä kahta tekstikenttää, ja sitten lähetyksen jälkeen
lasket sen haluamasi md5-summan siellä PHP.ohjelmassasi?
Minun on tosiaan lähetettävä se MD5-summattu kenttä "Testikaupastani"
tuonne "PayPal":ille, muuten ei homma toimi, eikä sitä vastaanoteta.
Testailu pitäisi pystyä tekemään selaimella. Jos testimaksaminen
onnistuu, niin PayPal:ilta kontrolli palaa tiettyyn www-osoitteeseen ja
jos epäonnistuu, niin jonnekin toisaalle. Epäonnisissa tapauksissa
virheilmoituksia näytetään selaimella jne.
Post by Ari Saastamoinen
niin tuon tekstikentän sisällön saat siinä vastaanottavassa
PHP-ohjelmassa muuttujasta $_REQUEST['foo']
Katso pähkäilyäni tuolla toisella viestissä. Että mitenkä ko.
$_REQUEST:in sisältö saataisiin lähtemään automaattisesti PHP:llä
eteenpäin.

Täällä ei asian suhteen leikkaa. PHP on muutenkin vasta suuresti hakusessa.
Itsellä on epäilynä mielessä että etenen hommassa kenties väärään
suuntaan, ja tietämättömyyttäni teen helppojakin asioita liian
komplisoidusti.

p.
Loading...