Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z zanikającą sesją
Forum PHP.pl > Forum > Przedszkole
Adis92
Witam. Mam pewien problem. Otóż piszę skrypt i natchnąłem się na problem bodajże z gubiącą sesją.
W tej części mi wyświetla prawidłową zawartość sesji.
  1. <?php
  2. if(isset($_POST['usun'])){
  3.  
  4. if(isset($_SESSION['wybor'])){
  5.  
  6. print_r($_SESSION['wybor']);
  7.  
  8. ?>
  9. <form action="" method="POST">
  10. <div id="uwaga">
  11. <br />Czy jestes pewien że chcesz usunąć wybrane konta?<br />
  12. <input type="submit" class="pyt" name="tak" value="Tak" />
  13. <a href='java script:history.back()'>Nie</a>
  14. </div>
  15. </form>
  16. <?php
  17. }else echo '<div id="uwaga"><br />Nie wybrałeś żadnego konta do usunięcia!</div>';
  18. }

lecz tutaj już mi nie wyświetla w ogóle sesji.
  1. if(!isset($_SESSION['wybor'])){
  2. $_SESSION['wybor'] = array();
  3. }
  4.  
  5. $_SESSION['wybor'] = $_POST['zaznacz'];
  6.  
  7. if(isset($_POST['tak'])){
  8.  
  9. print_r($_SESSION['wybor']);
  10.  
  11. foreach((array)$_SESSION['wybor'] as $id){
  12. $ins = @mysql_query("DELETE FROM uzytkownicy WHERE id=$id") or die("MySQL ERROR: ".mysql_error());
  13. }
  14.  
  15. if($ins){
  16.  
  17. echo '<div id="ok"><br />
  18. konto zostało usunięte poprawnie!
  19. </div>';
  20.  
  21. unset($_SESSION['wybor']);
  22. }else{
  23.  
  24. echo '<div id="uwaga"><br />
  25. Wystąpił błąd podczas usuwania konta!
  26. </div>';
  27. }
  28. }

czy ktoś może wie w czym tkwi problem ?
muk4
a dałeś na początku pliku session_start() ?
Adis92
tak dałem ob_start(); i session_start();


Czy naprawdę nikt nie wie co może być przyczyną questionmark.gif Wiem że post pod postem ale ciągle mnie nurtuje ten problem :/
gigzorr
jak includujesz to daj w index.php na samej gorze session_start(); ob_start(); .
Adis92
w index.php też mam już podane.
tehaha
pokaż cały kod a nie takie skrawki, może dałeś 2 razy session_start(), daj na kilku etapach skryptu print_r($_SESSION); i zlokalizuj dokładnie miejsce, w którym tracisz dane to znajdziesz problem
Adis92
  1. <?php
  2. ?>
  3. <h1>Konto</h1>
  4.  
  5. <div id="haslo">
  6. <?php
  7. /* Function */
  8. include("includes/funkcje.php");
  9. /* End Function */
  10.  
  11. /* Database connection */
  12. include("includes/db.inc.php");
  13.  
  14. $connection = mysql_connect($host, $user, $password)
  15. or die("".$obrazek. "<h5>Brak połączenia z serverem MySQL</h5>");
  16. $db = mysql_select_db($baza, $connection)
  17. or die("".$obrazek. "<h5>Brak połączenia z bazą danych</h5>");
  18. /* End Database connection */
  19.  
  20. if($_SERVER['REQUEST_METHOD']== 'GET'){
  21.  
  22. ?>
  23. <form action="<?= $PHP_SELF ?>" method="POST">
  24.  
  25. <div id="account_menu">
  26. <input type="submit" class="dodaj" name="nowe" value="nowe" />
  27. <input type="submit" class="edycja" name="edycja" value="edycja" />
  28. <input type="submit" class="usun" name="usun" value="usuń" />
  29. </div>
  30.  
  31. <div id="account_table">
  32. <table class="table"">
  33. <tr class="first" style="background: #4babbf; color: #fff;">
  34. <td class="first" style="width: 15px; text-align: center;">#</td>
  35. <td style="width: 150px; padding: 0px 0px 0px 8px">Nazwa</td>
  36. <td style="width: 120px; padding: 0px 0px 0px 8px">Pozycja</td>
  37. <td style="width: 150px; padding: 0px 0px 0px 8px">Ostatnie logowanie</td>
  38. <td style="width: 40px; padding: 0px 1px 0px 1px">Aktywne</td>
  39. <td class="last" style="width: 40px; padding: 0px 0px 0px 2px">Status</td></tr>
  40. <?php
  41. /* Select base */
  42. if($db){
  43. $tabelka = mysql_query("SELECT * FROM uzytkownicy");
  44. } else echo "Blad wyboru Bazy!";
  45. /* End select base */
  46.  
  47. if($tabelka){
  48. while($dane = mysql_fetch_assoc($tabelka)){
  49.  
  50. $aktywne = $dane['aktywne'];
  51. $status = $dane['status'];
  52. $ostatnie_logowanie = data_pl($dane['ostatnie_logowanie']);
  53.  
  54. if($aktywne == 0){
  55. $aktywne = "<img src='images/icon/cross.png' title='brak aktywacji' alt='NIE' />";
  56. }elseif($aktywne == 1){
  57. $aktywne = "<img src='images/icon/accept.png' title='aktywowane' alt='TAK' />";
  58. }
  59.  
  60. if($status == 0){
  61. $status = "<img src='images/icon/cross.png' title='wylogowany' alt='wylogowany' />";
  62. }elseif($status == 1){
  63. $status = "<img src='images/icon/accept.png' title='zalogowany' alt='zalogowany' />";
  64. }
  65.  
  66. echo "<tr class='last''>
  67. <td class='first' style='text-align: center;'><input type='checkbox' name='zaznacz[".$dane['id']."]' value='".$dane['id']."' /></td>
  68. <td style='padding: 0px 0px 0px 8px'>".$dane['nazwa']."</td>
  69. <td style='padding: 0px 0px 0px 8px'>".$dane['pozycja']."</td>
  70. <td style='text-align: center;'>".$ostatnie_logowanie."</td>
  71. <td style='width: 40px; text-align: center;'>".$aktywne."</td>
  72. <td class='last' style='text-align: center;'>".$status."</td></tr>";
  73. }
  74. }
  75. ?>
  76. </table>
  77. </div>
  78. </form>
  79. <?php
  80.  
  81. }elseif ($_SERVER['REQUEST_METHOD']== 'POST'){
  82.  
  83. if(!isset($_SESSION['wybor'])){
  84. $_SESSION['wybor'] = array();
  85. }
  86.  
  87. $_SESSION['wybor'] = $_POST['zaznacz'];
  88.  
  89. if(isset($_POST['tak'])){
  90.  
  91. print_r($_SESSION['wybor']);
  92.  
  93. foreach((array)$_SESSION['wybor'] as $id){
  94. $ins = @mysql_query("DELETE FROM uzytkownicy WHERE id=$id") or die("MySQL ERROR: ".mysql_error());
  95. }
  96.  
  97. if($ins){
  98.  
  99. echo '<div id="ok"><br />
  100. konto zostało usunięte poprawnie!
  101. </div>';
  102.  
  103. unset($_SESSION['wybor']);
  104. }else{
  105.  
  106. echo '<div id="uwaga"><br />
  107. Wystąpił błąd podczas usuwania konta!
  108. </div>';
  109. }
  110. }
  111.  
  112. if(isset($_POST['usun'])){
  113.  
  114. if(isset($_SESSION['wybor'])){
  115. print_r($_SESSION['wybor']);
  116.  
  117. ?>
  118. <form action="" method="POST">
  119. <div id="uwaga">
  120. <br />Czy jestes pewien że chcesz usunąć wybrane konta?<br />
  121. <input type="submit" class="pyt" name="tak" value="Tak" />
  122. <a href='java script:history.back()'><input type="button" class="pyt" name="nie" value="Nie" /></a>
  123. </div>
  124. </form>
  125. <?php
  126. }else echo '<div id="uwaga"><br />Nie wybrałeś żadnego konta do usunięcia!</div>';
  127. }
  128.  
  129. if(isset($_POST['edycja'])){
  130.  
  131. }
  132.  
  133. if(isset($_POST['nowe'])){
  134.  
  135. ?>
  136.  
  137. <form action="<?= $PHP_SELF ?>" method="POST">
  138.  
  139. <div id="account_menu">
  140. <input type="submit" class="nowy" name="submit" value="dodaj" />
  141. <a href='java script:history.back()'><input type="button" class="usun" value="anuluj" /></a>
  142. </div>
  143.  
  144. <div id="uwaga">
  145. <br />Pola oznaczone * muszą zostać wypełnione!
  146. </div>
  147.  
  148. <table class="account_create">
  149. <tr><td>Nazwa*:</td><td>
  150. <input type="text" name="nazwa" tabindex="1" /></td></tr>
  151.  
  152. <tr><td>E-mail*:</td><td>
  153. <input type="text" name="email1" tabindex="2" /></td>
  154. <td>Powtórz e-mail*:</td><td>
  155. <input type="text" name="email2" tabindex="3" /></td></tr>
  156.  
  157. <tr><td>Stare hasło*:</td><td>
  158. <input type="password" name="old_pass" tabindex="4" /></td></tr>
  159. <tr><td>Hasło*:</td><td>
  160. <input type="password" name="haslo1" tabindex="4" /></td>
  161. <td>Powtórz hasło*:</td><td>
  162. <input type="password" name="haslo2" tabindex="5" /></td></tr>
  163.  
  164. <tr><td>Pozycja*:</td><td>
  165. <select name="pozycja" tabindex="6" />
  166. <option value="Adminnistrator">Administrator
  167. <option value="Redaktor">Redaktor
  168. </select></td></tr>
  169.  
  170. <tr><td>Kod potwierdzający*:</td><td>
  171. <input type="text" name="kod" tabindex="7" /></td>
  172. <td><img src="includes/image.php" style="margin: 0px -20px 0px 20px" id="image" alt=""></td>
  173. <td><a href="#" onclick="document.getElementById('image').src='includes/image.php?'+Math.random()*1000000;return!1;">
  174. <img src="images/icon/reload.png" alt="Refresh" style="margin: 0px 0px 0px -170px"/></a> </td></tr>
  175. </table>
  176.  
  177. </form>
  178. <?php
  179. }
  180.  
  181. $nazwa = $_POST['nazwa'];
  182. $email1 = $_POST['email1'];
  183. $email2 = $_POST['email2'];
  184. $haslo1 = mysql_escape_string(md5($_POST['haslo1']));
  185. $haslo2 = mysql_escape_string(md5($_POST['haslo2']));
  186. $pozycja = $_POST['pozycja'];
  187. $data_dodania = time();
  188. $pass = $_POST['kod'];
  189. $blad = "<a href='java script:history.back()'><< Powrót</a>";
  190.  
  191. function passcheck($pass) {
  192. $nr = floor(time() / 3600);
  193. for($i = 0; $i < strlen($pass); $i++)
  194. if($i % 2 == 0) $a .= $pass[$i]; else $b .= $pass[$i];
  195. $a = base_convert(strrev($a), 36, 10);
  196. $b = base_convert($b, 36, 10);
  197. if($a + $b <= $nr && $a + $b >= $nr - 2) return true;
  198. return false;
  199. }
  200.  
  201. function verifyEmail($email) {
  202.  
  203. $wholeexp = '/^(.+?)@(([a-z0-9\.-]+?)\.[a-z]{2,5})$/i';
  204. $userexp = "/^[a-z0-9\~\\!\#\$\%\&\(\)\-\_\+\=\[\]\;\:\'\"\,\.\/]+$/i";
  205.  
  206. if (preg_match($wholeexp, $email, $regs)) {
  207. $username = $regs[1];
  208. $host = $regs[2];
  209.  
  210. if (checkdnsrr($host, MX)) {
  211. if (preg_match($userexp, $username)) {
  212. return true;
  213. } else { return false; }
  214. } else { return false; }
  215. } else { return false; }
  216.  
  217. }
  218.  
  219.  
  220. if(isset($_POST['submit'])){
  221.  
  222. if($nazwa and $haslo1 and $haslo2 and $email1 and $email2 and $pozycja and $pass) {
  223.  
  224. if(!sprawdzenie($nazwa)){
  225.  
  226. if($haslo1 == $haslo2){
  227.  
  228. if($email1 == $email2){
  229.  
  230. if(passcheck($pass) == true){
  231.  
  232. if($email1){
  233.  
  234. $query = mysql_query("INSERT INTO uzytkownicy SET nazwa='$nazwa', haslo='$haslo1', email='$email1', pozycja='$pozycja', data_dodania='$data_dodania'") or die("MySQL ERROR: ".mysql_error());
  235.  
  236. $ip = $_SERVER['REMOTE_ADDR'];
  237.  
  238. if($query) echo "<p class='info'><br>Konto o nazwie ".$_POST['nazwa']." zostało utowrzone poprawnie. <br>
  239. <br>Twoje Ip to: ".$ip."<br><br><a href='?ids=konto'>Powrót</a><br><br></p>";
  240.  
  241. else echo "<p class='info'>".$obrazek."Błąd! Nie udało się wysłać wiadomosci<br><br></p>";
  242.  
  243. mysql_close($connection);
  244.  
  245. }else echo "<p class='info'>".$obrazek."<br>Email jest niepoprawny!!!<br>".$blad."<br><br></p>";
  246.  
  247. }else echo "<p class='info'>".$obrazek."Kod z obrazka jest nie poprawny !!!<br>".$blad."<br><br></p>";
  248.  
  249. }else echo "<p class='info'>".$obrazek."Emaile są różne!!! Popraw to!<br>".$blad."<br><br></p>";
  250.  
  251. }else echo "<p class='info'>".$obrazek."Hasła są różne!!! Popraw to!<br>".$blad."<br><br></p>";
  252.  
  253. }else echo "<p class='info'>".$obrazek."Podana nazwa już istnieje w bazie!<br>".$blad."<br><br></p>";
  254. } else echo "<p class='info'>".$obrazek."Uzupełnij wszystkie pola<br>".$blad."<br><br></p>";
  255.  
  256. }}?>
  257. </div>
  258. <?php
  259. ?>

Dodam że wszystkie sesje są tylko traci wartości tej jednej.
muk4
linia 105:
  1. unset($_SESSION['wybor']);

Może dlatego?
Adis92
Raczej nie ponieważ to dopiero się wykona gdy prawidłowo zostanie wykonana zmienna $ins lecz w tym momencie wyskakuje zawartość else. Do poprawnego wykonania zmiennej $ins jest potrzebna zawartość przechowywana w sesji, a właśnie w tym jest problem że sesja jest pusta.
muk4
  1. $_SESSION['wybor'] = $_POST['zaznacz'];
  2. //DEBUG START
  3. var_dump($_SESSION['wybor']);
  4. var_dump($_POST['zaznacz']);
  5. //DEBUG STOP
  6. if(isset($_POST['tak'])){
  7. print_r($_SESSION['wybor']);


Podmień na ten kod i wklej na forum co wywala.
I wywal @ przy
  1. $ins = @mysql_query("DELETE FROM uzytkownicy WHERE id=$id") or die("MySQL ERROR: ".mysql_error());

Może pokazuje jakiś istotny błąd.
Adis92
Kod
array(2) { [14]=>  string(2) "14" [15]=>  string(2) "15" } array(2) { [14]=>  string(2) "14" [15]=>  string(2) "15" } Array ( [14] => 14 [15] => 15 )

To wywaliło a gdy wszedłem w instrukcję if(isset($_POST['tak']))
Kod
NULL NULL

Wychodzi na to że w pewnym momencie nagle znikają nie wiadomo dlaczego.
muk4
Co ty mówisz. Przecież pokazuje, że $_SESSION['wybor'] jest tablicą z polami:
14 => 14
15 => 15

To ci wypluło
Kod
array(2) { [14]=>  string(2) "14" [15]=>  string(2) "15" } array(2) { [14]=>  string(2) "14" [15]=>  string(2) "15" } Array ( [14] => 14 [15] => 15 )


var_dump dla $_SESSION['wybor']:
Kod
array(2) { [14]=>  string(2) "14" [15]=>  string(2) "15" }

var_dump dla $_POST['zaznacz'] (to samo):
Kod
array(2) { [14]=>  string(2) "14" [15]=>  string(2) "15" }

print_r dla $_SESSION['wybor'] (to samo co wyzej tylko bez typów):
Kod
Array ( [14] => 14 [15] => 15 )


Nic nie znika.
Adis92
No tak ale później gdy dochodzi do tego miejsca
  1. if(!isset($_SESSION['wybor'])){
  2. $_SESSION['wybor'] = array();
  3. }
  4.  
  5. $_SESSION['wybor'] = $_POST['zaznacz'];
  6.  
  7. if(isset($_POST['tak'])){
  8.  
  9. print_r($_SESSION['wybor']);
  10.  
  11. foreach((array)$_SESSION['wybor'] as $id){
  12. $ins = @mysql_query("DELETE FROM uzytkownicy WHERE id=$id") or die("MySQL ERROR: ".mysql_error());
  13. }
  14.  
  15. if($ins){
  16.  
  17. echo '<div id="ok"><br />
  18. konto zostało usunięte poprawnie!
  19. </div>';
  20.  
  21. unset($_SESSION['wybor']);
  22. }else{
  23.  
  24. echo '<div id="uwaga"><br />
  25. Wystąpił błąd podczas usuwania konta!
  26. </div>';
  27. }
  28. }
  29.  

to już są wartości NULL
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.