Aide PHP/HTML
Fermé
Utilisateur anonyme
-
16 déc. 2021 à 21:02
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 - 17 déc. 2021 à 21:44
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 - 17 déc. 2021 à 21:44
A voir également:
- Aide PHP/HTML
- Editeur html - Télécharger - HTML
- Easy php - Télécharger - Divers Web & Internet
- Br html - Forum HTML
- Retour a la ligne php ✓ - Forum PHP
- Espace html ✓ - Forum HTML
6 réponses
David987
Messages postés
120
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
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
Peux être amélioré comme suit :
Alors pour la partie qui pose problème :
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é.
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é.
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 711
Modifié le 17 déc. 2021 à 08:33
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
EDIT : Correction parenthèse en trop ligne 14
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
David987
Messages postés
120
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
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 :
essaye plutôt ça :
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.
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.
Utilisateur anonyme
16 déc. 2021 à 21:17
16 déc. 2021 à 21:17
Merci de cette réponse rapide,
voici mon code
j'ai modifié la ligne mais pas le header.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
17 déc. 2021 à 06:52
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.
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.
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 711
17 déc. 2021 à 08:33
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 ...
car rien, dans le code actuel ne contient de message concernant un mot de passe incorrecte ...
Utilisateur anonyme
Modifié le 17 déc. 2021 à 19:44
Modifié le 17 déc. 2021 à 19:44
Voici le message:
je pense que c'est dû à cette partie:
je pense que c'est dû à cette partie:
if($mdp1 = $mdp2) {
$erreur="Mots de passe différents.";
header("location:inscription.php?erreur=".$erreur);
exit;
}
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)
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)
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 711
17 déc. 2021 à 21:44
17 déc. 2021 à 21:44
Il y a un point d'exclamation qui a disparu
if($mdp1 != $mdp2) {
Modifié le 16 déc. 2021 à 21:30
À corriger par
Aucun intérêt..