Taas pari pientä kysymystä PHP:hen liittyen, jotka tavallaan sivuavat vhään samaa asiaa, mutta eivät teknisesti ehkä kuitenkaan.. Anyway:
1) Onko POST-tietoja mahdollista hävittää jollain tapaa, ettei refresh-nappia painettaessa lomake lähettyisi uudestaan? Mahtaako olla olemassa jotain muuta tapaa kuin headereilla kikkaillut uudelleenohjaukset?
2) Entä miten voin estää selainta hakemasta tiettyä kuvaa välimuistista? Eräällä työn alla olevalla sivulla on toiminto, jolla voi uploadata itselleen avatar-kuvan. Tiedostonimi muodostetaan käyttäjän id:n perusteella, ja siten siis vanha kuva korvautuu uudella, jos sellainen uploadataan. Latauksen jälkeen selain kuitenkin kaivaa esiin vanhan kuvan välimuistista, eikä uutta saa näkyviin ilman että päivittää sivun.
1) POST-tiedot ovat selaimen muistissa, ja PHP-skripti ei pysty poistamaan niitä. Tietysti voi tehdä niin, että jossain pidetään kirjaa äskettäin lähetetyistä lomakkeista ja jos tulee toinen täysin samanlainen lomake, sitä ei hyväksytä. Mutta onko sinulla erityistä syytä, miksi et halua käyttää uudelleenohjausta?
2) Järjestä asiat tavalla tai toisella niin, että muuttuneen kuvan URL-osoite poikkeaa vanhasta kuvasta. Ihan sellainen temppu voisi toimia, että kirjoitat kuvan osoitteeksi "kuva.png?123", jossa 123 on koodi, joka muuttuu aina, kun kuvakin muuttuu. Tosin melkein samalla vaivalla voit myös tallentaa kuvat eri nimillä.
Oikeastaan halusin sen POST-tietojen tuhoamisen juuri tuon kuvan välimuistiongelman takia. Eli kun käyttäjä lataa uuden kuvan, ei se tulekaan heti näkyviin, jolloin tämä päivittää sivun nähdäkseen uuden kuvan, ja tulee samalla lähettäneeksi upload-lomakkeen ja kuvatiedoston turhaan uudestaan.
Ehkäpä kehitän sitten vaikka sellaisen ratkaisun, että lisään tietokantaan käyttäjätauluun sarakkeen sitä kuvaa varten, ja alan käyttämään muuttuvia tiedostonimiä.
antsa kirjoitti:
Oikeastaan halusin sen POST-tietojen tuhoamisen juuri tuon kuvan välimuistiongelman takia. Eli kun käyttäjä lataa uuden kuvan, ei se tulekaan heti näkyviin, jolloin tämä päivittää sivun nähdäkseen uuden kuvan, ja tulee samalla lähettäneeksi upload-lomakkeen ja kuvatiedoston turhaan uudestaan.
Entäpä jos....
laittaisin upload-tapahtuman jälkeen heti päivityksen automaattisesti:
header("location:sivu.php");
Näin kävijä näkee heti lisäämänsä kuvan.
... ja jos tuota Pekka Mansikan temppua käytät (suosittelen kyllä), niin muistahan, että Location-otsakkeelle tulee antaa koko osoite (http://.../sivu.php), siis pelkkä sivu.php ei speksien mukaan riitä, vaikka yleensä sekin toimii.
Refreshaus olisi muuten loistava vaihtoehto, mutta sillä toisaalta myös menettää mahdollisuuden tulostaa sivulle tietoa lähetetyn lomakkeen mukaan (esim. "Kuva päivitetty!", "Tiedosto liian iso", "Kuvan lataus epäonnistui" yms ilmoitukset).
Voisin tietysti tallentaa sessioniin lomakkeen käsittelyssä ilmenevän virheen koodin, ja sitten sivulla tarkistaa, onko ko. sessionia olemassa. Jos on, sivulle tulostuu koodin mukainen virhe/muu ilmoitus, ja sen jälkeen sessioni tuhotaan. Onko ihan pöllö idea?
Jos virhekoodit siirtää GET-muuttujilla sivulta toiselle, käyttäjien on mahdollista tulostaa ruudulle ilmoituksia osoitetta peukaloimalla, muita varsinaisia haittoja se ei kyllä aiheuttaisi.. Ääh, onpa tämä nyt vaikeaa päättää miten noita pikkuyksityiskohtia toteuttaisi :)
Sessiosta on varmasti enemmän vaivaa kuin siitä, että käyttäjä saa GETillä printata omaksi ilokseen jotain virheilmoituksia. Jos joku niistä oikeasti niin kovasti nauttii, niin varmaan voit suoda hänelle sen ilon? :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.