• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

System Logowania z MySql - PHP

0 głosów
146 wizyt
pytanie zadane 5 lipca w PHP, Symfony, Zend przez Nerez Użytkownik (830 p.)

Po wprowadzeniu byle jakich danych w miejscu "Login" oraz "Hasło" wyświetla się poprawnie zalogowano.

W MySql dodałem odpowiednią tabelkę z danymi "admin", "admin", ale nic to nie zmieniło. Cały czas wyświetla się poprawnie zalogowano, nawet po zostawieniu pól pustych. W miejscu: SELECT * FROM...." zmieniłem nawet zmienne tzn: "SELECT * FROM LOGOWANIE WHERE username = admin and password = admin;"

Nic to nie daje

 

<?php
	$username = $_POST ['username'];
	$password = $_POST ['password'];
	$link = mysqli_connect("sql.nazwa.test.pl", "server_nazwa", "Haslo", "server_nazwa") or die($link);
	
	$username = stripcslashes($username);
	$password = stripcslashes($password);
	$username = mysqli_real_escape_string($link, $username);
	$pass1 = mysqli_real_escape_string($link, $password);
	
	$sql = mysqli_query($link, "select * from logowanie where username = '$username' and password = '$password'");
	$query = mysqli_query
	$row = mysqli_fetch_array($result);
	if ($row['username'] == $username && $row['password'] == $password ) {
		echo "Poprawnie zalogowano";
	}
	else {
		echo "Blad z logowaniem!";
	}
	
?>

 

HTML: 

<div class="align">
		<div class="card">
			<div class="head">
				<div></div>
				<a id="login" class="selected" href="#login">Login</a>
				<a id="register" href="#register">Register</a>
				<div></div>
			</div>
			<div class="tabs">
				<form action ="process.php" method ="POST">
					<div class="inputs">
						<div class="input">
							<input placeholder="Username" type="text">
							<img src="img/user.svg">
						</div>
						<div class="input">
							<input placeholder="Password" type="password">
							<img src="img/pass.svg">
						</div>
						<label class="checkbox">
							<input type="checkbox">
							<span>Zapamiętaj mnie</span>
						</label>
					</div>
					<button>Login</button>
				</form>
				<form>
					<div class="inputs">
						<div class="input">
							<input placeholder="Email" type="text">
							<img src="img/mail.svg">
						</div>
						<div class="input">
							<input placeholder="Username" type="text">
							<img src="img/user.svg">
						</div>
						<div class="input">
							<input placeholder="Password" type="password">
							<img src="img/pass.svg">
						</div>
					</div>
					<button>Register</button>
				</form>
			</div>
		</div>
	</div>

 

 

Siedzi to na serwerze nazwy.pl, dlatego nic u mnie temu nie przeszkadza. MySql działa na 100%, ponieważ łączyłem się też poprzez Javę.

 

komentarz 5 lipca przez Velta Pasjonat (20,870 p.)
  • L12: brakuje średnika, niezrozumiały zapis.
  • Brakuje atrybutu name w kontrolkach formularza.
  • Brakuje szyfrowania hasłą.
komentarz 5 lipca przez Nerez Użytkownik (830 p.)
1.Zrobione,

2.Zrobione,

3. Do zrobienia :)

4 odpowiedzi

+1 głos
odpowiedź 5 lipca przez Arkadiusz Waluk Ekspert (250,210 p.)
$username = $_POST ['username'];
    $password = $_POST ['password'];

Próbujesz tu odczytać wartości z POST, których tam na pewno nie będzie jeśli korzystasz z podanego poniżej formularza, bo nie ma on pól o takich nazwach. 

Przy okazji: hasła nie należy trzymać w bazie jako zwykły tekst. Wartości do bazy nie powinny być też wstawiane w taki sposób, należałoby je zwalidować i użyć bindowania, aby zabezpieczyć się przed atakiem sql injection.

komentarz 5 lipca przez Nerez Użytkownik (830 p.)
Jak mam to zrobic? Jak pola mam zmienic, przyznam się, że ten system logowania w php jest w 70% z internetu. Nie wiem co z tym Post. A co do zabezpieczen, to SSL cos da?
komentarz 5 lipca przez Arkadiusz Waluk Ekspert (250,210 p.)
Po prostu musisz nadać odpowiednie nazwy dla inputów. Przy użyciu nazwy z HTML odczytasz przesłaną wartość z tablicy $_POST. Nawet jeśli jest z internetu, to nie zwalnia z samodzielnego analizowania i znajomości chociaż podstaw, bo inaczej będzie ciężko coś zrobić. SSL spowoduje zaszyfrowanie komunikacji, aby nikt po drodze nie mógł jej podejrzeć. To też jest ważne, ale nadal atakujący będzie mógł zastosować atak sql injection i zmanipulować zapytanie (celem np. wyciągnięcia innych danych albo pousuwania czegoś) czy wprowadzić tam dane, które wyświetlone gdzieś wykonają określony kod i będzie atak XSS.
0 głosów
odpowiedź 5 lipca przez Job102 Obywatel (1,630 p.)

Witam,

chodzi o to, że musisz dodać nazwy "username" i "password", bo PHP nie wie do czego ma się odnieść.

W <input> "Username" dodaj 'name="username"', a w <input> "Password" 'name="password"'.

<form action ="process.php" method ="POST">
 <div class="inputs">
  <div class="input">
   <input name="username" placeholder="Username" type="text">
   <img src="img/user.svg">
  </div>
  <div class="input">
   <input name="password" placeholder="Password" type="password">
   <img src="img/pass.svg">
  </div>
  <label class="checkbox">
   <input type="checkbox">
   <span>Zapamiętaj mnie</span>
  </label>
 </div>
  <button>Login</button>
</form>

Pozdrawiam.

komentarz 5 lipca przez Nerez Użytkownik (830 p.)
Dalej to samo :/
0 głosów
odpowiedź 5 lipca przez Job102 Obywatel (1,630 p.)
$link = mysqli_connect("sql.nazwa.test.pl", "server_nazwa", "Haslo", "server_nazwa") or die($link);

Składnia "mysqli_connect":

$link = mysqli_connect("localhost","my_user","my_password","my_db");

czyli, w miejscu:

"localhost" - wpisujesz nazwę serwera

"my_user" - użytkownik

"my_password" - hasło

"my_db" - nazwa bazy danych

Po zalogowaniu do phpMyAdmin będziesz miał wszystkie informacje poza hasłem - hasło jest takie samo jakie ustawiłeś do panelu phpMyAdmin.

$query = mysqli_query

Nie ma zastosowania. Generuje tylko błąd z powodu braku średnika.

$row = mysqli_fetch_array($result);

$result zmień na $sql, gdyż to $sql pobiera wyniki z tablicy. Nie masz nigdzie zdefiniowanego $result.

$sql = mysqli_query($link, "select * from logowanie where username = '$username' and password = '$password'");

Pamiętaj że "logowanie" to nazwa Twojej bazy danych, jesli masz inną nazwę - zmień ją w tym wierszu.

Pełny kod:

<?php
    $username = $_POST ['username'];
    $password = $_POST ['password'];
    $link = mysqli_connect(/*"localhost", "my_user", "my_password", "my_db"*/) or die($link);
     
    $username = stripcslashes($username);
    $password = stripcslashes($password);
    $username = mysqli_real_escape_string($link, $username);
    $password = mysqli_real_escape_string($link, $password);
     
    $sql = mysqli_query($link, "select * from logowanie where username = '$username' and password = '$password'");

    $row = mysqli_fetch_array($sql);
    if ($row['username'] == $username && $row['password'] == $password ) {
        echo "Poprawnie zalogowano";
    }
    else {
        echo "Blad z logowaniem!";
    }
     
?>

Jeśli chodzi natomiast o XSS, to możesz użyć htmlspecialchars() - poczytaj, a w razie problemów pisz.

Mam nadzieję, że pomogłem.

Pozdrawiam.

komentarz 5 lipca przez Nerez Użytkownik (830 p.)
Nic już z tego nie rozumiem. Wszystko zrobione co wysyłałeś, nie wyskakuje żaden błąd, ale po wpisaniu byle jakich danych w polu logowania, piszę "Poprawnie Zalogowano'. Jak
?
komentarz 5 lipca przez Chess Maniak (72,090 p.)

To co napisałeś, to raczej antywzorzec. Parametry się binduje, a nie escape'uje. forumweb.pl

 

komentarz 5 lipca przez Nerez Użytkownik (830 p.)
Rozumiem, że nie powinienem prosic, ale mógłbyś zamienić to co mam źle na to co pisałeś? Całkowicie tego nie umiem.
0 głosów
odpowiedź 5 lipca przez Chess Maniak (72,090 p.)

W uproszczeniu, taki mini-system logowania może wyglądać następująco.

<body style="background: darkolivegreen;">
<?php
session_start();

$mysqli = new mysqli('localhost', 'root', 'mystrongpass', 'forumphp');

$login = 'hello1';
$password = 'hello2';

$stmt = $mysqli->prepare("SELECT `login`, `password` FROM `admins` WHERE `login`=? and `password`=?;");
$stmt->bind_param('ss', $login, $password);

$stmt->execute();


if($stmt->get_result()->num_rows == 1) {
  $_SESSION['login_password'] = 1;
} else {
  $_SESSION['login_password'] = 0;
}


if($_SESSION['login_password'] == 1) {
  echo "You is logged";
} else {
  echo "You isn't logged";
}

?>
</body>

Podobne pytania

+2 głosów
0 odpowiedzi 56 wizyt
pytanie zadane 6 lipca w HTML i CSS przez Nerez Użytkownik (830 p.)
0 głosów
1 odpowiedź 110 wizyt
–1 głos
1 odpowiedź 129 wizyt
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

66,513 zapytań

113,278 odpowiedzi

239,907 komentarzy

46,647 pasjonatów

Przeglądających: 202
Pasjonatów: 21 Gości: 181

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...