Aide PHP/HTML

Fermé
Xaxax2000 Messages postés 63 Date d'inscription samedi 20 octobre 2018 Statut Membre Dernière intervention 30 avril 2022 - 16 déc. 2021 à 21:02
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 17 déc. 2021 à 21:44
Bien le bonjour, est ce que quelqu'un qui s'y connaît en code pourrait m'aider sur un projet html/php svp?
J'ai récupéré ce code au cours d'exercices et j'ai ça comme erreur:

merci
A voir également:

6 réponses

David987 Messages postés 121 Date d'inscription samedi 19 décembre 2015 Statut Membre Dernière intervention 16 octobre 2022 1
Modifié le 16 déc. 2021 à 21:33
Tu devrais utiliser empty plutot que isset je la trouve mieux comme fonction car, elle vérifie aussi si la variable existe MAIS aussi si elle est vide.

Ensuite, tu devrais sécurisé tes $_POST.

Passons à ton code :

ce code
if(($login=="")||($mdp1=="")||($mdp2==""))


Peux être amélioré comme suit :
if(empty($login) || empty($mdp1) || empty($mdp2))


Alors pour la partie qui pose problème :

$resultat=mysqli_query($lien,"SELECT * FROM utilisateurs WHERE login='".$login."'");
   if(mysqli_num_rows($resultat)!=0)


Le souci c'est que dans ta requête tu ne fait aucun comptage de resultat dans ta table il faut que tu utilise la fonction COUNT afin de compter le nombre d'entrée sinon la variable sera toujours invalide.

Essaye d'utiliser des nom de variable différent en fonction de ce que ta requête effectue comme action se sera plus clair .

Essaye de faire toutes ces modifs et reviens vers nous si ton problème persiste ;)

David..

EDIT : oups, j'ai oublié de corriger correctement les empty, désolé.
1
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 16 déc. 2021 à 21:30
Bonjour
Peux être amélioré comme suit :
if(empty($login=="") || empty($mdp1=="") || empty($mdp2==""))

À corriger par
if(empty($login) || empty($mdp1) || empty($mdp2))


Essaye d'utiliser des nom de variable différent en fonction de ce que ta requête effectue comme action se sera plus clair .

Aucun intérêt..
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 17 déc. 2021 à 08:33
Il y aurait plusieurs choses à redire sur ton code...
A commencer par la vérification que mysqli_query n'a pas retourné d'erreur .. et le fait qu'on n'utilise plus le SHA pour "crypter" les mots de passe...

En gros, ton code devrait à minima ressembler à un truc du genre

<?php
//démarrage des sessions
 session_start();

//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


//connexion à la bdd
if (! $lien = mysqli_connect("localhost", "root", "", "projet")) {
   echo "Erreur : " . mysqli_connect_error();
   exit;
}

/**
* Recherche un user via son login
*/
function getUserByLogin($login){
  global $lien;
  $sql = "SELECT * FROM utilisateurs WHERE login='".$login."'";
  $resultat=mysqli_query($lien,$sql);
  if(!$resultat){
    echo "Error : " . mysqli_error($lien);
    exit;
  }
  return $resultat;
}

/**
* Insertion du user en BDD
* par contre, le SHA1 n'est plus utilisé .. à la place je t'invite à te pencher sur la fonction php : password_hash()
*/
function addUser($login,$mdp){
  global $lien;
  $sql = "INSERT INTO utilisateurs (login,mdp) VALUES ('".$login."',".SHA1($mdp)."')";
  $resultat=mysqli_query($lien,$sql);
  if(!$resultat){
    echo "Error : " . mysqli_error($lien);
    exit;
  }
  return $resultat;
}


//récupération PROPRE des variables AVANT de les utiliser
// pour ça, j'utilise l'écriture TERNAIRE ( sorte de IF/ELSE) et vérifie que la variable existe et n'est pas vide 
// via la fonction empty 
// j'utilise aussi la fonction TRIM pour supprimer les espaces superflus éventuels..
$insc = !empty($_POST['insc']) ? $_POST['insc'] : NULL;
$login = !empty($_POST['login']) ? trim($_POST['login']) : NULL;
$mdp = !empty($_POST['mdp']) ? trim($_POST['mdp']) : NULL;
$mdp2 = !empty($_POST['mdp2']) ? trim($_POST['mdp2']) : NULL;



 // Ceci est un fichier qui ne génère pas d'affichage
 // Est-on passé par l'inscription ?
 if(!$insc ) {
  // non, on retourne à l'index
  header("location:index.php");
  exit;
 }
 
 
 // OK, on vérifie la présence des infos
 if( !$login || !$mdp || !$mdp2 )  {
  // Soucis dans la transmission, on renvoie
  $erreur="Une donnée n'a pas été saisie.";
  header("location:inscription.php?erreur=".$erreur);
  exit;
 }
  
  
 if($mdp1 != $mdp2) {
  $erreur="Mots de passe différents.";
  header("location:inscription.php?erreur=".$erreur);
  exit;
 }
 
// Vérification de la présence de caractères non désirés
 if(($login!=strip_tags($login))||($mdp1!=strip_tags($mdp1))) {
  $erreur="Caractères non autorisés dans le login ou le mot de passe.";
  header("location:inscription.php?erreur=".$erreur);
  exit;
 }
  

// Le login est-il déjà pris ?
$resultat = getUserByLogin($login);
if(mysqli_num_rows($resultat)!=0) {
   // Le login est déjà pris !
   $erreur="Login%20déjà%20utilisé";
   header("location:inscription.php?erreur=".$erreur);
   exit;
} else  {
   if($resultat = addUser($login,$mdp) ) {
      // Enregistrement OK, on cherche l'id et on crée une session
      $new_id =  mysqli_insert_id($lien);
      $_SESSION['id'] = $id;
      // Retour à la page de jeu
      header("location:jeu.php");
      exit;
   }  else  {
      // Problème d'enregistrement
      $erreur="Problème d'enregistrement";
      header("location:inscription.php?erreur=".$erreur);
      exit;
   }
}


EDIT : Correction parenthèse en trop ligne 14

1
David987 Messages postés 121 Date d'inscription samedi 19 décembre 2015 Statut Membre Dernière intervention 16 octobre 2022 1
Modifié le 16 déc. 2021 à 21:09
Bonjour,

Je pense que tu travaille en local donc je suppose que tu n'a pas de nom d'utilisateur personnalisé ni de mot de passe donc au lieu de :

if($lien=mysqli_connect("localhost", "test", "test", "projet"))

essaye plutôt ça :

if($lien=mysqli_connect("localhost", "root", "", "projet"))


Ensuite, est-tu sûr que ta variable $login contient bien quelque chose ?
Tu peux retirer les %20 de ta variable $erreur.

Mais utilise les balises <code> pour mettre ton code ici.

Et se serais mieux si tu pouvais fournir ton code complet car, compliqué vue qu'il manque des informations comme le contenu de la variable $login par exemple.

Ah oui et aussi, tu fait une redirection header() alors fait bien attention à ce qu'il n'y ai aucun code html ni d'espace ni de saut de ligne avant.
0
Xaxax2000 Messages postés 63 Date d'inscription samedi 20 octobre 2018 Statut Membre Dernière intervention 30 avril 2022 1
16 déc. 2021 à 21:17
Merci de cette réponse rapide,
voici mon code

<?php
session_start();
// Ceci est un fichier qui ne génère pas d'affichage
// Est-on passé par l'inscription ?
if(!isset($_POST['insc']))
{
// non, on retourne à l'index
header("location:index.php");
}
// OK, on vérifie la présence des infos
if((!isset($_POST['login']))||(!isset($_POST['mdp']))||(!isset($_POST['mdp2'])))
{
// Soucis dans la transmission, on renvoie
$erreur="Problème de transmission.";

header("location:inscription.php?erreur=".$erreur);

}

// Tout est là, on vérifie maintenant que les chaînes sont correctes
$login=$_POST['login'];
$mdp1=$_POST['mdp'];
$mdp2=$_POST['mdp2'];

if(($login=="")||($mdp1=="")||($mdp2==""))
{
$erreur="Une donnée n'a pas été saisie.";
header("location:inscription.php?erreur=".$erreur);
}

if($mdp1!=$mdp2)
{
$erreur="Mots de passe différents.";
header("location:inscription.php?erreur=".$erreur);
}

// Vérification de la présence de caractères non désirés
if(($login!=strip_tags($login))||($mdp1!=strip_tags($mdp1)))
{
$erreur="Caractères non autorisés dans le login ou le mot de passe.";
header("location:inscription.php?erreur=".$erreur);
}


// Tout est OK, on peut enregistrer !
if($lien=mysqli_connect("localhost", "root", "", "projet")) {
// Le login est-il déjà pris ?
$resultat=mysqli_query($lien,"SELECT * FROM utilisateurs WHERE login='".$login."'");
if(mysqli_num_rows($resultat)!=0)
{
// Le login est déjà pris !
$erreur="Login%20déjà%20utilisé";
header("location:inscription.php?erreur=".$erreur);
}

else
{
if($resultat=mysqli_query($lien,"INSERT INTO utilisateurs (login,mdp) VALUES ('".$login."',SHA1('".$mdp1."'))"))
{
// Enregistrement OK, on cherche l'id et on crée une session
$resultat=mysqli_query($lien,"SELECT * FROM utilisateurs WHERE login='".$login."'");
$ligne=mysqli_fetch_array($resultat);
echo "SELECT * INTO utilisateurs WHERE login='".$login."'";
echo $ligne['id'];
$_SESSION['id']=$ligne['id'];
// Retour à la page de jeu
header("location:jeu.php");
}
else
{
// Problème d'enregistrement
$erreur="Problème d'enregistrement";
header("location:inscription.php?erreur=".$erreur);
}
}
}
else
{
// Erreur de connexion à la base !
$erreur="Connexion%20impossible%20à%20la%20base";
header("location:inscription.php?erreur=".$erreur);
}

j'ai modifié la ligne mais pas le header.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Xaxax2000 Messages postés 63 Date d'inscription samedi 20 octobre 2018 Statut Membre Dernière intervention 30 avril 2022 1
17 déc. 2021 à 06:52
Bonjour,
merci de vos réponses.
je souhaite attendre un peu d'attendre de bien connaître le php avant de me mettre au cryptage de mot de passe.
j'ai essayé avec votre code jordane45, et j'ai d'abord eu une erreur me disant que y'avait une ) en trop ligne 12 que j'ai corrigé en supprimant et ensuite quand j'entre un mot de passe dans l'inscription, cela me dit mot de passe incorrect.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
17 déc. 2021 à 08:33
Quel est le message d'erreur exactement ?
car rien, dans le code actuel ne contient de message concernant un mot de passe incorrecte ...
0
Xaxax2000 Messages postés 63 Date d'inscription samedi 20 octobre 2018 Statut Membre Dernière intervention 30 avril 2022 1
Modifié le 17 déc. 2021 à 19:44
Voici le message:

je pense que c'est dû à cette partie:

if($mdp1 = $mdp2) {
$erreur="Mots de passe différents.";
header("location:inscription.php?erreur=".$erreur);
exit;
}
0
Salut comment traduiriez vous en français ce bloc de code?

L' opérateur de comparaison est faux au passage, pour une égalité il faut utiliser le symbole "=="(ou " ===" pour une égalité stricte) et non "="(qui est un symbole d'attribution de variable, exemple $a='ma variable' va créer la variable $a avec pour contenu le texte 'ma variable')
mais dans tous les cas ça semble plutôt faire le contraire de ce qui serait logique:

Si le mot de passe et sa confirmation sont égaux alors indiquer une erreur.
Rien ne vous choque, quel est le but de la vérification? et comment le programme doit utiliser la confirmation du mot de passe(dernière ligne qui doit correspondre à la variable $mdp2 si $mdp1 provient du second champ de formulaire ou inversement si c'est codé avec les pieds)

C'est plutôt l'inverse qui devrait indiquer une erreur:

Si le mot de passe et sa confirmation sont différents alors c'est une erreur.

Ici la liste des opérateurs de comparaison en PHP:

https://www.php.net/manual/fr/language.operators.comparison.php

Au passage je ne sais pas où vous avez récupéré ce PHP où les exercices mais ça semble pas vraiment terrible, par exemple mysqli_query est à proscrire pour utiliser PDO(notation objet)
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
17 déc. 2021 à 21:44
Il y a un point d'exclamation qui a disparu
if($mdp1 != $mdp2) {
0