Sveiki, taigi iškilo tokia bėda, kad sukūriau prisijungimą, bet norint prisijungti veikia tik pati pirma eilutė duomenų bazėj, pvž yra 4 eilutės su skirtingais duomenimis, bet norint prisijungti pvž su 2 eilutės duomenimis neina prisijungti, neveikia, tai kaip sakiau norint prisijungti eina tik naudojant pirmos eilutės duomenis, kodo dalis:
$username = $_POST["user"];
$password = $_POST["password"];
if(empty($username) || empty($password)) { die("Palikote tuščia langeli"); }
$sql = "SELECT username, email, password FROM users";
$result = mysqli_query($connection, $sql);
if(mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
if($username === $row["username"] || $username === $row["email"]) {
if(password_verify($password, $row["password"])) {
echo "<script>alert('Sėkmingai prisijungei');</script>";
}
else {
die("Blogas vartotojo vardas/el. paštas arba slaptažodis");
}
}
else {
die("Blogas vartotojo vardas/el. paštas arba slaptažodis");
}
}
}
header("Refresh: 0");
Kur galėtu būti klaida?
Bebras prieš 7 metus
Nes jei nesutampa su pirmu, naudoji die("Blogas vartotojo vardas/el. paštas arba slaptažodis");
. Dėl to tavo ciklas visada turės max 1 iteraciją. Apskritai, kodėl tu iš duomenų bazės pasirenki visus vartotojus o ne tik tuos kurie atitinka pagal username?
Marux prieš 7 metus
Susitvarkiau, reikėjo:
$sql = "SELECT username, email, password FROM users";
Pakeisti į
$sql = "SELECT username, email, password FROM users WHERE username = '$username' OR email = '$username' OR password = '$password'";
Dėkui už pagalba.
Bebras prieš 7 metus
Tokia užklausa yra pažeidžiama SQL Injection. Taip pat nerekomenduojama laikyti neužkoduotų slaptažodžių duomenų bazėje.
Marux prieš 7 metus
Taip, kad gali būti pažeidžiama su SQL Injection žinau, ir pats mėginau dar nulaušti savo sistemą, bet nepavyko, tikriausiai dėl to, kad blogai dariau, o slaptažodžius aš užkoduoju.
Marux prieš 7 metus
Štai, manau, kad šiek tiek apsaugojau nuo SQL Injection dabar:
if(isset($_POST["submit"])) {
if($stmt = $connection->prepare("SELECT email, password FROM users WHERE username = ?")) {
$user = $_POST["user"];
$password = $_POST["password"];
if(empty($user) || empty($password)) { die("Palikote tuščia langeli<br>"); }
$stmt->bind_param("s", $user);
$stmt->execute();
$stmt->bind_result($email, $pass);
$stmt->fetch();
if($user === $user || $user === $email) {
if(password_verify($password, $pass)) {
echo "<script>alert('Prisijungei');</script>";
}
else {
die("Blogas vartotojo vardas/el. paštas arba slaptažodis<br>");
}
}
else {
die("Blogas vartotojo vardas/el. paštas arba slaptažodis<br>");
}
$stmt->close();
header("Refresh: 0");
}
}
Dabar reikia ir registracija apsaugoti