Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: logowanie - include()
Forum PHP.pl > Forum > Przedszkole
invx
napisaem skrypt do logowania mniej wiecej najwazniejejsza jego czesc wyglada tak:

login.php
[php:1:984db7506e]<?php
if($_GET[mode] == spr)
{
if(!isset($_POST[login]))
{
echo"Nie masz dostępu do tego modułu";
}

else
{
mysql_connect("127.0.0.1", "root", "krasnal") or die ("nie mozna polaczyc sie z baza");
mysql_select_db(rcx) or die ("nie mozna wybrac bazy");

session_start();

if($_POST['submit'])
{
$wyszukaj = mysql_query("SELECT * FROM users WHERE login='$_POST[login]' AND haslo='$_POST[pass]'");
$wynik = mysql_num_rows($wyszukaj);

if(empty($_POST[login]))
{
echo "nie podano loginu<br>";
}

if(empty($_POST[pass]))
{
echo "nie podano hasla<br>";
}


elseif($wynik == 1)
{
$_SESSION['log'] = $login;
}

elseif(isset($_POST[login]) && $_POST[pass])
{
echo "Niepoprawne dane";
}
}

if($_SESSION['log'])
{
/*Wstwaic ID*/ echo "Witaj <b>".$_SESSION['log']."</b> na stronie !<br><a href='form_login.php?mode=a_profil&id=$id'>aktualizuj swuj profil</a><br><a href=login.php?mode=wyloguj>wyloguj</a>";
}
}
}


elseif($_GET[mode] == wyloguj)
{
session_start();
unset($_SESSION['log']);
echo"zostales wylogowany kliknij aby powrucic <a href=login.php>TUTAJ</a>";
}

else
{
echo"
<form action=logowanie/login.php?mode=spr method='POST'>
Login:
<input type='text' name='login'>
Hasło:
<input type='text' name='pass'>
<input type='submit' name='submit' value='Zaloguj'>
</form>
...
?>[/php:1:984db7506e]

plik ten includuje do pliku head.inc.php, nastepnie plik head.inc.php do index.php. i tu pojawia sie problem, a nawet dwa:
1. po includzie, login.php do head.inc.php, a potem do index.php, url'e zmieniaja mi sie jak by byly z poziomu pliku index.php, czy nie da sie tego uniknac?? (ale z tym sobie poradzilem, zmieniajac po prostu url'e )
2. w index.php pojawia mi sie jak powinien formularz do logowania z pliku login.php, i po kliknieciu na ZALOGUJ, chce zeby w razie zaogowania, formularz zmienilo, na info ze zalogowalo, a teraz zamienia mi cala strone... w czym popelniam blad questionmark.gif
shima
Bazą jest plik, w którym includujesz. Oczywiście możesz sobie z tym poradzić. Sprawdzaj gdzie jesteś i dodawaj opowiednią część [manual:568cbe3655]dirname[/manual:568cbe3655]()
invx
8O to sie odnosi do pierwszego problemu czy drugiego, jak bys mogl janiej laugh.gif
shima
Cytat
8O to sie odnosi do pierwszego problemu czy drugiego, jak bys mogl janiej laugh.gif

@1: Jeżeli w index.php masz [php:1:23f1149328]<?php
include('katalog/plik.php')
?>[/php:1:23f1149328], a w plik.php znów dajesz include, to ścieżkę obliczasz z poziomu index.php, więc jeżeli ten drugi plik jest na tym samym poziomie co plik.php, to ścieżka nadal powinna być 'katalog/drugi.php' . Zawsze możesz zdefiniować sieżkę bazową i od niej obliczać ścieżkę do pliku. A nawet nie definiować. Dla informacji wywołaj sobie kod:
[php:1:23f1149328]<?php
print_r ($_SERVER);
?>[/php:1:23f1149328]
@2: To nie do końca rozumiem jak zmienia się strona, ale zastanów się, czy $_SESSION['log'] ma szansę być ustawiona. Może nie mam racji, ale przejrzałem kod pobieżnie. Uporządkuj go trochę, chyba sprawdzanie czy $_GET['mode'] jest równe spr i do tego czy ustawione jest $_POST['login'] to chyba o jedno za dużo. Po za tym sprawdzenie czy jesteś zalogowany nie ppowinno byc uzależnione od wypełnienia formularza.
invx
1. jak mam zdefiniowac ta sciezke ?
2. zaznaczylem ze to najwazniejsza czesc kodu, ale prosciej, jak zrobiz zeby po zalogowaniu, zamiast formularza pojawiala sie info o zalogowaniu, ale zeby reszta indexu zostala niezmieniona, oczywsicie z przeladowaniem. dla tego kodu co wkleilem.
shima
Cytat
1. jak mam zdefiniowac ta sciezke ?
2. zaznaczylem ze to najwazniejsza czesc kodu, ale prosciej, jak zrobiz zeby po zalogowaniu, zamiast formularza pojawiala sie info o zalogowaniu, ale zeby reszta indexu zostala niezmieniona, oczywsicie z przeladowaniem. dla tego kodu co wkleilem.


@1: w wersji najprostszej, wszystkie include dołączaj jakby były z poziomu index.php
@2: rozumiem, że login jest zaincludowany w index.php, nie przekierowywuj na login.php?mode=spr tylko na $_SERVER['PHP_SELF'] a zamiast $_GET['mode'] użyj $_POST['mode'] - zmienną mode daj jako pole ukryte formularza. I wyrzuć to session_start() gdzieś na początek (to już uwaga edycyjna).
invx
1. ale mam je w roznych katalogach. nie moge ich dac na jeden poziom
2. zmienilem i blad wywala
Kod
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:usrkrasnalwwwrcx-portalindex.php:14) in c:usrkrasnalwwwrcx-portallogowanielogin.php on line 15



Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:usrkrasnalwwwrcx-portalindex.php:14) in c:usrkrasnalwwwrcx-portallogowanielogin.php on line 15

a na dole pokazuje ze zalogowalo mnie
teraz kod wyglada tak

[php:1:114af85578]<?php
if($_POST[mode] == spr)
{
if(!isset($_POST[login]))
{
echo"Nie masz dostępu do tego modułu";
}

else
{
mysql_connect("127.0.0.1", "root", "krasnal") or die ("nie mozna polaczyc sie z baza");
mysql_select_db(rcx) or die ("nie mozna wybrac bazy");

session_start();

if($_POST['submit'])
{
$wyszukaj = mysql_query("SELECT * FROM users WHERE login='$_POST[login]' AND haslo='$_POST[pass]'");
$wynik = mysql_num_rows($wyszukaj);

if(empty($_POST[login]))
{
echo "nie podano loginu<br>";
}

if(empty($_POST[pass]))
{
echo "nie podano hasla<br>";
}


elseif($wynik == 1)
{
$_SESSION['log'] = $login;
}

elseif(isset($_POST[login]) && $_POST[pass])
{
echo "Niepoprawne dane";
}
}

if($_SESSION['log'])
{
/*Wstwaic ID*/ echo "Witaj <b>".$_SESSION['log']."</b> na stronie !<br><a href='form_login.php?mode=a_profil&id=$id'>aktualizuj swuj profil</a><br><a href=login.php?mode=wyloguj>wyloguj</a>";
}
}
}


elseif($_GET[mode] == wyloguj)
{
session_start();
unset($_SESSION['log']);
echo"zostales wylogowany kliknij aby powrucic <a href=login.php>TUTAJ</a>";
}

else
{
echo"
<form action='$_SERVER[PHP_SELF]' method='POST'>
Login:
<input type='text' name='login'>
Hasło:
<input type='text' name='pass'>
<input type='hidden' name='mode' value='spr'>
<input type='submit' name='submit' value='Zaloguj'>
</form>
<a href='$_SERVER[PHP_SELF]'>zarejestruj sie</a>&nbsp;|&nbsp;
<a href='logowanie/form_login.php?mode=zapomnialem_pass'>zapomnialem hasla</a>
";
}
?>[/php:1:114af85578]
invx
prubowalem gdzie indziej dac sesion_start() ale nie pomoglo sad.gif co w takim razie jest zle questionmark.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.