skrypt logowania nie działa poprawnie

0

Witam!
Mam problem, znalazłem na internecie gotowy kod do rejestracji oraz logowania. Przerobiłem go na kod pod swoją stronę, i teraz pojawił się problem. Z rejestracją sobie poradziłem, ale plik odpowiedzialny za logowanie nie działa prawidłowo. Zamiat wykonywać się, wyświetla cały kod od pewnego momentu. Ten kod wyświetla jako tekst:

Wypełnij pole z loginem!
'; exit; } if (!$password OR empty($password)) { echo '
Wypełnij pole z hasłem!

'; exit; } $istlogin = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '$login' AND `password` = '$password'")) or die(mysql_error()."Błąd"); // sprawdzenie czy istnieje uzytkownik o takim loginu i hasle if ($istlogin[0] == 0) { echo 'Logowanie nieudane. Sprawdź pisownię loginu oraz hasła.'; } else { $_SESSION['login'] = $login; $_SESSION['password'] = $password; echo 'Logowanie pomyślne'; header("Location: indeks.php?site=admin_panel"); } ?>

a oto treść całego pliku login.php:

<?phpinclude "config.php";

$login = $_POST['login'];
$password = $_POST['password'];
$password = addslashes($password);
$login = addslashes($login);
$login = htmlspecialchars($login);

if ($_GET['login'] != '') { //jezeli ktos przez adres probuje kombinowac
exit;
}
elseif ($_GET['password'] != '') { //jezeli ktos przez adres probuje kombinowac
exit;
}

$password = md5($password); //szyfrowanie hasla

    if (!$login OR empty($login)) {
echo '<p class="alert">Wypełnij pole z loginem!</p>';
exit;
}
    if (!$password OR empty($password)) {
echo '<p class="alert">Wypełnij pole z hasłem!</p>';
exit;
}

$istlogin = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '$login' AND `password` = '$password'")) or die(mysql_error()."Błąd"); // sprawdzenie czy istnieje uzytkownik o takim loginu i hasle
    if ($istlogin[0] == 0) {
echo 'Logowanie nieudane. Sprawdź pisownię loginu oraz hasła.';
    } else {

$_SESSION['login'] = $login;
$_SESSION['password'] = $password;
echo 'Logowanie pomyślne';
header("Location: indeks.php?site=admin_panel");
}
?>

config.php:

<?phpsession_start();
mysql_connect("localhost","root","hasło") or die(mysql_error()."Nie mozna polaczyc sie z baza danych. Prosze chwile odczekac i sprobowac ponownie.");
mysql_select_db("strona") or die(mysql_error()."Nie mozna wybrac bazy danych.");
?>

login_form.php (formluarz, wysyła login i hasło do pliku login.php) :

<center>
<br><br><br><br><br><br><br><br><br><br>
<form method="POST" action="index.php?site=login">
<table cellpadding="0" cellspacing="0" width="180">

<tr><td><br></td></tr>
<tr><td width="50">Login:</td><td><input type="text" name="login" maxlength="32"></td></tr>
<tr><td width="50">Hasło:</td><td><input type="password" name="password" maxlength="32"></td></tr>
<tr><td align="center" colspan="2"><input type="submit" value="Zaloguj"><br></td></tr>

</table>
</form>
</center>
0

Jak widać - kod się sypie nawet w kolorowaniu składni na forum. Spacja po <?php gdzie jest?

0

Dodałem odstęp z ładowania zewnetrznego pliku i już ładniej koloruje - możesz sprawdzić. Ja bym inaczej to zrobił, bo ta autoryzacja nie wygląda na zbyt bezpieczną, choć moge się mylić.

<?php

  include "config.php";
 
  $login = $_POST['login'];
  $password = $_POST['password'];
  $password = addslashes($password);
  $login = addslashes($login);
  $login = htmlspecialchars($login);
 
  if ($_GET['login'] != '') { //jezeli ktos przez adres probuje kombinowac
    exit;
  }
  elseif ($_GET['password'] != '') { //jezeli ktos przez adres probuje kombinowac
    exit;
  }
 
  $password = md5($password); //szyfrowanie hasla
 
  if (!$login OR empty($login)) {
    echo '<p class="alert">Wypełnij pole z loginem!</p>';
    exit;
  }
  if (!$password OR empty($password)) {
    echo '<p class="alert">Wypełnij pole z hasłem!</p>';
    exit;
  }
 
  $istlogin = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '$login' AND `password` = '$password'")) or die(mysql_error()."Błąd"); // sprawdzenie czy istnieje uzytkownik o takim loginu i hasle
  if ($istlogin[0] == 0) {
    echo 'Logowanie nieudane. Sprawdź pisownię loginu oraz hasła.';
  } 
  else {
    $_SESSION['login'] = $login;
    $_SESSION['password'] = $password;
    echo 'Logowanie pomyślne';
    header("Location: indeks.php?site=admin_panel");
  }
?>

Ten kod powyżej wyświetla Mi
Wypełnij pole z loginem!

1

@Madoo: Mi chodziło o to, że to mu pewnie zablokowało otworzenie trybu php, dlatego pluło kodem, nie chodziło mi o śliczne kolorowanie na forum -.-

Skrypt logowania to jakaś tragedia, dziura za dziurą + rzeczy, które nie mają sensu, ale udają jakieś zabezpieczenia.
Sprawdzanie czy string jest pusty po użyciu md5? Sprawdzenie czy ktoś nie podał hasła przez GET, skoro nigdy potem tego GET nie odczytujemy? addslahses?

0

Jak już pisałem, skrypt przerobiony przeze mnie, nie pisany od zera. Dostęp do logowania bd mieli tylko wybrani użytkownicy, którzy bd mieli dostęp do rejestracji. Na stronę nikt nie powinien się włamywać, ponieważ strona jest tylko w celach informacyjnych (strona OSP - Ochotniczej Straży Pożarnej). Logowanie potrzebne, aby dostać się o Panelu Administracyjnego, gdzie będzie można dodać nowe tematy do Aktualności itp. Panel potrafię napisać sam, ale mam problem z tym logowaniem.

Poradziłem sobie z tym logowaniem (chyba), ale teraz mam problem z dostępem do treści tylko dla zalogowanych użytkowników. Oto treść login.php oraz panel.php (dostęp tylko dla zalogowanych) oraz na dole podam komunikaty, które są wyświetlane. Nie wiem czemu, ale wywala mi komunikat odnośnie session_start(), chociaż wydaje mi się, że jest ono w dobrym miejscu.

login.php

 
<?php 
include "config.php";

mysql_connect("127.0.0.1","root","hasło") or die(mysql_error()."Nie mozna polaczyc sie z baza danych. Prosze chwile odczekac i sprobowac ponownie.");
mysql_select_db("strona") or die(mysql_error()."Nie mozna wybrac bazy danych.");

$login = $_POST['login'];
$password = $_POST['password'];
$password = addslashes($password);
$login = addslashes($login);
$login = htmlspecialchars($login);

$password = md5($password); //szyfrowanie hasla

    if (!$login OR empty($login)) {
echo '<p class="alert">Wypełnij pole z loginem!</p>';
exit;
}
    if (!$password OR empty($password)) {
echo '<p class="alert">Wypełnij pole z hasłem!</p>';
exit;
}

$istlogin = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '$login' AND `password` = '$password'")) or die(mysql_error()."Błąd"); // sprawdzenie czy istnieje uzytkownik o takim loginu i hasle
    if ($istlogin[0] == 0) {
echo 'Logowanie nieudane. Sprawdź pisownię loginu oraz hasła.';
    } else {

$_SESSION['login'] = $login;
$_SESSION['password'] = $password;
echo '<br><br><br><br><br><br><br><br><br><br><center> Logowanie pomyślne </center>';
}
?>
<META HTTP-EQUIV="Refresh" CONTENT="2;URL=index.php?site=panel_admin">

panel.php

 
<?php
include "config.php";


if ( @mysql_connect( "127.0.0.1","root","hasło" ) ) 
{

echo 'Połączono';

$login = $_SESSION['login'];
$password = $_SESSION['password'];

    if ((empty($login)) AND (empty($password))) {
echo '<br>Nie byłeś zalogowany albo zostałeś wylogowany<br><a href="index.php">Strona Główna</a><br>';
exit;
}
$user = mysql_fetch_array(mysql_query("SELECT * FROM uzytkownicy WHERE `login`='$login' AND `password`='$password' LIMIT 1"));
    if (empty($user[id]) OR !isset($user[id])) {
echo '<br>Nieprawidłowe logowanie.<br>';
exit;
}
// tresc dla zalogowanego uzytkownika
echo 'Witaj '.$user[login].' zostałeś/aś pomyślnie zalogowany/a, tutaj umieść ukryta strone tylko dla zalogowanych';
echo '<br><a href="index.php?site=log_off">Wyloguj mnie</a>';
}
else
{
echo 'brak połączenia';
}
?>

config.php

 
<?php session_start();
mysql_connect("127.0.0.1","root","hasło") or die(mysql_error()."Nie mozna polaczyc sie z baza danych. Prosze chwile odczekac i sprobowac ponownie.");
mysql_select_db("strona") or die(mysql_error()."Nie mozna wybrac bazy danych.");
?>

oraz treści błędów:

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at F:\XAMPP\htdocs\log\index.php:98) in F:\XAMPP\htdocs\log\config.php on line 1
Połączono
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in F:\XAMPP\htdocs\log\includes\panel.php on line 17

Notice: Use of undefined constant id - assumed 'id' in F:\XAMPP\htdocs\log\includes\panel.php on line 18

Nieprawidłowe logowanie.

Pokazuje, że sesja zaczęła się w index.php, ale oto jesgo treść (od 98 linijki, tam jest błąd do końca php)

 
<?php
		if(empty($_GET['site']) || $_GET['site'] == 'home')
		{
		include "includes/home.php";
		}
				elseif ($_GET['site'] == "news")
		{
		include "includes/news.php";
		}
				elseif ($_GET['site'] == "actions")
		{
		include "includes/actions.php";
		}
				elseif ($_GET['site'] == "history")
		{
		include "includes/history.php";
		}
				elseif ($_GET['site'] == "patron")
		{
		include "includes/patron.php";
		}
				elseif ($_GET['site'] == "members")
		{
		include "includes/members.php";
		}
				elseif ($_GET['site'] == "odznaczenia")
		{
		include "includes/odznaczenia.php";
		}
				elseif ($_GET['site'] == "management")
		{
		include "includes/management.php";
		}
				elseif ($_GET['site'] == "equipment")
		{
		include "includes/equipment.php";
		}
				elseif ($_GET['site'] == "gallery")
		{
		include "includes/gallery.php";
		}
				elseif ($_GET['site'] == "download")
		{
		include "includes/download.php";
		}
				elseif ($_GET['site'] == "links")
		{
		include "includes/links.php";
		}
				elseif ($_GET['site'] == "seat")
		{
		include "includes/seat.php";
		}
				elseif ($_GET['site'] == "contact")
		{
		include "includes/contact.php";
		}
elseif ($_GET['site'] == "login_form")
{
include "includes/login_form.php";
}
		elseif ($_GET['site'] == "panel_admin")
		{
		include "includes/panel.php";
		}
elseif ($_GET['site'] == "login")
{
include "includes/login.php";
}
elseif ($_GET['site'] == "log_off")
{
include "includes/log_off.php";
}
		else
		{
		include "includes/home.php";
		}
		
		?>

W niektórych plikach mimo includowania pliku config.php w którym jest łączenie z bazą, musiałem dodać połączenie z bazą danych, ponieważ w innym wypadku wyświetlało, że nie mam dostępu do bazy, nie używam hasła, brak użytkownika.

0

Gdzieś wysyłasz jakieś headery i już nie można otworzyć sesji, może to być spowodowane że plik config albo iny jest w utf8 (z headeremo kodowaniu), nie rób czegoś takiego

$istlogin = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '$login' AND `password` = '$password'")) or die(mysql_error()."Błąd"); // sprawdzenie czy istnieje uzytkownik o takim loginu i hasle
    if ($istlogin[0] == 0)

bo to nie zaskoczy jeżeli zwróci 0 elementów dla $istlogin, możesz sprawdzić czy pobrał jakieś dane do tabeli przez mysql_num_rows()

0

na headery jest jesdna prosta rada dla poczatkujacych ; ) w pliku index.php dodaj na samej gorze ten fragment

<?php
session_start();
ob_start();
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1