For qui ne s'arrête pas

Résolu/Fermé
Daniel - 10 déc. 2020 à 06:40
 Daniel - 10 déc. 2020 à 07:58
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
A voir également:

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 déc. 2020 à 07:23
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
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