For qui ne s'arrête pas

Résolu
Daniel -  
 Daniel -
Bonjour,

A partir d'une table contenant ID, MdpClair, MdpCrypte, je souhaiterai pour chaque MdpClair
récupérer le MdpCrypte.
La requête pour récupérer les ID et les MdpClair fonctionne (j'arrive à les afficher). J'ai également le nombre de lignes à traiter pour la boucle for mais ensuite la boucle for ne s'arrête pas à chaque ligne pour attendre le submit avant le prochain $i
La variable $mdp est bien dans l'input comme souhaité mais il y a autant d'input que d'enregistrement. ;-(

Voici mon code :
 
<?php
		//activation de l'affichage des erreurs PHP
		error_reporting(E_ALL);
		ini_set('display_errors', TRUE);
		ini_set('display_startup_errors', TRUE);
		
		//on inclut le fichier de connexion à la bdd
		require_once "./secure/cnxBdd.php";
?>

<!DOCTYPE html>
<html>
<head>
<TITLE>Cryptage d'un mot</TITLE>
</head>

<body>

<?php 

  $table = $bdd->query('SELECT ID, MdpClair FROM Identifiants_ANEG');
  $table->execute();
  $table_bdd = $table->fetchall();

  // Passage en commentaire après vérification de la présence des données
/*
  foreach($table_bdd as $row){
	echo '- '.$row["ID"].' - '.$row["MdpClair"].'<br>';
	} 
*/

// Compte le nb de ligne à traiter
$max = $table->rowCount(); // $max = nombre d'éléments de $table
echo $max .'<br>';

// Boucle pour valider le mdpClair et généré le MdpCrypte
for( $i = 0; $i < $max; $i++ ) 
	{
    echo $table_bdd[$i]['MdpClair'].'<br>';
	$mdp=$table_bdd[$i]["MdpClair"];

    echo 'Cette page sert à utiliser le cryptage du serveur pour remplir le fichier .htpasswd<BR>';
    echo '<BR>';
    echo '<form action="'. $_SERVER['REQUEST_URI'] .'">';
    echo '<input type="text" name="mdp" value="'. $mdp .'">';
    echo '<input type="submit" value="Crypter !">';
    echo '</form>';

     if ( isset($_GET['mdp']))
          {
          echo 'Mot de passe en clair: ' . $_GET['mdp'] . '<BR>Mot de passe crypté :' . crypt( $_GET['mdp'] );

/*
étape suivante
$maj = $bdd->query('UPDATE Identifiants_ANEG SET MdpCrypte = crypt ($_GET['mdp'])');
$maj->execute();
*/
          }
}

?>

</body>
</html> 


Merci d'avance pour m'aider à comprendre ce problème qui empêche la boucle de s'arrêter à chaque enregistrement.
Ce n'est pas tant le défaut d'affichage qui me gêne (ça, à la limite je m'en tape), mais c'est plus pour la suite avec l'update, j'ai comme le pré-sentiment que je 1er MdpCrypte créé va être dans toutes les lignes de la table.

Daniel

Configuration: Windows / Firefox 83.0

2 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Avant tout, je t'invite à lire et à appliquer les conseils donnés ici :
    https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

    Ainsi que là :
    https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

    Ensuite, je pense qu'il est préférable d'utiliser la fonction password_hash plutôt que la fonction crypt.

    Bref, ton code devrait ressembler à un truc du genre
    
    <?php
    		//activation de l'affichage des erreurs PHP
    		error_reporting(E_ALL);
    		ini_set('display_errors', TRUE);
    		ini_set('display_startup_errors', TRUE);
    		
    		//on inclut le fichier de connexion à la bdd
    		require_once "./secure/cnxBdd.php";
        
      
      //Liste des mots de pass
      $sql = 'SELECT ID, MdpClair FROM Identifiants_ANEG';
      try{
        $table = $bdd->prepare($sql);
        $table->execute();
        $table_bdd = $table->fetchAll();//On stocke le résultat de la requête dans un array
      }catch(Exception $e){
        echo "Erreur : " . $e->getMessage();
      }
      
      
      //récupération PROPRE des variables du submit AVANT de les utiliser
      $mdp = !empty($_POST['mdp']) ? $_POST['mdp'] : NULL;*
      $id = !empty($_POST['id']) ? $_POST['id'] : NULL;
      
      if($mdp && $id ){
        
        $passwordCrypt = password_hash($mdp); // ou crypt($mdp) si tu y tiens...
        
        $sql = 'UPDATE Identifiants_ANEG SET MdpCrypte = :mdpcrypt WHERE ID=:id';
        $datas = array(':mdpcrypt'=>$passwordCrypt , ':id'=>$id);
        try{
          $table = $bdd->prepare($sql);
          $table->execute($datas);
        }catch(Exception $e){
          echo "Erreur : " . $e->getMessage();
        } 
        
      }
    ?>
    
    <!DOCTYPE html>
    <html>
      <head>
        <title>Cryptage d'un mot</title>
        <meta charset="utf-8">
      </head>
    
      <body>
    
        <?php 
        // Boucle pour valider le mdpClair et généré le MdpCrypte
        foreach ($table_bdd as $K=>$V){
          $MdpClair = $V['MdpClair'];
          $ID = $V['ID']; 
           echo 'Cette page sert à utiliser le cryptage du serveur pour remplir le fichier .htpasswd<BR>';
           echo '<BR>';
           echo '<form action="" method="post">';
           echo '<input type="text" name="mdp" value="'. $MdpClair .'">';
           echo '<input type="hidden" name="id" value="'. $ID .'">'; // permet de savoir l'id du password à hasher
           echo '<input type="submit" value="Crypter !">';
           echo '</form>';
        }
        ?>
    
      </body>
    </html> 
    

    1
  2. Daniel
     
    Un grand merci Jordane45.
    Pour le crypt, j'ai pas de préférence absolue. Je ne connaissais même pas l'existence du password_hash. Mais à la lecture de la littérature, il n'y a pas photo ;-)
    Merci encore et une très bonne journée
    Daniel
    0