Eli tarkoitus olisi, että kun painan linkkiä niin siinä samalla muuttujaan asetettaisiin arvo alla olevalla tavalla. Tämän jälkeen switch case rakenteessa sitten haaraudutaan tämän muuttujan arvon perusteella. Tuo &action=NaytaLomakkeet ei kuitenkaan tunnu toimivan. Ilmeisesti tuon kuitenkin pitäisi toimia, koska sitä käytetään Ari Rantalan web ohjelmoinnin peruskirjassa melko usein. Niin käytän php 4.3 versiota, jos sillä nyt sattuu olemaan merkitystä tässä.
echo ("<a href=\"" . $PHP_SELF . "?tuoreustakuu="); echo (time() . "&action=NaytaLomakkeet&input_lkm=1\">"); echo ("Tallenna uusia tiedostoja</a> | "); switch ($action) { case "NaytaLomakkeet": lomakkeet($PHP_SELF, $input_lkm); break; case "LisaaTiedostot": $file_lkm = 0; for ($i=1; $i <= $input_lkm; $i++) { // käydään kaikki syöttökentät läpi if (tallenna(${"filetto".$i}, ${"filetto".$i."_name"}, $datadir)) { $file_lkm++; } } echo "Kopioitujen tiedostojen lukumäärä:"; echo "<tt>$file_lkm</tt>"; break; default: listaa_hakemisto($datadir, $urldir); }
PHP:n uudemmissa versioissa sivun osoitteessa olevia muuttujia ei oletusasetusten ollessa valittuna pysty suoraan käsittelemään samannimisinä muuttujina, vaan niihin pitää viitata erillisen taulukon kautta. Tässä tapauksessa skriptin pitäisi toimia muuttamalla switch-rakenteen alussa oleva $action muotoon $_GET['action'] ja kaikissa kohdissa $input_lkm muotoon $_GET['input_lkm']. Sama juttu pitää tietenkin tehdä, jos lisäät skriptiin muita vastaavia muuttujia.
Lisää tietoa skriptille välitettyihin muuttujiin viittaamisesta uudella tavalla on PHP-oppaan 9. osassa toisena kysymyksenä.
PS. Kirjoita koodi ensi kerralla kooditagien sisään (ks. ohjeet).
Aha luulin, että tuo $_GET[''] on vain lomakkeiden tiedon tallennukseen. Onko se muuten suotavaa, että tekee esim. näin:
$input_lkm = $_GET['input_lkm'];
Tuostahan on ainakin se hyöty, että jos pitää kirjoittaa muuttuja monesti, niin ei tarvitse aina mennä "pitemmän" kautta. Kumoaako tuo sitten taulukon käytön idean? Monissa paikoissa mainitaan, että muuttujien suora käsittely on tietoturva riski, mutta itse en ainakaan ole huomannut missään selitettävän mitä kautta tämä riski muodostuu.
Tuosta ongelmasta puhutaan tässä ketjussa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.