登录php和mysqli
Posted
技术标签:
【中文标题】登录php和mysqli【英文标题】:Login php and mysqli 【发布时间】:2019-01-20 19:19:03 【问题描述】:我的登录页面有问题。我谈问题。如果我尝试登录页面,他在本地工作时会给我一个完美的结果,但是当页面在线时,在查询 mysqli 中找不到任何内容。当没有密码的查询时,他工作得很好;
<?php
session_start();// come sempre prima cosa, aprire la sessione
require ("library/include/configurazione.php"); // Include il file di connessione al database
$matricola = $_POST['matricola'];
$password = md5($_POST['password']);
$query_utente= mysqli_query($conne,"SELECT * FROM operatore WHERE matricola='".$matricola."' "); //per selezionare nel db l'utente e pw che abbiamo appena scritto nel log
// Con il SELECT qua sopra selezione dalla tabella users l utente registrato (se lo è) con i parametri che mi ha passato il form di login, quindi
// Quelli dentro la variabile POST. username e password.
if (mysqli_num_rows($query_utente)==true)
$_SESSION["matricola"] = mysqli_real_escape_string($conne,$_POST["matricola"]); // con questo associo il parametro username che mi è stato passato dal form alla variabile SESSION username
$_SESSION["sede"] = mysqli_real_escape_string($conne,$_POST["sede"]);
$_SESSION["password"] = mysqli_real_escape_string($conne,md5($_POST['password'])); // con questo associo il parametro username che mi è stato passato dal form alla variabile SESSION password
$row = mysqli_fetch_array($query_utente); // metto i risultati dentro una variabile di nome $row
$_SESSION["logged"] = true; // Nella variabile SESSION associo TRUE al valore logged
header("location:modules/root/dashboard.php");
else
echo "Errore ... Operatore non trovato"; // altrimenti esce scritta a video questa stringa di errore
?>
但是如果我用密码阵营查询他不工作
$query_utente= mysqli_query($conne,"SELECT * FROM operatore WHERE matricola='".$matricola."' AND password='".$password."' ");
【问题讨论】:
请注意md5()
是highly insecure(即使加了盐)和should NOT be used for password storage。相反,您应该考虑 password_hash()
和 password_verify()
以及像 PASSWORD_BCRYPT
或 PASSWORD_ARGON2I
这样的安全算法。
为了使mysqli_real_escape_string
更有效,它需要在 SQL 上下文中使用。您仅使用它在会话中存储转义字符串(为什么还要在会话中存储密码?)
【参考方案1】:
您可以查看library/include/configurazione.php
的内容吗?也许你需要配置你的 Database_server、Database_username、Database_password 和 Database_name。确保您的数据库已连接到您的网站。
<?php
$dbServername = ""; //servername
$dbUsername = ""; //database username
$dbPassword = ""; //database password
$dbName = ""; //database name
//Create connection
$conne = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);
// Check connection
if (!$conne)
die("Connection failed: " . mysqli_connect_error());
echo "<!--Connected db successfully-->";
?>
我也修改了你的代码。试试这个
<?php
$matricola = mysqli_real_escape_string($conne, $_POST['matricola']);
$password = md5(mysqli_real_escape_string($conne, $_POST['password']));
$query_utente= mysqli_query($conne,"SELECT * FROM operatore WHERE
matricola='$matricola' AND password ='$password'");
$resultCheck = mysqli_num_rows($query_utente);
if ($resultCheck > 0)
$row = mysqli_fetch_array($query_utente);
$_SESSION["matricola"] = $row['matricola'];
$_SESSION["sede"] = $row['sede'];
$_SESSION["password"] = $row['password'];
$_SESSION["logged"] = true;
header("location:modules/root/dashboard.php");
else
echo "Errore ... Operatore non trovato"; // altrimenti esce scritta a
video questa stringa di errore
?>
但我建议您使用password_hash
和password_verify
。
【讨论】:
以上是关于登录php和mysqli的主要内容,如果未能解决你的问题,请参考以下文章