Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP taulu hidden fieldiin

Sivun loppuun

Hoover [21.12.2006 15:10:41]

#

Mitenkä voidaan hidden fieldiin laittaa talteen taulukko PHP:llä?

Yritin aluksi vaan pistää normaalisti, kuten perus muuttujat jolloin hidden fieldistä arvoa haettaessa ei tullut mitään ulos.

Esim.

<input type='hidden' name='tietoa' value='$taulu'>

$taulu voisi esimerkissä pitää sisällään vaikka yhden checkboxryhmän valitut boxit.

Meitsi [21.12.2006 15:16:34]

#

Onkohan tuo järkevää? Jos on isompi taulukko niin hidastaa sivunlatausta ja muutenkin tuo ratkaisu vaikuttaa kummalliselta. Tallenna taulukko serverille vaikka sessioilla. Toinen tapa olisi myös tallentaa taulu johonkin tiedostoon/tietokantaan ja laittaa tuonne kenttään pelkkä id-tieto jonka perusteella tieto voidaan taas serverin puolella hakea.

Blaze [21.12.2006 15:17:36]

#

Joko serialisoit taulun tai otat käyttöön sessiot ja kuljetat datan siinä.
https://www.ohjelmointiputka.net/keskustelu/13778-taulukko-formissa

Hoover [21.12.2006 15:24:25]

#

Tässä ei tule kuin ihan muutama numero taulussa, tyyliin 1,3,5 joten ei pitäisi kovin raskas olla.

Sessioilla tosiaan olisi hyvä siirrellä, mutta tässä ei nyt sessioita käytetä... Pitää koittaa noita serialisointeja.

Lebe80 [22.12.2006 11:28:06]

#

Hoover kirjoitti:

Sessioilla tosiaan olisi hyvä siirrellä, mutta tässä ei nyt sessioita käytetä... Pitää koittaa noita serialisointeja.

Laita se käyttämään sessioita.

Hoover [22.12.2006 13:15:25]

#

Tuo serialisointi näytti toimivan, jos stringin unserialisoi saman funktion sisällä takaisin tauluksi. Jos unserialisoi funktion ulkopuolella niin siitä ei jostain syystä tule enää taulukkoa. :o

Lisäys:
Näyttää tulevan vain tyhjä taulu tuosta kun unserialisoin stringiä tauluksi. Pitäisikö sille sitten jotenkin kertoa, että pistä nyt tauluksi se stringi, sillä jos echotan serialisoidun stringin, niin siinä näkyy olevan kaikki taulun tiedot kyllä.

Pelkistetty esimerkki:

Funktio();
$taulustringi = $_POST['tauluntiedot'];

// Tässä ei tulee enää taulu takaisin samassa muodossa kuin se serialisoitiin:
$taulu = unserialize($taulustringi);

function Funktio(){

$taulu;

$taulu = serialize($taulu);
<input type='hidden' name='tauluntiedot' value='$taulu'>

}

Lebe80:
Tässä projektissa ei saa käyttää sessioita nyt tällä kertaa, joten sessiot voi unohtaa.

siirappi [22.12.2006 14:15:42]

#

global $taulu funktioon, niin voi jopa toimia.

ajv [22.12.2006 14:19:29]

#

Tai ehkä mielummin argumenttina function Funktio($taulu){...

Hoover [22.12.2006 14:39:10]

#

Hmm... eikö sen kuitenkin nykyiselläänkin pitäisi $taulu -muuttujan tulla takaisin, kun jos echotan sen arvon $taulustringi -muuttujan kautta, niin sieltä tulee taulun tiedot.

Se vaan jostain syystä muuttuu tällä rivillä tyhjäksi:
$taulu = unserialize($taulustringi);

Ennen tuota riviä $taulustringi vielä sisältää taulukon tavaraa. Tunnostaa, että tuo unserialisointi jotenkin kusahtaa.

Voi olla parempi kun pistän vähän lisää koodia tuohon esimerkkiin, niin selviää paremmin tämä ongelma:

Taas pelkistettyä koodia, niin voi olla vaikka mitä virheitä.

Testi.php

<?php

TulostaLomake();

if ($_POST['suorita'] == 1){

$toinenTaulu = unserialize($_POST['tieto']);

// Tässä ei tulostu mitään, aivan kuin taulu olisi täysin tyhjä.
for ($i = 0 ; $i < count($toinenTaulu) ; $i++){
echo $i . ". " . $toinenTaulu[$i] . "<br>";
}
}


function TulostaLomake(){
echo("
<html>
<form action='Testi.php' method='post'>
");

$taulu = array('kalle', 'jukka', 'seppo');
$tauluStringi = serialize($taulu);

echo("
<input type='hidden' name='tieto' value='$tauluStringi'>
<input type='hidden' name='suorita' value='1'>
<input type='submit'>
</form>
</html>
");
}
?>

Antti Laaksonen [22.12.2006 19:13:05]

#

Jos PHP on säädetty niin, että se lisää lomakemuuttujiin kenoviivoja, kirjoita unserialize(stripslashes($_POST['tieto'])).

Hoover [22.12.2006 20:21:43]

#

Voisi koittaa tuota.

Tuli mieleen, että voisin kyllä itse kyhätä jonkin köyhänmiehen version taulun muuntamisesta stringiksi ja takaisin. Toimisi ainakin. :)


Sivun alkuun

Vastaus

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

Tietoa sivustosta