Pb connexion à BDD via formulaire html + PHP

Résolu/Fermé
arscy Messages postés 173 Date d'inscription dimanche 26 janvier 2014 Statut Membre Dernière intervention 5 octobre 2023 - 30 juil. 2022 à 15:59
arscy Messages postés 173 Date d'inscription dimanche 26 janvier 2014 Statut Membre Dernière intervention 5 octobre 2023 - 30 juil. 2022 à 18:24

Bonjour,

Je ne suis pas certain d'être dans la bonne rubrique, N'hésitez pas à me signaler si je me suis trompé d'endroit!

Je suis en train de modeler un site internet sur mon réseau local pour l'instant et ai créé dans une première page (aka un fichier .php) un formulaire qui permet à un identifiant de se connecter au site internet.

cette première page redirige la personne qui se connecte à une deuxième page (un deuxième fichier), laquelle est censée vérifier la concordance des identifiant/mot de passe et rediriger vers une 3e page qui est l'accueil du profil connecté si tout correspond. Pour l'instant j'ai paramétré ma 2e page pour rester sur elle-même si tout fonctionne (et lorsque tout fonctionnera je redirigerai vers la 3e page).
Et chez moi, c'est à la deuxième étape que ça plante : Erreur 500.

Comme vous vous en doutez après un petit indice déposé plus haut, j'ai recours à du php pour gérer l'affichage des informations relatives à ma BDD.

Bref,  mon formulaire semble correct puisqu'il parvient à me rediriger vers ma deuxième page. J'ai recours à la méthode "post" pour ce faire.

Ci-dessous le tout début de code de ma 2e page:

 

<?php
	session_start();

	//VERIFICATION QUE CHAMPS NON VIDES
	if (!empty( htmlspecialchars(addslashes($_POST['pseudo'])) && htmlspecialchars(addslashes($_POST['mdp'])) ))
	{

		//connexion à la BDD
	    $mysqli=new mysqli('MonReseauLocal', 'MonPseudo', 'MonMotDePasse', 'LeNomDeMaBDD');

        if ($mysqli->errno)
        {
            echo "Erreur: pb de connexion à la BDD<br>";
            echo "Errno : " . $mysqli->connect_errno . "<br>";
            echo "Error : " . $mysqli->connect_error . "<br>";
        }

     //à partir d'ici je pose des variables et des requêtes pour accéder aux infos de la BDD
     //...
    }

?>

Avec le code ci-dessus, ça plante (erreur 500).
Si j'efface tout ce qui se trouve à l'intérieur de ma première conditionnelle, je parviens à accéder à la 2e page.
En effaçant des segments de code j'en arrive à la conclusion que c'est la connexion à la BDD qui me met dedans. Or les paramètres de connexion sont bons puisque je me sers des mêmes paramètres sur une autre page et ça fonctionne impeccablement.

Dans mon formulaire de connexion de la 1ère page j'ai bien 2 champs à remplir, que j'ai complétés avec ce type de html:

<form action="monDeuxiemeFichier.php" method="post">
	<label for="pname">Pseudo</label><br>
	<input type="text" id="pname" required name="pseudo"><br>
	<label for="pname">Mot de passe</label><br>
	<input type="password" id="pname" required name="mdp"><br><br><br>
	<button type="submit">SE CONNECTER</button>
</form>

La récupération de mes variables par la méthode POST me semble correcte également.

Sauriez-vous me dire ce qui plante dans ma procédure?
Je me suis pourtant basé sur une interface de connexion que j'avais faite par le passé et qui était fonctionnelle, je n'arrive pas à trouver le maillon faible.

Merci d'avance pour votre temps!

arscy


Linux / Chrome 103.0.5060.114

A voir également:

2 réponses

jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
30 juil. 2022 à 17:33

Bonjour,

Pour commencer,  l'instruction htmlspecialchar ne sert que pour de l'affichage .. en aucun cas pour "traiter" les données.

Ensuite, une erreur 500 indique une erreur côté serveur.

Comme tu es en "local" sur ton ordi .. je ne vois pas l'interet d'avooir modifié les infos de connexion à ta bdd pour les poster sur le forum..  Difficile pour nous de savoir si tu as mis les bonnes infos.

De plus, au lieu de répéter le code de connexion sur chacune de tes pages, stocke le dans un fichier à part que tu n'aura qu'à inclure dans tes pages. Ainsi, si tu modifies le user ou l'adresse de la bdd tu n'auras  à le faire qu'à un seul endroit..

Donc:

<?php
//Fichier cnxBdd.php :
// Fichier de connexion à la bdd .. pas besoin de répéter ce code X fois sur ton site..
// il suffirat d'inclure le fichier là où tu en as besoin..
$mysqli = new mysqli("localhost","my_user","my_password","my_db");

// Check connection
if ($mysqli -> connect_errno) {
  echo "Erreur de connexion à la bdd : " . $mysqli -> connect_error;
  exit();
}

Puis ton fichier devient :


<?php
error_reporting(E_ALL); // Affichage des erreurs PHP

//démarrage sessions
session_start();

//connexion à la bdd
require_once "cnxBdd.php";


//récupération PROPRE des variables AVANT de les utiliser
// pour cela, j'utilise un ternaire (sorte de if/else) et j'en profite pour supprimer
// les éventuels espaces superflus
$pseudo = !empty($_POST['pseudo']) ? trim($_POST['pseudo']) : NULL;
$mdp = !empty($_POST['mdp']) ? trim($_POST['mdp']) : NULL;

//si il y a un user et un password.. 
if($pseudo && $mdp ){

  //à partir d'ici je pose des variables et des requêtes pour accéder aux infos de la BDD
  //...
  //on vérifie si l'utilisateur existe
  $sql = "SELECT * FROM myTable WHERE pseudo = ? ";
  $stmt = $mysqli->prepare($sql);
  $stmt->bind_param("s", $pseudo);
  $stmt->execute();
  $result = $stmt->get_result();
  
  //L'utilsiateur a été trouvé ..
  if($result->num_rows > 0) {
     // ensuite on compare le mot de passe hashé en bdd avec celui transmis par le formulaire
     // (oui.. on ne stocke JAMAIS un mot de passe en clair en bdd.. )
     // Si tu ne sais pas comment faire, je t'invite à regarder la documentation des fonction password_hash  et password_verify
  }else {
    echo "aucun utilisateur trouvé avec ce pseudo";
  }
}

?>

1
arscy Messages postés 173 Date d'inscription dimanche 26 janvier 2014 Statut Membre Dernière intervention 5 octobre 2023 9
30 juil. 2022 à 18:02

Merci pour les éléments de réponse,

je prends note pour désigner un fichier à part pour stocker les éléments de connexion à la BDD, c'est effectivement bien plus pertinent que d'avoir à changer les paramètres page par page (un petit pas de plus dans l'apprentissage c'est cool).

Concernant le fait d'avoir modifié les éléments de connexion c'est simple : si je suis en mesure de traduire ce que j'ai écrit, c'est qu'à priori j'ai placé les bonnes informations au bon endroit (notamment pas de confusion entre le nom de connexion et le nom de la BDD).

Comme je babille encore dans le domaine qui m'amène à poser mes questions, un certain nombre de fonctions me sont inconnues en php, mais ça me donnera l'occasion d'aller creuser un brin du coup.

Ça n'explique pas mon souci pour l'instant, mais en restructurant un peu j'y verrai peut être un peu plus clair.

Affaire à suivre

0
arscy Messages postés 173 Date d'inscription dimanche 26 janvier 2014 Statut Membre Dernière intervention 5 octobre 2023 9
30 juil. 2022 à 18:24

Je retiendrai que la centralisation limite l'erreur dans mon cas de figure : la connexion à la BDD passe enfin_ j'ai une faute plus bas à présent mais ça devrait être réglé en restant méthodique.
Il me reste des interrogations concernant l'aspect gestion de la sécurité, mais à traiter dans un autre topic je suppose.

Merci pour les recommandations!

0