Français Solved Problème de connexion à la base de données avec mysqli en PHP

  • Auteur de la discussion Auteur de la discussion Adrien
  • Date de début Date de début

Adrien

User
17/12/21
8
0
100
Bonsoir, je cherche de l'aide auprès de vous car je m'y connais très peu en php et donc j'ai une erreur comme ceci Fatal error: Uncaught TypeError: mysqli_num_rows(): Argument #1 ($result) must be of type mysqli_result, bool given in C:\xampp\htdocs\manuallogin.php:12 Stack trace: #0 C:\xampp\htdocs\manuallogin.php(12): mysqli_num_rows(false) #1 {main} thrown in C:\xampp\htdocs\manuallogin.php on line 12

voici mon fichier


Code:
<?php
session_start();
$allowed = false;

if(isset($_POST["username"]) && isset($_POST["password"])) {
    include_once("game_conf.php");
    $a3 = db_a3pl();
    $user = htmlspecialchars($_POST["username"]);
    $pass = sha1(md5($_POST["password"]));
    //echo $pass;
    $q = mysqli_query($a3,"SELECT steamid FROM `wl_admins_server` WHERE `nickname` = '{$user}' AND password = '{$pass}'");
    if(mysqli_num_rows($q) > 0) {
        while($r=mysqli_fetch_array($q)) {
            $_SESSION['steamid'] = $r[0];
            $_SESSION['logged_admin'] = true;
            $_SESSION['logged'] = true;
            $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
            $_SESSION['activity'] = time();
            $allowed = true;
        }
    }
}


if($allowed) {
    header("Location: panel.php");
} else {
    header("Location: index.php");
}
?>
 
Solution
Hello! Je n'ai jamais essayé d'utiliser mysqli_num_rows donc je ne saurais pas corriger ton code, cependant voici comment j'aurais fait :
[CODE highlight="11"]<?php
session_start();
$allowed = false;

if(isset($_POST["username"]) && isset($_POST["password"])) {
include_once("game_conf.php");
$user = htmlspecialchars($_POST["username"]);
$pass = sha1(md5($_POST["password"]));
//echo $pass;

$a3 = new mysqli('localhost', 'DB_USERNAME', 'DB_PASSWORD', 'DB_NAME');
$q = "SELECT steamid FROM wl_admins_server WHERE nickname='$user' AND password='$pass'";
$result = $a3->query($q);

if ($result->num_rows > 0) {
$row = $result->fetch_assoc();

$_SESSION['steamid'] = $row["steamid"]...
Hello! Je n'ai jamais essayé d'utiliser mysqli_num_rows donc je ne saurais pas corriger ton code, cependant voici comment j'aurais fait :
[CODE highlight="11"]<?php
session_start();
$allowed = false;

if(isset($_POST["username"]) && isset($_POST["password"])) {
include_once("game_conf.php");
$user = htmlspecialchars($_POST["username"]);
$pass = sha1(md5($_POST["password"]));
//echo $pass;

$a3 = new mysqli('localhost', 'DB_USERNAME', 'DB_PASSWORD', 'DB_NAME');
$q = "SELECT steamid FROM wl_admins_server WHERE nickname='$user' AND password='$pass'";
$result = $a3->query($q);

if ($result->num_rows > 0) {
$row = $result->fetch_assoc();

$_SESSION['steamid'] = $row["steamid"];
$_SESSION['logged_admin'] = true;
$_SESSION['logged'] = true;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['activity'] = time();
$allowed = true;
}
}


if($allowed) {
header("Location: panel.php");
} else {
header("Location: index.php");
}
?>[/CODE]

Si tu utilises ce code, n'oublie pas de modifier la ligne 11 avec tes identifiants
 
  • Like
Les réactions: Adrien
Solution
Alors mon problème a été régler avec ce que tu ma dit par contre sa me redirige pas vers la page ou c'est sensé le faire sa me remet sur le login donc l'index.php a chaque fois je peut t'envoyer le lien si tu veux voir ce que je te dit
 
Il faudrait debug pour savoir si $allowed est bien sur true :unsure:

Est-ce que tu peux ajouter après la définition des variables $result et $row respectivement :
Code:
print_r($result);
Et un :
Code:
print_r($row);

Il faudra surement enlever le header temporairement pour ne pas être redirigé, sinon tu n'auras pas le temps de voir les print_r.
Puis tu peux me dire le résultat
 
Normalement j'ai mis les variables comme ceci

Code:
<?php
session_start();
$allowed = false;

if(isset($_POST["username"]) && isset($_POST["password"])) {
    include_once("game_conf.php");
    $user = htmlspecialchars($_POST["username"]);
    $pass = sha1(md5($_POST["password"]));
    //echo $pass;

    $a3 = new mysqli('localhost', 'panel', '5QU9x3HQ7HWdj8aNfHh4QPzNPDFnnzMqxCfSq7uXFKWhyBX2qJnVeXVcwZSdKkbX', 'life');
    $q = "SELECT steamid FROM wl_admins_server WHERE nickname='$user' AND password='$pass'";
    $result  = $a3->query($q);
    print_r($result);

    if ($result->num_rows > 0) {
        $row = $result->fetch_assoc();
        print_r($row);

        $_SESSION['steamid'] = $row["steamid"];
        $_SESSION['logged_admin'] = true;
        $_SESSION['logged'] = true;
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
        $_SESSION['activity'] = time();
        $allowed = true;
    }
}
?>
 
Visiblement la requête SQL de la ligne 12 ne retourne rien. Donc il n'y a pas d'utilisateur avec ce mot de passe dans la base de données.
Ou alors la méthode d'encryption (sha + md5) n'est pas la bonne.

Tu peux essayer de echo $user et $pass pour vérifier si c'est bien les valeurs que tu penses. Probablement que c'est pas les mêmes que dans ta base de données