Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Lomakkeen tietojen säilyminen

Sivun loppuun

Tepi_78 [01.03.2011 08:53:43]

#

Ongelmana on yksi sivu, joka sisältää linkin itseensä ja johon välitetään tietoa sekä GET- että POST -metodilla. Sivulle tulostetaan taulukko tietokannasta haettavalla datalla. Sivulla on hakukentät, joiden tiedot välitetään POST-metodilla sivulle itselleen Hae-painiketta painamalla.

Kun tiedot on haettu kannasta ja tulostettu taulukkoon, voi taulukon tulostusjärjestystä muuttaa klikkaamalla taulukon sarakkeiden otsikoita. Otsikot toimivat linkkinä sivuun itseensä ja linkeissä annetaan GET-metodilla tieto, minkä sarakkeen mukaan järjestettynä tieto haetaan kannasta.

Ongelmana on se, että POST-metodilla siirrettävä tieto, eli hakukenttien arvot, katoavat, kun sivulle siirrytään uudelleen taulukon otsikoita klikkaamalla.

Onko mahdollista saada lomakkeen tiedot säilymään siirryttäessä sivulle uudelleen taulukon otsikkolinkeillä? Olen yrittänyt toteuttaa taulukon otsikkolinkit seuraavastikin siinä toivossa, että sivulle voisi lähettää dataa samanaikaisesti sekä GET- että POST-metodilla, mutta tulos ei ole toivotunlainen:

<a href=\"sivu.php?orderBy=id\" onClick="document['lomake'].submit()>

lomakkeen action=sivu.php

Mitä teen väärin? Onko sivun toteuttamisessa jokin perustavaa laatua oleva virhe?

Lebe80 [01.03.2011 10:09:03]

#

Piilota postilla ja getillä saadut halutut arvot hidden-kenttiin (jokaiselle saadulle arvolle tietenkin oma kenttä).

<input type="hidden" name="piilotettumuuttuja" value="esim_postista_tullut_arvo" />

Lisäksi sinun pitää koodista muuttaa sen verran, ettet tarkkailekaan $_GET ja $_POST -taulukkoja, vaan pelkästään $_REQUEST -taulukkoa, joka sisältää automaagisesti molempien arvot (lisäksi jokusen muunkin).

Yucca [01.03.2011 13:56:27]

#

Onko tulostusjärjestyksen muuttaminen siis toteutettu siten, että se vaatii lomakkeen lähettämisen eli menee palvelimen kautta? Jos kyse on vain järjestyksestä, niin se olisi ainakin periaatteessa parempi tehdä selaimessa jos mahdollista.

Jos kierretään palvelimen kautta, niin kyseeseen tulee kai lähinnä neljä tapaa:
1) Lebe80:n mainitsemat piilokentät.
2) Datan vieminen linkkien URLeihin (eli kuljettaminen eteenpäin GET-metodin keinoin).
3) Evästeet (cookiet).
4) HTML5-muisti eli web-muisti, tässä riittäisi varmaan sessionStorage; tosin vielä lienee syytä rakentaa varmistus niin, että IE:n vanhat versiot, jotka eivät tue HTML5-muistia, käyttävät Microsoftin omaa useData-tekniikkaa.

makumaku [01.03.2011 14:30:28]

#

Käytä sessioita, esim

$_SESSION['order_sarake'] = "nimi";
$_SESSION['order_suunta'] = "asc";

jne...
sitten tietoa haettaessa vaikka käytät

$kysely = "Select .......";
if ($_SESSION['order_sarake']) {
  $kysely .= " ORDER BY ". $_SESSION['order_sarake'];
  $kysely .= " ". $_SESSION['order_suunta'];
}

...tai jotain tuohon tyyliin

Mod. lisäsi kooditagit.

Lebe80 [01.03.2011 16:18:43]

#

Mä en kyl käyttäis oikeastaan ikinä lomakkeissa (jos on mahdollista, että lomakkeen arvot muuttuvat juuri session takia vääriksi) sessio-dataa, koska se estää saman lomakkeen käyttämisen useassa täbissä.

manninen [01.03.2011 19:15:39]

#

http://edu.phkk.fi/opiskelu/Internet-ohjelmointi/PHP_ja_MySQL/php_ja_lomakkeet.htm

Lebe80 [01.03.2011 20:44:04]

#

manninen: kenelles tuo sun linkkis on tarkoitettu, vai halusitko vain muistuttaa yleisesti html-lomakkeista...?

Itsehän en tajunnut, miten "php ja lomakkeet" liittyy siihen, että aloituspostaaja on jo ilmoittanut, että hänellä on toimiva lomake, josta haluaa lähettää tietoa vielä eteenpäin hävittämättä edellisen lomakkeen tietoja.

manninen [02.03.2011 13:53:45]

#

Sori, käsitin väärin ja ehkä vieläkin vai kaipasitko jotain tälläistä?

<?php
$haku = $_REQUEST['etsi'];

if(!empty($_REQUEST['nimi'])){
  TallennaKantaan();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title></title>
  </head>
  <body>

    <form name="henkilot" method="post" action="" >

     <input type="hidden" name="jarjestys" value="">

    <table>
    <tr>
    <td>Nimi</td>
    <td>Sukunimi</td>
    </tr>
    <tr>
    <td><input type="text" name="nimi" value="" /></td>
    <td><input type="text" name="snimi" value="" /></td>
    </tr>
    <tr>
    <td><input type="submit" value="Tallenna" /></td>
    </tr>
    </table>

    <table>
    <tr>
    <td><input type="text" name="etsi" value="<?php echo $haku; ?>" /></td>
    </tr>
    <tr>
    <td><input type="submit" value="etsi" /></td>
    </tr>
    </table>


      <br >
    <?php HaeHenkilot($haku); ?>
    </form>
  </body>
</html>
<script type="text/javascript">
function MikaKentta(td, arvo)
{
    var solu = new Array()

    solu[0]="snimi";
    solu[1]="nimi";

    document.forms.henkilot.jarjestys.value = (solu[arvo]);
    document.forms.henkilot.submit();
}
</script>
<?php
function TallennaKantaan(){
  $k = "INSERT INTO henkilot SET nimi = '$_REQUEST[nimi]', snimi ='$_REQUEST[snimi]'";
  if(!($t = mysql_query($k))) return;

  header("location:lomake.php");
  exit;
}
function HaeHenkilot($haku){

  if(!empty($_REQUEST['jarjestys'])){
    $ehto = 'ORDER BY '.$_REQUEST['jarjestys'];
  }

  if(!empty($haku)){
    $etsi = "WHERE snimi LIKE '%$haku%'";
  }

  $k = "SELECT snimi, nimi FROM henkilot $etsi $ehto";
  if(!($t = mysql_query($k))) return;

  echo '<table border="1" width="25%">';

  echo '<tr>';
    echo "<td onclick='MikaKentta(this, 0)'; style='background:black; color:white;'>Sukunimi</td>";
    echo "<td onclick='MikaKentta(this, 1)'; style='background:black; color:white;'>Nimi</td>";
  echo '</tr>';

  while($r = mysql_fetch_assoc($t)){
    echo '<tr>';
    echo '<td>'. htmlspecialchars($r['snimi']) .'</td>';
    echo '<td>'. htmlspecialchars($r['nimi']) .'</td>';
    echo '</tr>';
  }
}
?>

Tepi_78 [02.03.2011 15:11:45]

#

Kiitos aktiivisesta vastailusta!

Ratkaisin ongelman tallentamalla POST-metodilla lähetetyt arvot sessioon jemitsuun. Arvot voi hakea sessiosta sen jälkeen, kun sivulle on siirrytty uudelleen näpäyttämällä taulukon sarakeotsikoita ja POST-arvot on kadotettu.'

Jee!


Sivun alkuun

Vastaus

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

Tietoa sivustosta