Admin und normalen Benutzer-login system PHP MYSQL
Habe ich einige code, der versucht zu überprüfen, ob ein Benutzer ein admin oder normal user, und dann vergleicht es mit einer SQL-Tabelle, um zu bestimmen, welche Seite sich öffnet (admin-Seite vs normal-user-Seite).
if (isset($_POST['submit']))
{
$user = $_POST['user'];
$pass = $_POST['pass'];
$admin = $_POST['admin'];
if( $user == "" || $pass == "")
{
echo '<div id ="errormsg">Please fill in all fields</div>';
}
else
{
$query = mysqli_query($dbcon, "SELECT * FROM users WHERE username = '$user'
and password = '$pass' and admin = '$admin' ") or die ("Can't query the database");
$count = mysqli_num_rows($query);
if($count == 1)
{
if ($admin == 1)
{
$_SESSION['username'] = $user;
header("location: admin.php");
}
else if ($admin == 0)
{
$_SESSION['username'] = $user;
header("location: users.php");
}
else
{
echo '<div id="errormsg">No matches, try again</div>';
}
}
}
}
Gibt es keine Fehler, aber der admin Wert scheint nicht, einen Unterschied zu machen und standardmäßig öffnet 'users.php'
everytime. Die $admin ist eine checkbox mit dem Wert '1' wenn aktiviert, wird die Logik, die ist zu prüfen, diesen Wert gegen die Datenbank. Kann mir jemand helfen, dieses Problem lösen?
Dies ist die html-form:
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<fieldset>
<label class="login">Username:</label><input type="text" name="user" /><br />
<label class="login">Password:</label><input type="password" name="pass" /><br />
<label class="login">Admin?:</label><input type="checkbox" value="1" name="admin" /><br/>
<input type="submit" name="submit" value="Login" />
</fieldset>
</form
- Zeigen Sie uns den html-Code für
admin
wählen - der admin Wert funktioniert wie zeigt sich entsprechend in der sql-Tabelle per phpmyadmin
- Verwenden Sie vorbereitete Anweisungen korrekt zu vermeiden, SQLi
- Sie admin-Wert in deinem code kommt nicht aus der Datenbank. Sie erfassen eine
$_POST
variable in$admin
Aussehen ====>$admin = $_POST['admin'];
- versuchen Kapselung der Wert in Anführungszeichen wie
($admin == "1")
- oder man kann auch versuchen, statt der
$admin = $_POST['admin'];
VERWENDEN$admin = (!empty($_POST['admin'])?1:0);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Fehler ist, wie Sie prüfen, ob Benutzer ist admin:
Ersetzen Sie diesen mit:
Außerdem müssen Sie
exit
oderdie
nach der Verwendungheader()
:Erstens, Sie benötigen, zu haben, Lesen Sie auf mysql-escaping /best practices. Dein Skript hier ist anfällig für SQL-injection.
Es gibt viele gute online-Ressourcen, oder die Suche SQL injection PHP hier, um zu helfen, erklären Sie, wenn Sie unsicher sind.
Wie ist die
$_POST['admin']
Wert legen, kannst du ein Beispiel deiner form hier?Ich vermute, dass der Wert gesendet wird in nicht passenden Bedingungen vor, so ist dies wahrscheinlich die Ursache sein.
Es könnte so einfach sein wie das ändern Sie Ihre wenn-Anweisung
===
eher als==
, aber um sicher zu sein würde ich brauchen, um zu sehen, Ihre form die source-Kern.Versuchen, diese mit etwas Korrektur in Datenbank-Abfrage-
Hoffe, es wird helfen.