登录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_BCRYPTPASSWORD_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_hashpassword_verify

【讨论】:

以上是关于登录php和mysqli的主要内容,如果未能解决你的问题,请参考以下文章

mysqli 简单的php注册登录功能

Mysqli 上 Php 的登录注销脚本问题

不能用哈希密码登录 - Mysqli PHP

PHP登录页面因root用户错误而拒绝访问,并期望参数1为mysqli,bool给定[重复]

php mysqli_query() 错误

PHP显示登录用户的名字和姓氏[重复]