Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zmienna sesyjna, a zapytanie MYSQL
Forum PHP.pl > Forum > Przedszkole
sereknr1
Witam, dlaczego po przesłaniu formularzem jakiejkolwiek zmiennej, umieszczeniu jej w $_SESSION, a następnie w zapytaniu i po wybraniu wyniku, wynik jest prawidłowy, po kliknięciu w odnośnik "dalej", powyższy wynik jest również prawidłowy, a gdy kliknę w odnośnik "wstecz" wynik i zmienna $_SESSION zerują się i wyświetla mi się wówczas wynik wszystkich dostępnych tabel w MYSQL. Jak to naprawić? Kombinuję na różne sposoby, pozdrawiam!
Idea programu jest prosta i dotyczy sprawdzenia czy w bazie MYSQL istnieje już tabela o nazwie podanej w formularzu jeżeli tak to pokaż liczbę tych tabel (niemożliwe jest aby były co najmniej 2 takie same ale ....)
check_error_index.php
  1.  
  2. <!DOCTYPE html>
  3. <HTML lang="pl">
  4. <head>
  5. <meta charset= "UTF-8" />
  6. <title>Form</title>
  7. </head>
  8.  
  9. <body>
  10. <form action= "check_error.php" method= "post">
  11. <input type="text" name="name">
  12. <input type="submit" value="send">
  13. </form>
  14. </body>
  15. </HTML>


check_error.php
  1. <?php
  2. ?>
  3. <?php
  4.  
  5. $link = mysqli_connect("localhost", "root", "", "pomiar");
  6.  
  7. $name = $_POST['name'];
  8. $_SESSION['name'] = $name;
  9.  
  10. $status = true;
  11.  
  12. if ($link != $status) {
  13.  
  14. $status = false;
  15. echo '<p style = "color: red">'."Błąd połączenia: ".'</p>';
  16. echo "Status połączenia z db: ".$status.'<br />';
  17. exit();
  18. }else{
  19.  
  20. echo '<p style = "color: green">'."Udane połączenie z bazą".'</p>';
  21. echo "Status połączenia z db: ".$status.'<br />';
  22. }
  23.  
  24. if($link == true){
  25. $result = mysqli_query($link, "SHOW TABLES LIKE '$_SESSION[name]'");
  26.  
  27. $_SESSION['row_cnt'] = mysqli_num_rows($result);
  28.  
  29. echo("Ilość tabeli o tej samej nazwie: ".$_SESSION['row_cnt']);
  30. echo '<br />'.$_SESSION['row_cnt'].'<br />'.'<a href="check_error1.php">Dalej</a>';
  31. }else{
  32. echo "Błąd sprawdzenia";
  33. }
  34.  
  35.  
  36. ?>


check_error1.php
  1. <?php
  2. ?>
  3.  
  4. <?php
  5. echo $_SESSION['row_cnt'].'<br />'.'<a href="check_error.php">Cofnij</a>';
  6. ?>
  7.  
SmokAnalog
Spróbuj odświeżyć stronę po kliknięciu na "wstecz". A swoją drogą, po co trzymasz te dane w sesji? Moim zdaniem jeśli interesuje Cię widok określonej tabeli, to ten widok powinien mieć swój unikalny adres URL.
sereknr1
Hej, dzięki za odpowiedź, ten krótki programik to fragment całości. W oryginale faktycznie mam unikalne URL w pętli while. Napisałem ten krótki programik bo łatwiej mi nim manipulować. Te dane pcham do sesji bo w oryginale wchodzę sobie np. w tabele o nazwie aaa i w osobnej podstronie wyświetlam szczegóły tej tabeli wracając do strony głównej chciałbym abym aby ten stan był zapamiętany czyli

Po to Pan Bóg stworzył isset biggrin.gif Działa jak powinno biggrin.gif Banalne smile.gif

  1.  
  2. <?php
  3. ?>
  4. <?php
  5.  
  6. $link = mysqli_connect("localhost", "root", "", "pomiar");
  7.  
  8. @$name = $_POST['name'];
  9.  
  10. [b]if(isset($_POST['name'])){
  11. $_SESSION['name'] = $name; <---------- Gdy było bezpośrednio przypisanie zmiennej post do sesji to w jedną stronę działało, jednak jak byłeś
  12. na innej podstronie i chciałeś wrócić wówczas zmienna post traciła swój zasięg i przekazywała pustą zmienną do sesji. Dla potomnych :D
  13.  
  14. }[/b]
  15.  
  16. $status = true;
  17.  
  18.  
  19. if ($link != $status) {
  20.  
  21. $status = false;
  22. echo '<p style = "color: red">'."Błąd połączenia: ".'</p>';
  23. echo "Status połączenia z db: ".$status.'<br />';
  24. exit();
  25. }else{
  26.  
  27. echo '<p style = "color: green">'."Udane połączenie z bazą".'</p>';
  28. echo "Status połączenia z db: ".$status.'<br />';
  29. }
  30.  
  31. if($link == $status){
  32. $result = mysqli_query($link, "SHOW TABLES LIKE '$_SESSION[name]'");
  33.  
  34. $_SESSION['row_cnt'] = mysqli_num_rows($result);
  35.  
  36. echo("Ilość tabeli o tej samej nazwie: ".$_SESSION['row_cnt']);
  37. echo '<br />'.'<a href="check_error1.php">Dalej</a>';
  38. }else{
  39. echo "Błąd sprawdzenia";
  40. }
  41.  
  42.  
  43. ?>
  44.  
SmokAnalog
Nadal namawiam do zastanowienia się czy sesja jest na pewno odpowiednim miejscem dla takich danych (nie jest tongue.gif).
sereknr1
SmokAnalog a jak byś mógł swoją myśl bardziej rozwinąć ? smile.gif
SmokAnalog
Aplikacja webowa powinna uwzględniać wiele funkcjonalności przeglądarki, jak np. możliwość dodawania do zakładek. Kontekst treści można zawrzeć w adresie URL i to jest miejsce na ustalanie kontekstu. Dane w bazie danych z tabeli A to inny kontekst niż dane z tabeli B. Aplikacja powinna bez problemu pozwolić na dodawanie ich do zakładek i na swobodne poruszanie się w wielu otwartych kartach, które znają swój własny kontekst. Jeśli trzymasz aktualną tabelę w sesji, to tracisz możliwość wyświetlania wielu kontekstów jednocześnie i do powracania do nich.
sereknr1
Dzięki za radę, nie patrzyłem na to pod tym kontem, a faktycznie tak się stanie jak mówisz. Hmm, a jak myślisz można było by wykorzystać json do zapisania np. stanów zamiast URL? Jestem ciekaw jaki to dało by efekt. Czysto hipotetycznie!
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.