Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Zczytanie zmiennej z innego pliku
Forum PHP.pl > Forum > Przedszkole
albercik1983
Witam smile.gif
mam kod w pliku "glowna.php"

  1. $numer =mysql_result(mysql_query("SELECT user_id FROM user WHERE user_login='".mysql_real_escape_string($_POST['login'])."'"),0);
  2. $nazwa_pliku="user/".$numer."/temp.txt";
  3. $a=fopen($nazwa_pliku, "rb");
  4. $temp = file($a, filesize($nazwa_pliku));
  5. fclose($a);

niby powinno działać, ale "$_POST['login']" jest w pliku "index.php".
Da się jakoś zczytać ten "$_POST['login']" z "index.php" do "glowna.php", czy musze przerobić kod i wrzucić wszystko do "index.php" questionmark.gif smile.gif
Foxx
Możesz przerobić kod i umieścić go w pliku index.php albo przekazać zmienną $_POST['login'] z index.php do glowna.php za pomocą sesji albo tablicy $_GET.
albercik1983
a przy użyciu sesji jak to będzie?
Foxx
W pliku index.php oraz glowna.php inicjujesz zmienną za pomocą session_start()" title="Zobacz w manualu PHP" target="_manual, w pliku index.php do tablicy sesyjnej $_SESSION dodajesz zmienną, którą chcesz przekazać:
  1. <?php
  2. $_SESSION['login'] = $_POST['login'];
  3. ?>

Od teraz zmienna $_SESSION['login'] jest też dostępna w pliku glowna.php i w każdym innym, w którym zainicjujesz sesję.
albercik1983
też tak myślałem, ale chyba coś źle robię bo w pliku "index.php" mam

Kod
[/b]session_start();
  session_register("zalogowany");
session_register("login");
  
  if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  
  mysql_connect("localhost", "root", "")or die("Nie można nawiązać połączenia z bazą");
  mysql_select_db("user")or die("Wystąpił błąd podczas wybierania bazy danych");
  
  jakiś tam kod
  if($_SESSION["zalogowany"]!=1){
      if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
  if(mysql_num_rows(mysql_query("select * from user where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars($_POST["haslo"])."'")))
  {
  $_SESSION["zalogowany"]=1;
  $_SESSION['login'] = $_POST['login'];
  }
  else $_SESSION["zalogowany"]=0;
  
  [b]


a w "glowna.php" mam

Kod
session_start();
  session_register("zalogowany");
[/b][b] session_register("login");[/b]
[b]  
  if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  
  $_SESSION['login'] = $_POST['login'];
  
  mysql_connect("localhost", "root", "")or die("Nie można nawiązać połączenia z bazą");
  mysql_select_db("user")or die("Wystąpił błąd podczas wybierania bazy danych");
  [/b][b]


i wyskakuje błąd:
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 3 in C:\Program Files\WebServ\httpd\serwis\glowna.php on line 28

Warning: fopen(user//temp.txt) [function.fopen]: failed to open stream: No such file or directory in C:\Program Files\WebServ\httpd\serwis\glowna.php on line 30

Warning: filesize() [function.filesize]: stat failed for user//temp.txt in C:\Program Files\WebServ\httpd\serwis\glowna.php on line 31

Warning: fclose(): supplied argument is not a valid stream resource in C:\Program Files\WebServ\httpd\serwis\glowna.php on line 32


Foxx
Przede wszystkim ta linijka:
  1. <?php
  2. $_SESSION['login'] = $_POST['login'];
  3. ?>

Ma się znajdować tylko w pliku index.php, w pliku główna.php jej nie ma. W pliku index.php umieszczasz ją w tablicy $_SESSION, która 'przetrwa' przejście na inną podstronę i będzie dostępna. Zmień to i sprawdź. Używaj poprawnego bbcode (znaczniki php a nie code i niepogrubione bo ciężko się czyta). Wklejasz tylko wycinek pliku glowna.php a te błędy dotyczą linii 20 - 30 i wydają się niezbyt związane z istotą zagadnienia, o którym rozmawiamy.
InosU31
a nie da sie tego zrobic za pomoca instrukcji include badz require questionmark.gif

"Warning: fopen(user//temp.txt) [function.fopen]: failed to open stream: No such file or directory in C:\Program Files\WebServ\httpd\serwis\glowna.php on line 30"

jesli user to katalog to nie masz za duzo / questionmark.gif

Pozdrawiam
Foxx
~InosU31 - teoretycznie można, ale proponuję się skupić na rozwiazaniu, które jest standardem. Include jest odpowiednikiem umieszczenia wszystkiego w 1 pliku - czasami to jest niemożliwe, najczęściej niepożądane.
albercik1983
może dam całe:

  1. <?php
  2. session_register("zalogowany");
  3. if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  4. if(empty($_SESSION["login"]))$_SESSION["login"]=0;
  5. mysql_connect("localhost", "root", "")or die("Nie można nawiązać połączenia z bazą");
  6. mysql_select_db("user")or die("Wystąpił błąd podczas wybierania bazy danych");
  7.  
  8. echo "<html>
  9. <HEAD>
  10. <link rel='Stylesheet' type='text/css' href='style.css' />
  11. <meta http-equiv='Content-Language' content='pl'>
  12. <meta http-equiv='Content-Type' content='text/html; charset=windows-1250'>
  13.    <META http-equiv='Pragma' content='no-cache'>
  14.    <META http-equiv='Expires' content='Tue, 1 Jan 1980 12:00:00 GMT'>
  15.    <META http-equiv='Cache-Control' content='no-cache'>
  16. <meta name='author' content='G. W.'>
  17. <title>Moja strona</title>
  18.  </HEAD>
  19. <body bgcolor='FFCC99'>";
  20.  
  21. function ShowLogin($komunikat=""){
  22.    echo "$komunikat<br>";
  23.    echo "<form action='index.php' method=post>";
  24.    echo "<div id='formt'>Login:</div> <div id='formi'><input type=text name=login></div>";
  25.    echo "<div id='formt'>Hasło:</div> <div id='formi'><input type=password name=haslo></div>";
  26.    echo "<input type=submit value='Zaloguj!'>";
  27.    echo "</form>";
  28.    echo "<a href='rejestracja.php'>Zarejestruj się</a>";
  29. }
  30.  
  31. $_SESSION["zalogowany"]=0;
  32.  
  33.  
  34. if($_SESSION["zalogowany"]!=1){
  35.    if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
  36. if(mysql_num_rows(mysql_query("select * from user where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars($_POST["haslo"])."'")))
  37. {
  38. $_SESSION["zalogowany"]=1;
  39. $_SESSION['login'] = $_POST['login'];
  40. }
  41. else $_SESSION["zalogowany"]=0;
  42. }
  43. }
  44.  
  45. if($_SESSION["zalogowany"]==1)
  46. {
  47. echo "<div id='naglowek'><a href='index.php'>Wyloguj się</a></div>
  48.        <div id='menu'>
  49.        <a class='item' href='glowna.php' title='Link do strony głównej serwisu'>Strona Główna</a>
  50.        <a class='item' href='index.php?profil=tak' title='Twój profil'>Twój profil</a>
  51.        <a class='item' href='link' title='opis'>menu2</a>
  52.        <a class='item' href='link' title='opis'>menu3</a>
  53.        <a class='item' href='link' title='opis'>menu4</a>
  54.        </div>
  55.        <div id='tekst'>a to ma byc z boku<br>jest z boku?<br><br><br><br><br><br><br><br><br><br><br>To dobrze...</div>";
  56.  
  57. }
  58.     else echo "<div id='naglowek'>Witamy w serwisie</div>
  59.     <div id='tekst'>Musisz być zalogowany, aby uzyskać dostęp do serwisu...</div>";
  60.  
  61. if ($_SESSION["zalogowany"]==0) {
  62. echo ShowLogin("Logowanie do serwisu");
  63. }
  64.  
  65. if ($_SESSION["zalogowany"]==1) {
  66. $dana=1;
  67. $numer =  mysql_result(mysql_query("SELECT user_id FROM user WHERE user_login='".mysql_real_escape_string($_POST['login'])."'"),0);
  68. fopen("user/".$numer."/temp.txt", "a");
  69. $fp = fopen("user/".$numer."/temp.txt", "a");
  70. flock($fp, 2);
  71. fwrite($fp, $dana);
  72. flock($fp, 3);
  73. fclose($fp);    
  74. }
  75.  
  76.  
  77. echo "</body></html>";
  78. ?>


glowna.php

  1. <?php
  2. session_register("zalogowany");
  3.  
  4.  
  5. mysql_connect("localhost", "root", "")or die("Nie można nawiązać połączenia z bazą");
  6. mysql_select_db("user")or die("Wystąpił błąd podczas wybierania bazy danych");
  7.  
  8. echo "<html>
  9. <HEAD>
  10. <link rel='Stylesheet' type='text/css' href='style.css' />
  11. <meta http-equiv='Content-Language' content='pl'>
  12. <meta http-equiv='Content-Type' content='text/html; charset=windows-1250'>
  13.    <META http-equiv='Pragma' content='no-cache'>
  14.    <META http-equiv='Expires' content='Tue, 1 Jan 1980 12:00:00 GMT'>
  15.    <META http-equiv='Cache-Control' content='no-cache'>
  16. <meta name='author' content='G. W.'>
  17. <title>Moja strona</title>
  18.  </HEAD>
  19. <body bgcolor='FFCC99'>";
  20.  
  21.  
  22.  
  23.  
  24. $numer =mysql_result(mysql_query("SELECT user_id FROM user WHERE user_login='".mysql_real_escape_string($_POSt['login'])."'"),0);
  25. $nazwa_pliku="user/".$numer."/temp.txt";
  26. $a=fopen($nazwa_pliku, "rb");
  27. $temp = file($a, filesize($nazwa_pliku));
  28. fclose($a);
  29.  
  30. if ($temp==1) {
  31.  
  32.        echo "<div id='naglowek'><a href='index.php'>Wyloguj się</a></div>
  33.        <div id='menu'>
  34.        <a class='item' href='glowna.php' title='Link do strony głównej serwisu'>Strona Główna</a>
  35.        <a class='item' href='index.php?profil=tak' title='Twój profil'>Twój profil</a>
  36.        <a class='item' href='link' title='opis'>menu2</a>
  37.        <a class='item' href='link' title='opis'>menu3</a>
  38.        <a class='item' href='link' title='opis'>menu4</a>
  39.        </div>
  40.        <div id='tekst'>a to ma byc z boku<br>jest z boku?<br><br><br><br><br><br><br><br><br><br><br>To dobrze...</div>";
  41.        }
  42.     else  echo "<div id='naglowek'>Witamy w serwisie</div>
  43.     <div id='tekst'>Musisz być <a href='index.php'>zalogowany</a>, aby uzyskać dostęp do serwisu...</div>";
  44.  
  45.  
  46. echo "</body></html>";
  47. ?>
  48.  
Foxx
1. Wywal to session_register()
2. Wyrzuć session_destroy(); z pliku index.php bo sesja i wszystkie zmienne przestają istnieć po tym poleceniu. A przecież używasz potem zmiennych z tablicy $_SESSION.
3. W pliku glowna.php nie używaj już tablicy $_POST bo jej tam nie ma. Skoro w index.php zrobiłeś sobie zmienną $_SESSION['login'] to korzystaj z tego:
  1. <?php
  2. $numer =mysql_result(mysql_query("SELECT user_id FROM user WHERE user_login='".mysql_real_escape_string($_POSt['login'])."'"),0); // źle
  3.  
  4. $numer =mysql_result(mysql_query("SELECT user_id FROM user WHERE user_login='".mysql_real_escape_string($_SESSION['login'])."'"),0); // dobrze
  5. ?>


4. Słowo o wyświetlaniu php + html:
  1. <?php
  2. echo "<div id='formt'>Login:</div>";
  3. echo '<div id="formt">Login:</div>'; // tak lepiej
  4. ?>

W przypadku takich dużych fragmentów tekstu naprawdę wygodniej wyjść z php a potem znowu wejść niż używać echo, nie rozumiem po co utrudniać sobie życie...
albercik1983
session_destroy() dałem, ponieważ był problem z wylogowaniem. (gdy wylogowałem się i wcisnąłem przycisk "wróć" byłem dalej zalogowany) i użyłem pliku "index.php" w linku do wylogowania. Dlatego robię "glowna.php", gdzie zczyta z "temp.txt" wpisaną wcześniej liczbą "1".

Zmieniłem w kodzie tak jak napisałeś i chyba zadziała, ale wyskoczył błąd

Warning: file() expects parameter 1 to be string, resource given in C:\Program Files\WebServ\httpd\serwis\glowna.php on line 26

gdzie linia 26 to

$temp = file($a, filesize($nazwa_pliku));

fragment wygląda tak

  1. <?php
  2. $numer =mysql_result(mysql_query("SELECT user_id FROM user WHERE user_login='".mysql_real_escape_string($_SESSION['login'])."'"),0);
  3. $nazwa_pliku="user/".$numer."/temp.txt";
  4. $a=fopen($nazwa_pliku, "rb");
  5. $temp = file($a, filesize($nazwa_pliku));
  6. fclose($a);
  7. ?>
Lion_87
bo chyba powinieneś dać nazwę pliku do file?
Foxx
Najpierw błąd.
Cytat
Warning: file() expects parameter 1 to be string, resource given

pierwszy parametr dla funkcji file() ma być łańcuchem znaków a podano coś innego
Otwierasz manual, funkcja file()" title="Zobacz w manualu PHP" target="_manual i czytasz:
Cytat
array file ( string $nazwa_pliku [, int $flagi [, resource $kontekst ]] )

Więc linia
  1. <?php
  2. $a=fopen($nazwa_pliku, "rb")
  3. ?>

jest niepotrzebna. Takie oczywistości musisz interpretować sam albo daleko nie zajdziesz.

Co do session_destroy - jeżeli kliniesz "wyloguj" to wtedy możesz sobie wykonać session_destroy() i mimo, że cofniesz się przeglądarką to i tak jesteś wylogowany. Można i temu zapobiec, poszukaj na forum.
W tamtym miejscu nie możesz dać session destroy bo potrzebujesz jeszcze tej sesji i koniec. A tego:
Cytat
Dlatego robię "glowna.php", gdzie zczyta z "temp.txt" wpisaną wcześniej liczbą "1".

nie rozumiem - ale źle to brzmi dry.gif
albercik1983
zrobiłem tak

  1. <?php
  2. $numer =mysql_result(mysql_query("SELECT user_id FROM user WHERE user_login='".mysql_real_escape_string($_SESSION['login'])."'"),0);
  3. $nazwa_pliku="user/".$numer."/temp.txt";
  4. $temp = fread(fopen($nazwa_pliku, 'r'), filesize($nazwa_pliku));
  5. ?>


a co do session_destroy, to chodzi mi o to, że jak na jakiejś podstronie kliknę przycisk "wyloguj" i dam wstecz to dalej jestem zalogowany. Dlatego na podstronach oprócz sprawdzenia czy $_SESSION["zalogowany"]==1, zczytuję z pliku "temp.txt" linię, która zapisała się tam przy zalogowaniu (teraz zamiast "1" dałem "tak" smile.gif ) Przy kliknięciu "wyloguj" dam session_destroy(), oraz usunę "tak" z "temp.txt" smile.gif )
Foxx
Sugeruję zrezygnowanie z takiego rozwiązania, niepotrzebnie komplikujesz.
Możesz w każdym pliku, który jest dostępny tylko dla zalogowanego sprawdzać na początku czy $_SESSION['zalogowany'] == 1 i jeżeli nie, za pomocą header() przekierować na stronę logowania.
albercik1983
Już tak próbowałem, ale to nie rozwiązało problemu z przyciskiem "wstecz".
zauważyłem jednak, że kiedy kliknie się w link do tej samej strony (nie "odświerz"), to tak się nie dzieje. Mógł bym po logowaniu wyświetlić "przejdź na stronę główną" i link, ale takie coś mi się nie podoba smile.gif
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.