system logowania

0

cześć
Nie mam pojęcia dlaczego system logowania na sesji nie działa. Proszę o pomoc.

<?php
session_start();
include_once "conexion.php";



function checklogin($iduser, $user, $password, $result)
{
	$sql = "SELECT * FROM users WHERE username = '$user' AND password = '$password' AND iduser='$iduser'";
	$rec = mysqli_query($sql);
	$_SESSION['iduser'] = $rec['iduser'];
	$count = 0;
	while ($row = mysqli_fetch_object($rec))
	{
		$count++;
		$result = $row;
	
	if ($count == 1)
	{
		return 1;
	}
	else
	{
		return 0;
	}
	}
}

?>
<form action="" method="post" class="login">
	<div><label>Username</label><input name="user" type="text"></div>
	<div><label>Password</label><input name="password" type="password"></div>
	<div><input name="login" type="submit" value="Login"></div>
</form>

<?php
if(isset($_SESSION['iduser']))
{
	if(isset($_POST['login']))
	{
		if(checklogin($_POST['user'],$_POST['password'],$result) == 1)
		{
			$_SESSION['iduser'] = $result->iduser;
			header("location: main.php");
		}
		else
		{
			echo '<div class="error">Bad username.</div>';
		}
	}
}
else
{
	echo 'Correct user ';
	echo '<a href="logout.php">Logout</a>';
}
?>
0

wrzucałem logowanie w Wylogowywanie się

0

Po pierwsze - napisz może trochę dokładniej, na czym polega błąd, co robisz, żeby go uzyskać itp. Bo samo stwierdzenie "coś nie działa" to trochę mało.

Odwołujesz się do pliku conexion.php ale nie wiadomo, co się w nim dzieje.

Po trzecie - czy to piszesz w ramach nauki/zaliczenia, czy ten mechanizm ma być realnie wykorzystywany? Bo wygląda na to, że trzymasz w bazie hasła w postaci jawnej. Może gdzieś są w innym miejscu przetwarzane a teraz wrzuciłeś jedynie jakąś uproszczoną wersję skryptu, ale obecnie wygląda to tak, że wartość $_POST['password'] jest jawnie przesyłana do bazy. Jeśli tak chcesz zrobić na produkcji, to powinni Ci zabrać wszelkie uprawnienia do kodowania na okres 6 miesięcy ;)

0

cześć
Logowanie jest potrzebne do zaliczenia, znam się tylko na c#,c++. PHP się dopiero uczę, ciężko mi go zrozumieć. Kod do conexion.php:

<?php
define('DB_server', 'localhost');
define('DB_user', 'root');
define('DB_pass', '');
define('DB_name', 'users');

$con = mysql_connect(DB_server, DB_user, DB_pass);
mysql_select_db(DB_name, $con);
?>

Ciężko mi powiedzieć na czym polega błąd, bo po wprowadzeniu loginu i hasła, nic się nie dzieje. Tak jakby nie było połączenia z baza danych. Nie pojawia się żaden błąd, po prostu przycisk do logowania nie działa.
System składa się na razie z dwóch plików index.php oraz conexion.php

1

gdzie używasz to $con?

0
$con = mysql_connect(DB_server, DB_user, DB_pass);

Nie podałes jako czwartego parametru nazwy bazy danych, więc pewnie łączy się z domyślną bazą w bazie danych ([, string $dbname = ""]).
http://php.net/manual/pl/mysqli.construct.php

Dobra ..., nie spojrzałem na budowę funkcji connect w dokumentacji na mysql, bo Ty używasz mysql zamiast mysqli.

echo mysql_errno($con) . ": " . mysql_error($con). "\n";

i/lub

var_dump($con);
2

No a jak niby ma działać? W $con jest odwołanie do mysql, w pliku używasz mysqli.

0

Jeżeli nie dzieje się totalnie nic, to pytanie jest takie - czy w ogóle forma się poprawnie wysyła? Masz podane action="", co w sumie błędem nie jest, ale ja jestem zwolennikiem jednak wpisywania tam jakiejś konkretnej wartości.

Żeby sprawdzić, czy w ogóle submit działa, możesz w skrypcie na początku dodać coś w stylu echo($_POST["user"]), a następnie w formularzu wpisać jako "user" cokolwiek - np. STEFAN. Jeśli po kliknięciu "submit" strona się przeładuje i będzie na górze napis "STEFAN" to znaczy, że samo wysyłanie formularza jest OK i problem lezy gdzieś indziej.

Chociaż podejrzewam, że rację ma @leonpro778 - mieszasz dwa różne podejścia do tematu dostępu do bazy, więc prawdopodobnie to jest przyczyną.

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