ugrás a tartalomhoz

Egyszerűbb fórum készítésénél fellépett cikluson belüli session probléma.

nadilla · 2012. Dec. 17. (H), 00.42
Van egy egyszerűbb fórumom amit készítettem.
Ez témákból és az azon belül létrejövő hozzászólásokból áll. Tehát nincsen egyéb módon csoportosítva csak amolyan a téma a kérdés és a hozzászólás a hozzá tartozó válaszok. A fórum témáit (a kérdéseket) egy topik nevű táblában tárolom. Itt van néhány adat (id, a kérdés címe, a hozzá tartozó megjegyzés rovat stb...) , a hozzászólások pedig a fórum táblámban (id, hozzászóló felhasználó neve, tid= az az id amelyik topikhoz tartozik, stb...).
Mivel közel sem vagyok profi így megpróbáltam valahogyan összerakni azzal az ismerettel amit a neten szereztem. Két sessiont hoztam létre amely közül az egyik a topik id-t tárolja bizonyos kapcsolódási pontokon, egy másik pedig a felhasználó id-jét. Ezekre hivatkozok többször.
Jelenleg töklletesen működne CSAK mégse. Vagyis megjelenik a kérdések listázva az adatbázisomból úgy ahogyan én szeretném. A megnyitás gombbal pedig megnyitom a hozzászólást ahová szépen úgy tudok hozzászólni amennyiben bejelentkezek, ahogyan én szeretnék. A hiba az, hogy bármelyik kérdés megnyitására is kattintok ugyan úgy az utolsó kilistázandót nyitja meg és csak ahoz tudok hozzászólni. Rájöttem, hogy az a hiba, hogy a cikluson belül ha a megnyitás gombra kattintok akkor nem csak az aktuális kérdéshez vezeti le hogy session[tid] egyenlő legyen az aktuális topik id-vel, hanem az összessel sorban így nyilván valóan mindig az utolsó megjegyzett lesz az aktuális. Mivel fordított sorrendben iratom ki, hogy mindig a legfrissebbet láthassam így ez mindig az első hozzászólás lesz. Kicseréltem, átcserélte, összecseréltem, így-úgy kiírattam, úgy írattam, átírattam... Nem megy.

Tudna valaki segíteni nekem erre a problémára?
  1. <?php   
  2. session_start();   
  3. include 'connect.php';   
  4. header("Content-Type: text/html; charset=utf-8");   
  5.   
  6. $ker= mysql_query("SELECT * FROM `topik` WHERE `delete` = '0' ORDER BY `id` DESC");   
  7. while($top = mysql_fetch_array($ker))   
  8. {   
  9.   
  10. echo '<p>Topik:</p><br/><div id="topik" sytle="backgorund-image:url(/img/fust.png)">'.$top['name'  
  11. ].''.$top['id'].' <br/>'.$top['text'].' '.$top['date'].'</div>';   
  12.   
  13. echo '<form method="POST"><input border="0" src="img/megnyit.png" name="megnyit" width="70px" height="30px" type="image"></form>';   
  14. echo $top['id'];   
  15. if(isset($_POST['megnyit_x'])){   
  16. $_SESSION['tid']=$top['id'];   
  17. echo'<meta http-equiv="refresh" content="0; url=for.php"">';}   
  18.   
  19. };   
  20. ?>   
Bizonyára nem a legszebb kivitelezés, de ennyire telik tőlem.
 
1

session?

Poetro · 2012. Dec. 17. (H), 07.55
Azt megmagyaráznád, miért kell az egészhez session változó? Miért nem adod át a kérdéses téma azonosítóját GET változóban?
  1. if(isset($_POST['megnyit_x'])){     
  2. $_SESSION['tid']=$top['id'];   
"">';} [/quote]
Ez okozza a problémát, ugyanis ez pontosan minden téma esetén beállítja a munkamenet változót a téma azonosítójára. Azaz ha 10 elemen megy végig, akkor pont 10-szer állítja be, ha be van állítva a megnyit_x POST változó. Mondjuk azt nem igazán értem, hogy milyen célt szolgál ez a POST változó, és miért van beállítva a ciklusban minden egyes témára a munkamenet.