ugrás a tartalomhoz

több dimenziós session tömböl eltünik az adat

monghuz · 2005. Május. 17. (K), 00.34
Szevasztok..

Van egy weblapom amiben egy táblázat adatait SESSION tömbökben tárolom..

$_SESSION["1"]["type"] formában ahol az első dimenzió a sor száma, a második pedig az adott oszlop neve.
egy linket nyomogatva lehet létrehozni új sorokat, amikoris métrehozom az új session tömböt aminek minden dimenziójénak null értéket adok.

ha rákatintok az egyik sorra akkor tudom módosítani az aktuális sor adatait egy form-on keresztül. amikor elküldöm az adatokat akkor elöször az adatok eltárolódnak a session tömb megvelelő dimenzióiban, majd megint kilistázza a z adatokat (lsd. lejebb)

A gond az hogy amikor a listázás megtörténik még látom az előzöleg felvitt adatokat, amiket a már lemetet session tömböl nyerek vissza, viszont ezután akármit csinálok (új sor, másik sor adatmódosítása, vagy akár egy másik menüre kattintok...) minden elözőleg felvitt adat eltünik a dimenziókból.. viszont meguk a SESSION-nok megmaradnak mert a sorok nem tünnek el.. szóval maga a $_SESSION["1"]["type"] mint változó megmarad, csak a tartalma tünik el...

ha tudtok plz segítsetek mert már 3 hete itt vagyunk elakadva :(

jah olvastam olyanról hogy a sessionok csak akkor mentődnek ténylegessen el ha lefut az adott script de ez megtörténik, ill biztos ami biztos beraktam session_write_close-t de ez sem segítet...

jah és itt a kód:
 if (isset($_POST["details"])) {
	$id2 = $_POST["details"];
	$_SESSION[$id2]["type"] = 		$_POST["type"];
	$_SESSION[$id2]["pagename"] = 	$_POST["pagename"];
    $_SESSION[$id2]["codename"] = 	$_POST["codename"];
	$_SESSION[$id2]["value"] = 		$_POST["value"];
	session_write_close();
	print "valami".session_cache_expire();
	$_SESSION["tomi"] = "valami";
	}
	
 if (!isset($_SESSION["db"])) {
      $_SESSION["db"] = 0;
	}
 if (isset($_GET["funct"])) {
     $testarr = explode("-", $_GET["funct"]);
	 hely_csere($testarr[0], $testarr[1]);
	}
 if (isset($_GET["f_in"])) {
    f_insert($_GET["f_in"]);
    }
	
 if (isset($_GET["f_add"])) {
     f_add();
 }
 
 if (isset($_GET["f_del"])) {
     f_del($_GET["f_del"]);
 }	

	  
 for($i=1; $i<=$_SESSION["db"]; $i++){
    $fel = $i-1;
    $le = $i+1;
	print "
	<tr class=\"".$szin."\">
    <td height=\"15\"><a href=\"".$PHP_SELF."?page=details&id=".$i."\">".$i."</a></td>
    <td><a href=\"".$PHP_SELF."?page=modul1_2&f_in=".$i."\">O</a></td>
    <td>";
	if ($fel>0) {//fel
		print "<a href=\"".$PHP_SELF."?page=modul1_2&funct=".$i."-".$fel."\"><</a>";
	} else {print "<span class=\"disabled\"><</span>";}
	print "</td><td>";
	
	if ($_SESSION["db"]>=$le) {
	    	print "<a href=\"".$PHP_SELF."?page=modul1_2&funct=".$i."-".$le."\">></a>";	//le
	} else {print "<span class=\"disabled\">></span>";}
	print "</td>
    <td><a href=\"".$PHP_SELF."?page=modul1_2&f_del=".$i."\">X</a></td>
    <td>";
	
	switch($_SESSION[$i]["type"]){
		case "text" : 		print "Text Field";		break;
		case "hidden" : 	print "Hidden Field";	break;
		case "textarea" : 	print "Textarea";		break;
		case "checkbox" : 	print "Checkbox";		break;
		case "radio" : 		print "Radio Group";	break;
		case "select" : 	print "Select/Menu";	break;
		case "file" : 		print "File Field";		break;
		case "submit" : 	print "Submit Button";	break;
		case "reset" : 		print "Reset Button";	break;
		case "button" : 	print "Button";		break;
		default:			print "N/A";		break;
	} // switch
	print "</td>
    <td>".$_SESSION[$i]["pagename"]."</td>
    <td>".$_SESSION[$i]["codename"]."</td>
    <td>".$_SESSION[$i]["value"]."</td>
  </tr>";
 if ($szin == "lightgray") {
 	$szin="darkgray";
	
 	}
 else{
 	$szin="lightgray";
 	}
} 
bye Tomi
 
1

Hmm...lehet, hogy még nem

csla · 2005. Május. 17. (K), 07.32
Hmm...lehet, hogy még nem látom át teljesen, de a kiiratásnál az első linkre kattintva kéne jönni a részletezésnek? Mert akkor furcsa, hogy a $_POST tömbben keresed a "details" változót, amikor a $_GET-ben kéne, másrészt meg, hogy "details" változót keresel, amikor a link szerint $_GET["page"] változót kéne vizsgálni, hogy egyenlő-e a "details" sztringgel.
Ha félreértettem valamit, akkor bocsánat, és akkor kérnék még egy kis magyarázatot, de ez így nekem eléggé furcsa.

Azt az előbb még kifelejtettem, hogy ha így van, akkor a $id2 = $_GET["id"] kéne, hogy legyen.

Ja, és ha esetleg mégsem így van, akkor megmutathatnád azt a kódrészletet is, ahonnan POST-olsz. (Lassan olyan lesz a hozzászólásom, mint egy folytatásos regény... ;))
2

Az egy hidden field... :)

monghuz · 2005. Május. 22. (V), 12.48

<?
print "<form name=\"form1\" method=\"post\" action=\"".$PHP_SELF."?page=modul1_2\">"; 
print $_SESSION["tomi"]."-ttrtr"; ?>
<input type="hidden" name="details" value="<? print $_GET["id"]; ?>">
  <table height="369" align="center">
	<tr>
  		<td height="30" colspan="3" class="cellhead2"><? $id = $_GET["id"]; print $id; ?> -ik elem adatai </td>
	</tr>
  	<tr class="lightgray">
    	<td width="204"><div align="right">Az elem t&iacute;pusa: </div></td>
    	<td colspan="2">
<?
print "<select name=\"type\">";
	
	switch($_SESSION[$i]["type"]){
		case "text" : 		$sel_text = "selected" ;	break;
		case "hidden" : 	$sel_hid = "selected" ;		break;
		case "textarea" : 	$sel_tear = "selected" ;	break;
		case "checkbox" : 	$sel_chbx = "selected" ;	break;
		case "radio" : 		$sel_radio = "selected" ;	break;
		case "select" : 	$sel_sel = "selected" ;		break;
		case "file" : 		$sel_file = "selected" ;	break;
		case "submit" : 	$sel_subm = "selected" ;	break;
		case "reset" : 		$sel_rest = "selected" ;	break;
		case "button" : 	$sel_but = "selected" ;		break;
		default:			$sel_text= "selected";		break;
	} // switch

print "<option value=\"text\" $sel_text>Sz&ouml;vegmez&#337;</option>
      <option value=\"hidden\" $sel_hid>Rejtett</option>
      <option value=\"textarea\" $sel_tear>Sz&ouml;veg&quot;doboz&quot;</option>
      <option value=\"checkbox\" $sel_chbx>Csekbox</option>
      <option value=\"radio\" $sel_radio>Radio button</option>
      <option value=\"select\" $sel_sel>Leg&ouml;rd&uuml;l&#337; men&uuml;</option>
      <option value=\"file\" $sel_file>Tall&oacute;z&aacute;s</option>
      <option value=\"submit\" $sel_subm>Elk&uuml;ld&eacute;s gomb</option>
      <option value=\"reset\" $sel_rest>Alaphelyzet gomb</option>
      <option value=\"button\" $sel_but>Sima gomb</option>
    </select>"
?>
Hát a details az egy hidden fieldből jön... a fentebbi kódsor az a details.php eleje.. az egészet gondoltam nem másolom be mert kicsit hosszú..
a lényeg az hogy mikor a details.php elküldi a POST tömbbe a cuccait, akkor az aktuális pl: session['1']['type'] tömbben eltárolódnak az adatok (az 1es jeln esetben az második sor ) , ezt a letárolást végzi az első hozzászólásomban lévő
<?
if (isset($_POST["details"])) {
    $id2 = $_POST["details"];
    $_SESSION[$id2]["type"] =         $_POST["type"];
    $_SESSION[$id2]["pagename"] =     $_POST["pagename"];
    $_SESSION[$id2]["codename"] =     $_POST["codename"];
    $_SESSION[$id2]["value"] =         $_POST["value"];
    session_write_close();
    print "valami".session_cache_expire();
    $_SESSION["tomi"] = "valami";
} ?>
majd a már "letárolt" cuccból olvasom vissza amikor feltöltöm a táblázatot... ebből én arra következtetnék hogy a session tömben megvannak a cuccok... viszont amikor ezután rákatintok egy másik sor id-jére.. hogy annak is állítsam a cucait.. vagy simán frissítem ezt a dolgot.. akkor a $_SESSION['1']['type'] üres lesz.. mivel a táblázatban nem jelenik meg semmi.. viszont maga a $_SESSION['1']['type'] tömb megmarad.. csakhát az adat...

várom a további ötleteket.. jah és bocsi hogy ilyen későn reagáltam, de csak most jutottam géphez...

bye Tomi
3

Numerikus index

aurum · 2005. Május. 23. (H), 13.21
Én is belebotlottam már ebbe a jelenségbe, ha a többdimenziós session legfelső indexe numerikus, akkor elfelejti ami benne van. Nekem ez jött be:
$_SESSION["admin"][1]["stb"]
Eddig azt hittem, hogy csak helyi jelenség, de ezek szerint más is belefutott már. Esetleg probáld meg stringként indexelni:
$_SESSION["1"]...

Lehet, hogy a hiba máshol van és ez csak tüneti kezelés, de működik és nem törődtem vele többet.
4

üldözlek a sírig :)

monghuz · 2005. Május. 24. (K), 16.18
Agyon karmolom magam... erre aztán végkép nem gondoltam, pedig már jó ideje agyaltam rajta...
Nagyon szépen köszönöm a segítséget.

bye Tomi