Sprawdź czy masz wygenerowane prawidłowe zapytanie, np.
<?php
require_once "conn.php";
$login = $_POST['nazwa'] ??null;
$haslo = $_POST['haslo'] ??null;
$sql = "select user, password from mysql.user where user = '$login';";
// na czas testu
var_dump($sql);
exit();
...
i sprawdź bezpośrednio w phpmyadmin co zostanie zwrócone, gdy użyjesz wygenerowany kod sql.
BTW, zamknięcie połączenia z bazą danych masz "zagnieżdżone" w if-ach
if($result = mysqli_query($conn, $sql))
{
$ileZwrotow = mysqli_num_rows($result);
if($ileZwrotow > 0)
{
$wiersz = mysqli_fetch_assoc($result);
$user = $wiersz['user'] ??null;
$passwd = $wiersz['password'] ??null;
mysqli_free_result($result);
echo $user;
echo $passwd;
mysqli_close($conn);
}
php i tak domyślnie zamyka połączenie z bazą po ukończeniu wykonywania skryptu, ale skoro używasz jawnie zamknięcia
mysqli_close($conn);
to umieść go w takim miejscu kodu, w którym wykona się bez względu na wynik działania warunków w if-ach, no i zrobiłbym użytek z tego zapisu
$login = $_POST['nazwa'] ?? null;
$haslo = $_POST['haslo'] ?? null;
czyli całość np.
<?php
require_once "conn.php";
$login = $_POST['nazwa'] ?? null;
$haslo = $_POST['haslo'] ?? null;
if ($login && $haslo)
{
$sql = "SELECT user, password FROM mysql.user WHERE user = '$login';";
if ($result = mysqli_query($conn, $sql))
{
$ileZwrotow = mysqli_num_rows($result);
if ($ileZwrotow > 0) // gdy True mamy jakieś wiersze z bazy ...
{
$wiersz = mysqli_fetch_assoc($result);
$user = $wiersz['user']; // ... nie ma potrzeby używać ??
$passwd = $wiersz['password'];
mysqli_free_result($result);
echo $user;
echo $passwd;
}
else
{
echo "Nie ma takiego konta";
}
}
else
{
echo "Problem z zapytaniem sql";
}
}
else
{
echo "Nie podano loginu i hasła";
}
mysqli_close($conn);