Vielä yksi ongelma. Edelleen sivuilla on kehysrakenne. Vasemmanpuoleisessa kehyksessä on asiakkaan muokkaus menossa, oikealla kirjautumislomake joka näyttää joko kirjautuneen asiakkaan tiedot tai kirjautumislomakkeen.
Kun vasemmanpuoleisessa kehyksessä tehty asiakkaan poisto on suoritettu, pitäisi kutsua oikealla olevaa kirjautumislomaketta päivittymään. Tällöin se näkee, että session on loppunut ja täytyy näyttää kirjautumislomake.
Miten siis aiheutetaan kehysrakenteessa toisen lomakkeen päivitys aliohjelmasta käsin?
Kun vasemmanpuoleisessa kehyksessä tehty asiakkaan poisto on suoritettu, pitäisi kutsua oikealla olevaa kirjautumislomaketta päivittymään. Tällöin se näkee, että session on loppunut ja täytyy näyttää kirjautumislomake.
Miten siis aiheutetaan kehysrakenteessa toisen lomakkeen päivitys aliohjelmasta käsin?
Vastaukset 8
Vanhimmat
En ihan ymmärtänyt minkälaista haluat, mutta kelpaiskos taas se target?
siis vasemmalla linkki jne... poista_käyttäjä.php joka poistaa käyttäjän ja header functiolla hakee xxx.php sivun näkyviin oikeaan frameen.
Tai vaihtoehtoisesti vasemmalla linkki xxx.php?t=poista jolloin xxx.php poistaa käyttäjän ja näyttää kirjaantumis lomakkeen. Tolla ? jälkeen tulevalla on helppo sanoa mitä pitää tehdä ja näyttää, tarkistat vain ehtolauseella (esim if) mitä halutaan $_GET['x'] ja sit laitat scriptin toimimaan sen mukaan.
Tässä on nopeesti naputeltu testaamaton esimerkki
if ($_GET['t'] == 'poista') {
if (poista_käyttäjä()) { // poistaminen onnistu
header("Location: /index.php");
}
else echo 'poistaminen epäonnistu';
}
tässä sit muuta löpinää
ton laitat siihen xxx.php ja kutsut tota xxx.php?t=poista
Tai jos haluat tehdä poista_käyttäjä.php niin silloin vaikkapa tähän tapaan.
if (poista_käyttäjä() && $_GET['t'] == 'poista') { // poistaminen onnistu
header("Location: /index.php");
}
else echo 'poistaminen epäonnistu';
Molemmissa poista_käyttäjä()-functio palauttaa true jos onnistu, false jos epäonnistu poistaminen.
Yritin soveltaa neuvojasi työhöni, mutta huonoin tuloksin. Tuossa on se paikka, jossa minulla on ongelma:
//poistetaan asiakastiedot
$sql = "delete from ".DBTABLE." where a_id = ".$_SESSION['a_id'];
if(mysql_query($sql, $link))
{
print "Asiakastietojen poisto onnistui";
session_unset(); // Poistetaan istunnon tiedot
session_destroy(); // Tuhotaan istunto
header("location: kirjautuminen.php");
}
Tämä on siis vasemmassa kehyksessä oleva asiakasmuokkaus.php. Laitoin tuon ehdottamasi header- käskyn paikkaan, jossa kirjautuminen.php lomake kehyksen oikealla puolella tulisi päivittää. Näin koodattuna kirjautuminen.php -lomake päivittyy kuitenkin vasempaan kehykseen, tietysti koska target määritystä ei ole. Sitä ei voi asiakasmuokkaus.php -lomakkeeseen laittaa, koska muuten kaikki lomakkeella tehtävät jutut ja ilmoitukset esiintyvät oikeanpuoleisessa kehyksessä.
Osaatko sanoa mitä minun täytyy tehdä, että tuo header -komento tapahtuu juuri oikeaan kehyksenpuoliskoon. Toinen vaihtoehto on, että koko kehysrakenne päivittyisi.
window.open ottaa parametriksi ikkunan nimen. Jos sen niminen ikkuna on jo, niin se avaa sisällön sinne. Tällöin voisi käyttää tarkettia ja toisen framen muokkaukseen window.open
Onko ton poistojutun pakko olla lomakkeessa, eikös pelkkä linkki kelpaisi jolloin se onnistuisi helposti?
Tai sit teet poistonapille oman formin jossa on target määre, tai sitten javascriptillä teet target määreen mikäli poistojuttu valitaan, tosin tämä ratkaisu ei toimi niillä keillä on javasript poispäältä.
Tai sitten yksvaihtoehto olis, että päivität poistonjälkeen ton vasemman framen ja lisäätkin koodiin meta-refresh ja siihen target määreen, että päivittää heti koko kehyksen (en varma tukeeko meta, myös target määrettä, ellei niin javasrcriptillä onnistuu)
Tai sitten ehkä parhain keino jos haluat yhdellä lomakkeella hoitaa kaiken, poiston jälkeen tulostat vasempaan frameen painikkeen/linkin jossa käsketään käyttäjän kirjaantumaan ulos, klikkaaminen päivittää sit koko framen.
Tai jos et käyttäisikään frameja ollenkaan, silloinhan ongelmaa ei olisi.
Header-functiolla ei voi mitenkään määrätä mihkä sivu aukeaa, se aukeaa joko siihen ikkunaan(frameen) tai sitten siihen mihkä on targetilla määritelty.
..taas kerran vastauksista. Päädyin lopulta laittamaan sen asiakaspoistonamikan samalle lomakkeelle jonka päivitys tuotti ongelmia. Myönnän, kehysrakenne ei ole oikein kätevä tässä hommassa.
hiukan kyllä jaksaa ihmetyttää tuo frame-rakenne. onko sen käytölle jotain perustelua.
kun tekee sivuston ilman frame-virityksiä, ei tarvitse taistella targettien tahi javascriptien kanssa...
ihan vain vinkkinä tulevaisuutta varten.. voit korvata frame-rakenteen esimerkiksi php:n include-toiminnolla..
..meidän (hölmö) php:n opettaja ei kertonut mitään tuosta ihanuudesta. Eilen luin includesta, mutta koska aion saada työn huomiseksi valmiiksi en jaksa enää muuttaa koko sivujen rakennetta.
Jotenkin ihmetyttää, en tosin ole itse ollut koskaan php-tunnilla, mutta luulisi includen olevan ensinmäisiä functioita mitkä opetetaan.