Page authentification

Bonjour,

Je voudrais faire un site avec une partie administration accès par user et mot de passe. J'avais un site qui fonctionné dans les année 2000 hélas je n'arrive plus a le faire marché. Les fonction mysql sont trop ancienne . Quelqu'un pourrais m'aider ? Je précise que j’étais développeur web mais suite a accident cérébral j'ai perdu tous ce que j'ai appris.

Merci de votre aide

PS je peux vous envoyer mon ancien code


Windows / Firefox 108.0

10 réponses

  1. Modérateur

    Bonjour,

    Nous pouvons t'aider corriger ton code sur des points spécifiques ... mais nous ne le ferons pas à ta place.

    Si tu désires de l'aide, pense à poster le code concerné et à nous indiquer les éventuels messages d'erreur.

    ( De préférence... un souci à la fois ... et ...une discussion par souci )


    1. Bonjour,

      Merci pour ton aide.

      <?php
      
      //class Mysql 
      class BaseDeDonnee
      {
      	private $oLinkSql;// la connexion mysql en cours
      	private $oResult;// le resultat de la requete executee
      
      	private $aConnect;// la configuration de la base de donnees
      	 
      	// ---------------------------------- __construct() ----------------------------------------------------------
      	public function __construct()
      	{
      		// initialisation des proprietes de la classe
      		$this->aConnect 	= array();
      		
       		// local
      		$ip 			= "localhost";
      		$login			= "root"; // le login
      		$password		= "t"; // mot de passe
      		$database		= "asticlub";
      		
      		// adresse id  $_SERVER["REMOTE_ADDR"]; 
      		
      		if ( $this->oLinkSql = @mysqli_connect( $this->aConnect['ip'], $this->aConnect['login'], $this->aConnect['password'], $this->aConnect['database'], $this->aConnect['port'] ) )
      		{
      			$is_erreur = false ;
      			$sql = 'SET CHARACTER SET \'utf8\''; 
      			$this->query($sql); 
      			$sql = 'SET collation_connection = \'utf8_general_ci\''; 
      			$this->query($sql);	
      			
      		}
      		else // erreur de connexion a la base -> redirection sur une page d'erreur
      		{																																									    
      			echo "<meta http-equiv=\"refresh\" content=\"0; URL=erreurs/erreurBDD.htm\">";// possibilitee d'utiliser un  header('Location: erreurs/erreurBDD.htm');
      			exit;
      		}
      		
      	 }

      Not Found

      The requested URL was not found on this server.


      Apache/2.4.54 (Win64) PHP/8.0.26 mod_fcgid/2.3.10-dev Server at localhost Port 80

      voila ce que sa m'affiche

      Merci


      1. Modérateur

        Bonjour,

        Le message d'erreur n'indique pas une erreur de code .. mais le fait qu'il ne trouve pas l'url de la page que tu lui demande.

        Sûrement le fichier  erreurs/erreurBDD.htm   que tu appels dans ta redirection.

    2. J'ai modifié par un echo'Erreur de connection<br>';

      et s'est ce qu'il m'affiche donc je pense que ma connection n'ai pas bonne


      1. Modérateur

        nous sommes d'accord.

        Et si tu regardes le code de connexion à ta bdd .. tu vois qu'il utilise une variable $a_connect  .... et non pas les informations de connexion que tu as écris toi même ...

        A mon avis, le code serait à modifier comme ceci :

        		// initialisation des proprietes de la classe
        		$this->aConnect 	= array();
        		
         		// local
        		$this->aConnect['ip'] 			= "localhost";
        		$this->aConnect['login'] 			= "root"; // le login
        		$this->aConnect['password'] 		= "t"; // mot de passe
        		$this->aConnect['database'] 		= "asticlub";
        
        

        Tu devrais également retirer le arobase devant l'appel de la fonction myslqiconnect ... ça masque les éventuelles erreurs ( je te déconseille donc d'en utiliser où que ce soit dans ton code.. )

        A la place,  regarde l'éventuelle erreur via la fonction mysqli_error

        if (mysqli_connect_errno()) {
          echo "Failed to connect to MySQL: " . mysqli_connect_error();
          exit();
        }
    3. Voila le message maintenant, j'ai retirer tous les @

      ( ! ) Fatal error: Uncaught Error: Call to undefined method BaseDeDonnee::seConnecter() in C:\wamp64\www\Asticlub\Page_Admin\login.php on line 14( ! ) Error: Call to undefined method BaseDeDonnee::seConnecter() in C:\wamp64\www\Asticlub\Page_Admin\login.php on line 14Call Stack#TimeMemoryFunctionLocation10.0002364480{main}( )...\login.php:0
      ( ! ) Fatal error: Uncaught TypeError: mysqli_close(): Argument #1 ($mysql) must be of type mysqli, null given in C:\wamp64\www\Asticlub\BaseDeDonnee.php on line 154( ! ) TypeError: mysqli_close(): Argument #1 ($mysql) must be of type mysqli, null given in C:\wamp64\www\Asticlub\BaseDeDonnee.php on line 154Call Stack#TimeMemoryFunctionLocation10.0013366576BaseDeDonnee->__destruct( )...\BaseDeDonnee.php:020.0013366576mysqli_close( $mysql = NULL )...\BaseDeDonnee.php:154


      1. Modérateur

        Il va falloir nous montrer le code complet de ta class BaseDeDonnee et accessoirement celui de ta page login

    4. Base de donné:

      <?php
      
      //class Mysql 
      class BaseDeDonnee
      {
      	private $oLinkSql;// la connexion mysql en cours
      	private $oResult;// le resultat de la requete executee
      
      	private $aConnect;// la configuration de la base de donnees
      	 
      	// ---------------------------------- __construct() ----------------------------------------------------------
      	public function __construct()
      	{
      		// initialisation des proprietes de la classe
      		$this->aConnect 	= array();
      		
       		// local
      		$this->aConnect['ip'] 				= "localhost";
      		$this->aConnect['login'] 			= "root"; // le login
      		$this->aConnect['password'] 		= "t"; // mot de passe
      		$this->aConnect['database'] 		= "asticlub";	 		
      		
      		// local
      		//$ip 			= "localhost";
      		//$login		= "root"; // le login
      		//$password		= "t"; // mot de passe
      		//$database		= "asticlub";
      
      		
      		
      		if (mysqli_connect_errno()) 
      		{
        			echo "Erreur de connection a MySQL: " . mysqli_connect_error();
        			exit();
      		
      		}
      		
      	 }
      	
      	
      	
      	// -----------------------------------------------------------------------------------------------------------
      	// ------------------------------------------- PUBLIC FUNCTIONS  ---------------------------------------------
      	// -----------------------------------------------------------------------------------------------------------
      	
      
      
      	/**
      	 * Permet de recuperer les parametres de connexion de la base.
      	 * Utile pour d'autre scripts php.
      	 *
      	 * @return : un tableau avec les parametres de connexion de la base
      	 */
      	public function getConfig()
      	{
      		return $this->aConnect;
      	} 
      	
      	
      	/**
      	 * Execute une requete mysql
      	 *
      	 * @param requete
      	 * @return : un message d'erreur ou l'objet avec le resultat de la requete
      	 */
      	public  function query($sSqlQuery)
      	{ 
      		if ( $this->oResult = mysqli_query($this->oLinkSql,$sSqlQuery) ) return $this->oResult;
      		else return 'Query : '.$sSqlQuery.' - error : '.mysqli_error($this->oLinkSql);
      	}	
      	 
      	 
      	 
      	/*
      	 * Donne le resultat de la requete sous forme d'objet
      	 *
      	 * @param $oResultQuery : le resultat renvoye par une requete pour obtenir un objet
      	 */
      	public function getObject($oResultQuery = NULL)
      	{
      		// dans le resultat d'une autre requete
      		if($oResultQuery!=NULL)
      		{
      			return mysqli_fetch_object($oResultQuery);
      			//if ( @mysqli_error($this->oLinkSql) ) return @mysqli_error($this->oLinkSql);
      		}
      		
      		// donne le resultat de la derniere requete executee
      		if ($this->oResult != NULL)
      		{
      			return mysqli_fetch_object($this->oResult);
      			//if ( @mysqli_error($this->oLinkSql) ) return @mysqli_error($this->oLinkSql);
      		}
      		
      	}
      
      	
      	
      	// ---------------------------------- getNumRows() ----------------------------------------------------------
      	/**
      	* @brief donne le nombre d'elements modifies par la requete
      	* Pratique dans le cas des INSERT
      	* 
      	* @return (integer) le nombre d'elements modifies par la requete
      	*/
      	public function getNumRows()
      	{
      		if( $this->oLinkSql != NULL && $this->oLinkSql != false)
      		{
      			return mysqli_affected_rows($this->oLinkSql);
      			//if (@mysqli_error($this->oLinkSql)) return @mysqli_error($this->oLinkSql);
      		}
      	}
      	
      	
      	// ---------------------------------- lastInsertId() ----------------------------------------------------------
      	/**
      	* @brief Retourne l'identifiant automatiquement généré par la dernière requête.
      	* Pratique dans le cas d'un INSERT ou UPDATE pour recuperer le dernier identifiant
      	* 
      	* @return (integer) le dernier identifiant insere 
      	*/
      	public function lastInsertId()
      	{
      		return mysqli_insert_id($this->oLinkSql);
      	}
      	
      	
      	
      	// -----------------------------------------------------------------------------------------------------------
      	// ----------------------------------------- Others ----------------------------------------------------------
      	// -----------------------------------------------------------------------------------------------------------
      
      
       	/**
      	* @brief
      	*
      	* @return 
      	*/
      	public function __destruct() 
      	{
       		$this->oLinkSql = NULL ;		
      		$b_rep = mysqli_close($this->oLinkSql);
      		if( $b_rep != true )
      			return 'Erreur closing sql connexion!';
       	}
      	
      	
      	
      	// ---------------------------------------- __toString() ----------------------------------------------------	
      	/**
      	 * @brief Returns the string representation of this instance.
      	 * 
      	 * @usage   echo(myObject) ou print(myObject)
      	 * @return  the string representation of this instance.
      	 */	
      	public function __toString() 
      	{
      		$s_classContent = "[Object ".__CLASS__."]<br />";
      
      		foreach($this as $prop => $value) 
      		{
      		 	$s_classContent .= "$prop => $value <br />";
      		}
      		 
      		return $s_classContent;
         	}
      	 
      }
      ?>

      1. Login

        <?php
        
        // pensez a ouvrir une connexion vers mysql ici
        require_once ('../BaseDeDonnee.php');
        
        
        $DB = new BaseDeDonnee();
        
        if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
          extract($_POST);
          // on recupère le password de la table qui correspond au login du visiteur
          $DB->nomUser=$login;
          $DB->motDePasse=$pass;
          $DB->seConnecter();
          $sql = "select pwd from tbl_user where login='".$login."'";
          // $req = mysqli_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
          //  $req = $DB->query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
          $req = $DB->database->mysqli_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysqli_error());
        
          // $data = mysql_fetch_assoc($req);
          $data = $req->fetch_assoc();
        
          if($data['pwd'] != $pass) {
            echo '<p>Mauvais login / password. Merci de recommencer</p>';
            include('login.htm'); // On inclus le formulaire d'identification
            exit;
          }
          else 
          {
            session_start();
            $_SESSION['login'] = $login;
            
            echo '<p>Identification réussis !</p>';
        	
          }    
        }
        else {
          echo '<p>Vous avez oublié de remplir un champ.</p>';
           include('login.htm'); // On inclut le formulaire d'identification
           exit;
        }
        
        
        ?>
        
        <html>
        <!-- Date de création: 19/10/2005 -->
        <head>
          <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
          <title>Login</title>
        <link rel="stylesheet" type="text/css" href="../Styles/styles_asti.css">
        
        </head>
        <body <p class= "fond"></p>
        <br>
        
        <p class= "entete" align="center" >Page d'identification !</p><br><br>
         <table border="1" cellpadding="0" cellspacing="0" bordercolor="#111111" style="border-style:double; border-width:3; border-collapse: collapse; padding-left:4; padding-right:4; padding-top:1; padding-bottom:1" id="AutoNumber1" bordercolorlight="#0000FF" bordercolordark="#FF00FF">
        		<tr>
        		<td  align="center" valign="middle"  style="border-width:3; border-style:double; padding-left:4; padding-right:4; padding-top:1; padding-bottom:1" bordercolor="#0000FF">
                <font size="4">Page d'accueil</font></td>
        		<td  align="center" valign="middle"  style="border-width:3; border-style:double; padding-left:4; padding-right:4; padding-top:1; padding-bottom:1" bordercolor="#0000FF">
                <a href="../Pages_Fr/Accueil.html">
                <img border="0" src="../images/drapeaux_Fr.gif" width="34" height="34"></a></td>
        		<td  align="center" valign="middle"  style="border-width:3; border-style:double; padding-left:4; padding-right:4; padding-top:1; padding-bottom:1" bordercolor="#0000FF">
                <a href="../Pages_De/Accueil.html">
                <img border="0" src="../images/drapeaux_De.gif" width="34" height="34"></a></td>
        	</tr>
        		<tr>
        		<td  align="center" valign="middle"  style="border-width:3; border-style:double; padding-left:4; padding-right:4; padding-top:1; padding-bottom:1" bordercolor="#0000FF">
                <font size="4" color="#000000">Ajouter une soirée</font></td>
        		<td  align="center" valign="middle"  style="border-width:3; border-style:double; padding-left:4; padding-right:4; padding-top:1; padding-bottom:1" bordercolor="#0000FF">
                <a href="Ajouter_Soiree.php">
                <img border="0" src="../images/drapeaux_Fr.gif" width="34" height="34"></a></td>
        		<td  align="center" valign="middle"  style="border-width:3; border-style:double; padding-left:4; padding-right:4; padding-top:1; padding-bottom:1" bordercolor="#0000FF">
                <a href="Ajouter_Soiree_de.php">
                <img border="0" src="../images/drapeaux_De.gif" width="34" height="34"></a></td>
        	</tr>
        		<tr>
        		<td  align="center" valign="middle"  style="border-width:3; border-style:double; padding-left:4; padding-right:4; padding-top:1; padding-bottom:1" bordercolor="#0000FF">
                <font size="4" color="#000000">Afficher les soirées</font></td>
        		<td  align="center" valign="middle"  style="border-width:3; border-style:double; padding-left:4; padding-right:4; padding-top:1; padding-bottom:1" bordercolor="#0000FF">
                <a href="Afficher_Soiree.php">
                <img border="0" src="../images/drapeaux_Fr.gif" width="34" height="34"></a></td>
        		<td  align="center" valign="middle"  style="border-width:3; border-style:double; padding-left:4; padding-right:4; padding-top:1; padding-bottom:1" bordercolor="#0000FF">
                <a href="Afficher_Soiree_de.php">
                <img border="0" src="../images/drapeaux_De.gif" width="34" height="34"></a></td>
        	</tr>
        
        
        </table>
        
        
        </body>
        </html>
        

        1. Je vous remercie de votre aide, c'est pas bien de vieillir et de ne plus avoir de mémoire ni de ce concentré.


          1. Modérateur

            Pas de quoi.

            Par contre.. en effet .. dans ta class 

            BaseDeDonnee

            aucune trace de la méthode 

            seConnecter();

            Je suppose que c'est normalement une fonction qui sert à l'utilisateur pour se loguer.

            Tu as du oublier de la remettre dans ta class.

            A noter qu'il ne faut pas stocker le mot de passe en clair dans la BDD..... il faut le hasher ( le crypter )

            Pour ça, je t'invite à regarder du côté des fonctions password_hash et password_verify

        2. Je vois pas comment faire pour la methode

          pour le hash je verrais plus tard quand j'aurais reussis a faire la connection.


          1. Modérateur

            Ben il te faut créer une fonction du nom de celle qui est recherchée, et y exécuter une requête SQL qui ira vérifier en base si ton utilisateur existe

        3. Bonjour,

          Pour le moment tous ce que j'essais ne marche pas je continu de chercher Merci


          1. Modérateur

            Si tu ne nous montres pas ce que tu as essayé ( sans oublié de nous donner les messages d'erreur ) ... impossible pour nous de te venir en aide.

        4. Bonjour désolé du retard pour vous répondre, pour le moment je mets tous de coté je dois être réopéré et j'arrive plus a me concentré Merci de vos aide je reviendrais vers vous prochainement.