Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Odottamaton muuttujan arvon kasvu

Sivun loppuun

sane [24.01.2007 17:02:37]

#

Hei,

Joka kerta sivua uudelleen ladattaessa $_SESSION["k"] muuttujan arvo kasvaa yhdellä, vaikka sen ei pitäisi tehdä niin. Missään kohti tätä sivua en muuta kyseisen muuttujan arvoa, ja ainoat kohdat joissa se on edes mainittu ovat tässä:

 if($_SESSION["k"]){
     $maara = $_SESSION["k"];
     }
 else{
      $maara = 0;
      }

Mikä neuvoksi?

Lebe80 [24.01.2007 17:18:42]

#

Pistä koodi näkyville. Uskon että sieltä se muutoksen tekevä rivi löytyy melko nopeasti...

sane [24.01.2007 18:22:02]

#

No tässä sitten kaikki kyseisellä sivulla oleva php-koodi, html-koodin jätän pois:

<?php
 session_start();

 unset($maara);

 echo $_SESSION["k"];

 if($_SESSION["kirjautunut"] != 1){
     header("Location: lisaa_1.php");
     }
 if($_SESSION["k"]){
     $maara = $_SESSION["k"];
     }
 else{
      $maara = 0;
      }
?>

...

var k = <?php echo $maara; ?>;

...

 var _nimi = new Array();
<?php
 for($k = 1; $k <= $maara; $k++){
      if($_SESSION["_nimi"][$k]){
          echo " _nimi[" . $k . "] = \"" . $_SESSION["_nimi"][$k] . "\";\n";
          }
      }
?>
 var _tyyppi = new Array();
<?php
 for($k = 1; $k <= $maara; $k++){
      if($_SESSION["_tyyppi"][$k]){
          echo " _tyyppi[" . $k . "] = " . $_SESSION["_tyyppi"][$k] . ";\n";
          }
      }
?>
 var _pakollinen = new Array();
<?php
  for($k = 1; $k <= $maara; $k++){
       if($_SESSION["_pakollinen"][$k]){
           echo " _pakollinen[" . $k . "] = " . $_SESSION["_pakollinen"][$k] . ";\n";
           }
       }
?>
 var _arvot = new Array();
<?php
  for($k = 1; $k <= $maara; $k++){
       if($_SESSION["_arvot_maara"][$k]){
           echo " _arvot[" . $k . "] = new Array();\n";
           for($a = 1; $a <= $_SESSION["_arvot_maara"][$k]; $a++){
                if($_SESSION["_arvot"][$k][$a]){
                    echo " _arvot[" . $k . "][" . $a . "] = \"" . $_SESSION["_arvot"][$k][$a] . "\";\n";
                    }
                }
           }
       }
?>
 var _arvot_maara = new Array();
<?php
  for($k = 1; $k <= $maara; $k++){
       if($_SESSION["_arvot_maara"][$k]){
           echo " _arvot_maara[" . $k . "] = " . $_SESSION["_arvot_maara"][$k] . ";\n";
           }
       }
?>
 var _riveja = new Array();
<?php
  for($k = 1; $k <= $maara; $k++){
       if($_SESSION["_riveja"][$k]){
           echo " _riveja[" . $k . "] = " . $_SESSION["_riveja"][$k] . ";\n";
           }
       }
?>
 var _lisatietoja = new Array();
<?php
  for($k = 1; $k <= $maara; $k++){
       if($_SESSION["_lisatietoja"][$k]){
           echo " _lisatietoja[" . $k . "] = \"" . $_SESSION["_lisatietoja"][$k] . "\";\n";
           }
       }
?>

...

<?php echo $_SESSION["nimi"]; ?>

sane [25.01.2007 11:25:16]

#

Hmm, muutenkin näyttää datamapilla sessiot toimivan melko odottamattomasti, tai sitten en vain osaa:) Ei kait sessioiden arvojen pitäisi muuttua ilman, että niitä asetetaan uudelleen?

Newb [25.01.2007 22:50:35]

#

En oo varma, mutta

for($k = 1; $k <= $maara; $k++)

tuossahan se lisää k-muuttujan arvo kasvaa aina yhdellä tuon $k++ :n takia. Oon melko väsynyt enkä lukenut koodia kunnolla, joten saatan olla väärässäkin. ^^

Merri [25.01.2007 23:16:09]

#

Jep, kun kerran $k määräytyy $maaran mukaan, ja kun looppi kestää siihen asti että $k on suurempi kuin $maara niin sitten se tosiaan kasvaa aina yhdellä.

Tämän ongelman voisi välttää käyttämällä esimerkiksi nollapohjaisia muuttujataulukoita (nähdäkseni tässä on käytössä yksipohjaiset, mutta väsyneenä ei jaksa syväanalysoida).

sane [26.01.2007 01:34:21]

#

Tosiaan, mutta ei kait $k:n kasvamisen pitäisi vaikuttaa $_SESSION["k"] kasvamiseen? Tuo kuitenkin korjasi ongelman, joten kiitoksia:)

ajv [26.01.2007 08:52:52]

#

Olisiko datamapissa register_globals päällä? Silloinhan $_SESSION['k'] ja $k ovat sama asia...


Sivun alkuun

Vastaus

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

Tietoa sivustosta