For qui ne s'arrête pas
Résolu
Daniel
-
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 :
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
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:
- For qui ne s'arrête pas
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Idm for mac - Télécharger - Téléchargement & Transfert
- Instagram for pc - Télécharger - Divers Communication
- Microsoft store download for pc - Guide
- Paramètre s'arrête systématiquement samsung - Forum Samsung
2 réponses
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
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>