Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] include dwa razy na stronie
Forum PHP.pl > Forum > Przedszkole
pijanyadmin
ogolneplik index.php

  1. <?php
  2.  
  3. if($_GET["id1"] == "start") include("start.php");
  4. else if($_GET["id1"] == "cos") include("cos.php");
  5. else if($_GET["id1"] == "ustawienia") include("ustawienia.php");
  6.  
  7. else if(!isset($_GET["id1"])) include("start.php");
  8. else include("404.php");
  9. ?>


i jest ok, wszystko działa jak trzeba, natomiast jeśli np. w pliku ustawienia.php mam:

  1. <?php
  2.  
  3. if($_GET["ust"] == "ogolne") include("ogolne.php");
  4. else if($_GET["ust"] == "test") include("test.php");
  5.  
  6. else if(!isset($_GET["ust"])) include("ogolne.php");
  7. else include("404.php");
  8. ?>


to już nic poza wczytaniem pliku "startowego" ogolne.php się nie wczytuje[test.php] w pliku ustawienia.php

dodam tylko iż strony includowane w index.php są w taki sposób (tutaj wczytuje ustawienia.php):

  1. <a href='panel.php?id1=ustawienia&amp;<?php echo IDUS; ?>'>Ustawienia</a>



czyli co robie źle że to includowanie nie działa w pliku zincludowanym? biggrin.gif
grzesiek_g
Cytat(adameq @ 21.01.2008, 18:29:56 ) *
  1. <a href='panel.php?id1=ustawienia&amp;<?php echo IDUS; ?>'>Ustawienia</a>

Nie wiem co masz dokładnie w stałej IDUS, ale może nie powinno być tak:
  1. <a href='panel.php?id1=ustawienia&amp;ust=<?php echo IDUS; ?>'>Ustawienia</a>
nevt
cytat z MANUALA
Cytat
Ponieważ include() i require() są specialnymi konstrukcjami językowymi, muszą być umieszczone w instrukcji grupującej, aby mogły działać w instrukcji warunkowej.

czyli nie
  1. <?php
  2. if($costam==$cosinnego) include('costam.inc');
  3. ?>

tylko
  1. <?php
  2. if($costam==$cosinnego) { include('costam.inc') }
  3. ?>
nospor
Cytat
Ponieważ include() i require() są specialnymi konstrukcjami językowymi, muszą być umieszczone w instrukcji grupującej, aby mogły działać w instrukcji warunkowej.
Jakieś kolejne bzdurne tlumaczenie manuala na polski.
Chyba ze nevt masz jakies praktyczne doswiadczenia potwierdzające ten tekst?

ps: zajrzyj do oryginalnej strony nie tlumaczonej
nevt
Cytat
Jakieś kolejne bzdurne tlumaczenie manuala na polski.

niestety nie jakieś tam, tylko wprost ze stronki http://pl2.php.net/manual

masz rację nospor - nie trzeba klamerek - w oryginale nie ma na ten temat ani słowa... dodatkowo sprawdziłem - z klamerkami czy bez - działa tak samo - jednak człowiek uczy się przez całe życie smile.gif pozdrawiam.
nospor
Cytat
niestety nie jakieś tam, tylko wprost ze stronki http://pl2.php.net/manual
To ja wiem, dlatego dopisalem bys sprawdzil w oryginale. A pisze "jakieś tam", gdyż niestety poziom polskiego tłumaczenia momentami odbiega od jakiegokolwiek poziomu. Tak jakby bylo tlumaczone po ostro zakrapianej imprezie. Teksty normalnie z kosmosu. To nie pierwsza taka wpadka.
pijanyadmin
IDUS:
  1. <?php
  2. $_SESSION['idu'] = md5(rand() + rand());
  3. ?>


Niestety po zmianach jakie polecaliście nadal nie działa...

przykładowo adres w przeglądarce:

Kod
panel.php?id1=ustawienia&idu=62b28182b83633063dce8f64ab170426


za jego wczytanie odpowiadają:

Kod
<a href='panel.php?id1=ustawienia&amp;<?php echo IDUS; ?>'>Ustawienia</a>


  1. <?php
  2. else if($_GET["id1"] == "ustawienia") { include("ustawienia.php");}
  3. ?>


i wszystko jest ok w innych przypadkach, jednak nie moge includować nic w pliku ustawienia.php

plik "startowy" wczytuje się bez problemu:

  1. <?php
  2. else if(!isset($_GET["ust"])) { include("ogolne.php");}
  3. ?>


jednak jeśli chciałbym coś wczytać innego to już nie daje rady:

  1. <?php
  2. else if($_GET["ust"] == "oe") { include("oe.php");}
  3. ?>


link w ustawieniach.php do wczytywania wygląda tak:

Kod
<a href='panel.php?ust=oe&amp;<?php echo IDUS; ?>'>ogólne</a>


albo tak i też jest źle

Kod
<a href='panel.php?ust=oe&amp;<?php echo IDUS; ?>'>ogólne</a>
kszychu
Wszystko masz w jednej lokalizacji, czy porozrzucane w różnych katalogach?
pijanyadmin
panel.php i ustawienia.php są w tym samym katalogu, reszta tzn. pliki które mają być wczytywane przez ustawienia.php są w osobnym katalogu
potreb
  1. <?php
  2. $_SESSION['idu'] = md5(rand() + rand());
  3. ?>


A skąd pobierasz zmienną idus? O ile to zmienna bo skoro masz echo idus to co ci wyświetla?
<a href='panel.php?id1=ustawienia&amp;<?php echo IDUS; ?>'>Ustawienia</a>

A nie można tak?
<a href='panel.php?id1=ustawienia&amp;<?php echo $_SESSION['idu']; ?>'>Ustawienia</a>

Możesz spróbować zrobić to przez switcha, wg mnie będzie to bardziej czytelne.
pijanyadmin
  1. <?php
  2.  
  3. require_once("connect.php");
  4.  
  5.  
  6.  
  7. function logon() {
  8.  
  9.  if(isset($_POST['user']) && isset($_POST['pass'])) {
  10. $login = htmlspecialchars($_POST['user']);
  11. $haslo = md5(htmlspecialchars($_POST['pass']));
  12. $q = mysql_query("SELECT * FROM userdata WHERE haslo = '$haslo' AND login = '$login' LIMIT 1");
  13.  
  14.  if(!mysql_num_rows($q)) {
  15.  
  16. echo 'Niepoprawne Login lub Hasło'; exit;
  17.  
  18. return 0;
  19. }
  20.  
  21. $_SESSION['logon'] = 1;
  22. $_SESSION['login'] = $_POST['user'];
  23. $_SESSION['password'] = $_POST['pass'];
  24. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  25. $_SESSION['idu'] = md5(rand() + rand());
  26.  
  27. return 1;
  28. }
  29.  
  30.  
  31.  
  32.  if(!isset($_SESSION['logon']) || !isset($_SESSION['login']) || !isset($_SESSION['password']) || !isset($_SESSION['ip']) || !isset($_SESSION['idu'])) {
  33. // echo "3";
  34. return 0;
  35. }
  36.  
  37. $login = $_SESSION['login'];
  38. $password = $_SESSION['password'];
  39. $idu = $_SESSION['idu'];
  40. $ip = $_SESSION['ip'];
  41.  
  42. if($_SERVER['REMOTE_ADDR'] != $ip) {
  43. // echo "4";
  44. return 0;
  45. }
  46.  
  47.  
  48.  
  49.  if($_GET['idu'] != $_SESSION['idu']) {
  50.  
  51. return 0;
  52. } 
  53. else {
  54. return 1;
  55. }
  56.  
  57. }
  58.  
  59.  
  60.  
  61. function movetosite($strona) {
  62. echo "
  63. <script LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\"
  64. window.location.replace(\"$strona\"); 
  65. </SCRIPT>";
  66. }
  67.  
  68. function resetsession() {
  69. $_SESSION['login'] = '';
  70. $_SESSION['password'] = '';
  71. $_SESSION['logon'] = '';
  72.  unset($_SESSION['login']);
  73.  unset($_SESSION['password']);
  74.  unset($_SESSION['logon']);
  75.  unset($_SESSION);
  76. }
  77.  
  78. ?>


każda inna forma linku powoduje wylogowanie [zgubienie sesji]
potreb
A session_start(); masz dodane na początku pliku index.php

Czytałeś mojego ostatniego posta, skoro używasz IDUS to gdzie masz?

define("IDUS", "".$_SESSION['idu']."");
pijanyadmin
tak mam w index.php

Kod
session_start();
define("IDUS", "idu=".$_SESSION['idu']);
potreb
Sesje zapamiętuje, ale ciężko coś zrozumieć z tego kodu i co chcesz osiągnąć przez to?
pijanyadmin
napisałem już to wcześniej, chciałbym po zincludowaniu pliku ustawienia.php który jest wczytywany w index.php zrobić tak aby w ustawienia.php było można includować inne pliki tak jak ma to miejsce w index.php
potreb
Sprawdź czy poprawnie przekazujesz zmienne. Np ręcznie wpisując do adresu &ust=ogolne lub inaczej. Możesz też zastosować switch w pliku ustawienia.
pijanyadmin
tylko że zabardzo nie wiem jak to mam zrobić:

  1. <?php
  2. switch($_GET['ust']) //id1 czy ust? biorac pod uwage ze switch bedziew ustawienia.php
  3. {
  4. case 'dodaj': //
  5. echo 'Dodawanie danych';
  6. break;
  7. case 'edytuj':
  8. echo 'Edycja danych';
  9. break;
  10. default:
  11. echo 'Wyświetlenie danych';  
  12. }
  13. ?>
potreb
Teraz to sobie wywołasz adres tak:
<a href='index.php?ust=dodaj&amp;<?php echo IDUS; ?>'>Dodaj jakiś rekord</a>
pijanyadmin
heh bajer polega na tym iż nic się nie zmienilo... jest tak samo jak w przypadku if...

ok, zrobiłem wszystko w osobnym pliku bez sesji i działa bez problemu, ale takie rozwiązanie nie jest mi potrzebne:

index.php:

  1. <a href='index.php?id1=ustawienia'>Ustawienia</a>
  2. <div id="content">
  3. <?php
  4.  
  5. if($_GET["id1"] == "start") { include("start.php");}
  6. else if($_GET["id1"] == "ustawienia") { include("ustawienia.php");}
  7. else if(!isset($_GET["id1"])) { include("start.php");}
  8. else { include("404.php");}
  9. ?>
  10. </div>


ustawienia.php

  1. <div class="xzxc"><a href='index.php?ust=dodaj'>Dodaj jakiś rekord</a> <a href='index.php?ust=edytuj'>edytuj</a>| gry | ulubione strony</div>
  2.  
  3. <div class="costamdiv">
  4. <?php
  5.  
  6. switch($_GET['ust']) //id1 czy ust? biorac pod uwage ze switch bedziew ustawienia.php
  7. {
  8. case 'dodaj':
  9. echo 'Dodawanie danych';
  10. break;
  11. case 'edytuj':
  12. echo 'Edycja danych';
  13. break;
  14. default:
  15. echo 'Wyświetlenie danych';  
  16. }
  17. ?>
  18.  
  19.  
  20. </div>


i tutaj działa wszytko bez problemu tak jak bym chciał... ale jeśli upchne te pliki w sesji to... :x problem jest prawdopodobnbie z linkiem:

Kod
<a href='panel.php?ust=dodaj&amp;<?php echo IDUS; ?>'>Dodaj jakiś rekord</a>


wtedy zamiast wgrać się w pliku ustawienia.php "dodaj", strona zostaje przekierowana do panel.php i wczytana tamtejsza "startowa" ;/
kresh
Sprawdź sobie wartości zmiennych przed tymi wszystkimi warunkami:
  1. <?php
  2. echo "<pre>";
  3. print_r( $_GET );
  4. echo "</pre>";
  5. ?>


najszybszy sposób żeby zlokalizować gdzie coś jest nie tak.

BTW: a co masz w panel.php?
pijanyadmin
wartość zmiennych w ustawienia.php:

Kod
Array
(
    [id1] => ustawienia
    [idu] => 5d5431a1551541120fed08a2f196b08f
)


panel.php wygląda tak:

  1. <?php
  2. require_once("functions.php");
  3. require_once("connect.php");
  4.  
  5. if(!logon()) {
  6. resetsession();
  7. movetosite('index.php?sdd=logowanie');
  8. exit();
  9. }
  10. define("IDUS", "idu=".$_SESSION['idu']);
  11.  
  12. $login = $_SESSION['login'];
  13.  
  14. $query = mysql_query("SELECT * FROM userdata WHERE login = '$login'");
  15. $dane = mysql_fetch_array($query);
  16. $login = $dane[login];
  17. $email = $dane[email];
  18. $data = $dane[data] 
  19.  
  20. ?>
  21. <a href='panel.php?id1=ustawienia&amp;<?php echo IDUS; ?>'>Ustawienia</a>
  22. <div id="content">
  23. <?php
  24.  
  25. if($_GET["id1"] == "start") { include("start.php");}
  26. else if($_GET["id1"] == "edit") { include("edycja.php");}
  27. else if($_GET["id1"] == "edi") { include("edi.php");}
  28. else if($_GET["id1"] == "wyszukaj") { include("wyszukane.php");}
  29. else if($_GET["id1"] == "ustawienia") { include("ustawienia.php");}
  30. else if(!isset($_GET["id1"])) { include("start.php");}
  31. else { include("404.php");}
  32. ?>
  33. </div>

ustawienia.php

  1. <a href='panel.php?ust=dodaj&amp;<?php echo IDUS; ?>'>Dodaj jakiś rekord</a>
  2. <div id="test">
  3. <?php
  4.  
  5. switch($_GET['ust']) //id1 czy ust? biorac pod uwage ze switch bedziew ustawienia.php
  6. {
  7. case 'dodaj': //
  8. echo 'Dodawanie danych';
  9. break;
  10. case 'edytuj':
  11. echo 'Edycja danych';
  12. break;
  13. default:
  14. echo 'Wyświetlenie danych';  
  15. }
  16. ?>
  17.  
  18. </div>
potreb
I jak działa już? Czy dalej nie możesz rozwiązać problemu.
pijanyadmin
nie działa ;/ i nie wiem co z tym jest... na bank jest coś z linkiem

Kod
<a href='panel.php?ust=ustawienia&amp;<?php echo IDUS; ?>'>Ustawienia</a>
potreb
A sprawdzałeś czy link działa jeżeli nie będzie zmiennej IDUS?

Z drugie strony mnie interesuje do czego jest ci potrzebna zmienna idus?
Spróbuj zamiast zdefiniowac zmienna za pomocą define np tak $idus = $_SESSION['idu'];
a link definiować np link&idu=".$idus."

I patrz także w źródło, bo jeżeli stosujesz link np w takie postaci <a href='aaa'> to dla znaczników html-owskich powinien byc przypisany tylko double quote
pijanyadmin
kombinowałem z różnymi ustawieniami i nic

zmienna idus jest do przypisania sesji, przynajmenij tak mi się wydaje, to stary skrypt który ktoś mi kiedyś napisał, nie znam się na sesjach

zmiana linku spowoduje zgubienie sesji i wylogowanie
potreb
  1. <?php
  2. require_once("connect.php");
  3.  
  4.  
  5.  
  6. function logon() {
  7.  
  8.  if(isset($_POST['user']) && isset($_POST['pass'])) {
  9. $login = htmlspecialchars($_POST['user']);
  10. $haslo = md5(htmlspecialchars($_POST['pass']));
  11. $q = mysql_query("SELECT * FROM userdata WHERE haslo = '$haslo' AND login = '$login' LIMIT 1");
  12.  
  13.  if(!mysql_num_rows($q)) {
  14.  
  15. echo 'Niepoprawne Login lub Hasło'; exit;
  16.  
  17. return 0;
  18. }
  19.  
  20. $_SESSION['logon'] = 1;
  21. $_SESSION['login'] = $_POST['user'];
  22. $_SESSION['password'] = $_POST['pass'];
  23. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  24.  
  25. return 1;
  26. }
  27.  
  28.  
  29.  
  30.  if(!isset($_SESSION['logon']) || !isset($_SESSION['login']) || !isset($_SESSION['password']) || !isset($_SESSION['ip'])) {
  31. // echo "3";
  32. return 0;
  33. }
  34.  
  35. $login = $_SESSION['login'];
  36. $password = $_SESSION['password'];
  37. $ip = $_SESSION['ip'];
  38.  
  39. if($_SERVER['REMOTE_ADDR'] != $ip) {
  40. // echo "4";
  41. return 0;
  42. }
  43.  
  44.  
  45.  
  46.  if($_SESSION['logon'] == "1") {
  47. return 1;
  48. } 
  49. else {
  50. return 0;
  51. }
  52.  
  53. }
  54.  
  55.  
  56.  
  57. function movetosite($strona) {
  58. echo "
  59. <script LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\"
  60. window.location.replace(\"$strona\"); 
  61. </SCRIPT>";
  62. }
  63.  
  64. function resetsession() {
  65. $_SESSION['login'] = '';
  66. $_SESSION['password'] = '';
  67. $_SESSION['logon'] = '';
  68.  unset($_SESSION['login']);
  69.  unset($_SESSION['password']);
  70.  unset($_SESSION['logon']);
  71.  unset($_SESSION);
  72. }
  73.  
  74. ?>


Teraz ma działać, jeżeli zalogowano sesja utworzy $_SESSION['logon'] = 1;
I jeżeli będzie się zgadzało to cię zapamięta. Przekazywanie w adresie jakiegoś ciągu nie jest potrzebne.
Sprawdzaj sobie czy sesja jest tworzona np echo $_SESSION['logon'];

Jeżeli zostanie utworzona to logowanie będzie podtrzymane.

Możesz też wysłać do sesji zakodowane hasło i porównać je z bazy.

Jeżeli się bezie zgadzało to będziesz zalogowany:
  1. <?php
  2. if($haslo == $_SESSION['haslo']){
  3. return 1;
  4. } esle {
  5. return 0;
  6. }
  7. ?>
pijanyadmin
1. po zamknieciu okna przeglądarki, lub karty sesja nadal istnieje
2. loguje się, panel.php, includowane są wszytkie pliki tak jak chce, jeśli includuje ustawienia.php to wczytają się bez problemu, ale nie mogę nadal w nim niczego wczytywać tak jak ma to miejsce w panel.php
3. wartość
Kod
echo $_SESSION['logon'];
zwraca 1

4. jeśli dam:

Kod
<a href='ustawienia.php?ust=dodaj'>Dodaj jakiś rekord</a>


plik jest wczytywany jako zawaertosc nowej strony a ma się includować w panel.php

Kod
<a href='panel.php?ust=dodaj'>Dodaj jakiś rekord</a>
zwraca wczytanie strony od nowa
potreb
<a href='panel.php?ust=dodaj'>Dodaj jakiś rekord</a>

A spróbuj tak:
<a href='panel.php?id1=ustawienia&ust=dodaj'>Dodaj jakiś rekord</a>

Jak sesja istnieje to się wyloguj to już nie będzie istniała!
pijanyadmin
o w końcu działa, dzięki... tylko jeszcze zostaje myk z zapamietaną sesją po zamknieciu karty/okna przeglądarki, chciałbym aby nie było konieczne wylogowanie, tylko automatycznie 
ygaśnięcie sesji po zamknieciu okna/karty przegladarki
potreb
Ehh, tyle zamieszania a nawet nie było powodu. Sesja po zamknięciu automatycznie powinna się skasować.

Zmień jeszcze to:
  1. <?php
  2. if(!mysql_num_rows($q)) {
  3. echo 'Niepoprawne Login lub Hasło'; exit;
  4. return 0;
  5. } else {
  6. $_SESSION['logon'] = 1;
  7. $_SESSION['login'] = $_POST['user'];
  8. $_SESSION['password'] = $_POST['pass'];
  9. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  10. return 1;
  11. }
  12. }
  13. ?>
pijanyadmin
ehh zmieniłem ale sesja nadal jest zapamietywana i jeśli ktoś zapamięta link "www.cos.pl/panel.php to zaloguje się bez problemu, a to nie jest zbyt bezpieczne winksmiley.jpg
potreb
Po 10 minutach sesja automatycznie wygasnie, wtedy strone przekieruje na index.php

  1. <?php
  2. require_once("connect.php");
  3. function logon() {
  4.  
  5.  
  6. $intTimeoutSeconds = 600;
  7.  
  8. if(isset($_SESSION['intLastRefreshTime']))
  9. {
  10. if(($_SESSION['intLastRefreshTime']+$intTimeoutSeconds)<time())
  11. {
  12. header('location: index.php');
  13.  
  14. // jezeli sesja nie bedzie podtrzymywana przez x sekund zostaniesz wylogowany
  15. // 10 minut ustawienie, wpis sobie np 10 sekund i sprawdz czy po odswiezeniu zosta
    niesz wylogowany
  16. }
  17. }
  18. $_SESSION['intLastRefreshTime'] = time();
  19.  
  20.  
  21.  if(isset($_POST['user']) && isset($_POST['pass'])) {
  22. $login = htmlspecialchars($_POST['user']);
  23. $haslo = md5(htmlspecialchars($_POST['pass']));
  24. $q = mysql_query("SELECT * FROM userdata WHERE haslo = '$haslo' AND login = '$login' LIMIT 1");
  25.  
  26.  if(!mysql_num_rows($q)) {
  27.  
  28. echo 'Niepoprawne Login lub Hasło'; exit;
  29.  
  30. return 0;
  31. }
  32.  
  33. $_SESSION['logon'] = 1;
  34. $_SESSION['login'] = $_POST['user'];
  35. $_SESSION['password'] = $_POST['pass'];
  36. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  37.  
  38. return 1;
  39. }
  40.  if(!isset($_SESSION['logon']) || !isset($_SESSION['login']) || !isset($_SESSION['password']) || !isset($_SESSION['ip'])) {
  41. // echo "3";
  42. return 0;
  43. }
  44.  
  45. $login = $_SESSION['login'];
  46. $password = $_SESSION['password'];
  47. $ip = $_SESSION['ip'];
  48.  
  49. if($_SERVER['REMOTE_ADDR'] != $ip) {
  50. // echo "4";
  51. return 0;
  52. }
  53.  
  54.  
  55.  
  56.  if($_SESSION['logon'] == "1") {
  57. return 1;
  58. } 
  59. else {
  60. return 0;
  61. }
  62.  
  63. }
  64. function movetosite($strona) {
  65. echo "
  66. <script LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\"
  67. window.location.replace(\"$strona\"); 
  68. </SCRIPT>";
  69. }
  70.  
  71. function resetsession() {
  72. }
  73.  
  74. ?>


Sesja utrzymuje sie przez 15 minut, dlatego wyloguj też jest potrzebne. Nawet po zamknięciu przegladarki sesja będzie zapamiętana.
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.