Insertion multiple dans une bdd mysql [Résolu]

Messages postés
121
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
5 mars 2007
- - Dernière réponse : cs_Camomille
Messages postés
7
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
- 21 oct. 2005 à 21:14
Bonjour à tous,
J'ai une base de données contenant 700 membres.
Je voudrai générer un mot de passe aléatoire, et faire ensuite un update dans ma base.
Le mot de passe doit être différent pour chaque membre.
Chaque membre à un id unique compris entre 10 et 704 inclus.
J'utilise une boucle for() mais je n'arrive pas à ce que je souhaites.
Voici mon code :


for($j
= 10; $j
<705; $j
++){
$req
= mysql_query
( "SELECT * FROM lh_membre where id= '"
. $j
."'"
);
$res
= mysql_fetch_array
($req
);

$chaine
= "abBCGKILHDEFcdefghijkmnPQRSTUVWXYpqrst23456789"
;
srand
((double)microtime
()*1000000);

for($i
=0; $i
<8; $i
++)
{
//mot de passe de 8 caractères
$pass
.= $chaine
[rand
()%strlen
($chaine
)];

}
$req1
= mysql_query
( "UPDATE lh_membre SET mdp= '"
. $pass
."' WHERE id ='"
.$j
."'"
);

}

Cette requête m'update bien tous les membres mais avec un mot de passe aléatroire identique pour tous.
Merci d'avance de votre aide
Afficher la suite 

14 réponses

Meilleure réponse
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
3
Merci
En regardant de plus pres :

for($j= 10; $j <705; $j++){
$pass = '';
$chaine = "abBCGKILHDEFcdefghijkmnPQRSTUVWXYpqrst23456789"
;
srand
((double)microtime
()*1000000);

for($i
=0; $i
<8; $i
++)
{
//mot de passe de 8 caractères

$pass

.= $chaine
[rand
()%strlen
($chaine
)];

}
$req1
= mysql_query
( "UPDATE lh_membre SET mdp= '"
. $pass
."' WHERE id ='"
.$j
."'"
);

}

Il est necessaire de vider $pass entre chaque iteration de ta boucle :-)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 125 internautes nous ont dit merci ce mois-ci

Commenter la réponse de malalam
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Hello,



Tu as mis trop de choses dans ton code...



for
($j
= 10; $j
<705; $j
++){
$chaine
= "abBCGKILHDEFcdefghijkmnPQRSTUVWXYpqrst23456789"
;

srand
((double)microtime
()*1000000);



for($i
= 0; $i
<8; $i
++)
{
//mot de passe de 8 caractères


$pass

. = $chaine
[rand
()%strlen
($chaine
)];

}
$req1
= mysql_query
( "UPDATE lh_membre SET mdp ='"
.$pass
."' WHERE id ='"
.$j
."'"
);

}
Commenter la réponse de malalam
Messages postés
121
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
5 mars 2007
0
Merci
Merci de ta réponse,
Ca faisait beaucoup en effet...
Néanmoins, j'arrive au même résultat que précédemment, à savoir un mot de passe généré identique pour tous les enregistrements.
le mot de passe ne se génère pas à chaque boucle.
Commenter la réponse de arnold002
Messages postés
121
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
5 mars 2007
0
Merci
C'est magnifique !
Merci de ton aide. J'ai bien compris d'où venait le problème mais je n'ai pas pensé un instant à vider la variable.

A++
Commenter la réponse de arnold002
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
0
Merci
Salut,



amélioration légère du code :



$chaine = "abBCGKILHDEFcdefghijkmnPQRSTUVWXYpqrst23456789" ;


for ($j =10; $j<705; $j++)

{
$pass = '';
for ($i =0; $i<8; $i++)

{ //mot de passe de 8 caractères
$pass . = $chaine [rand()%strlen($chaine)];

}

$req1 = mysql_query( "UPDATE lh_membre SET mdp= '" . $pass ."' WHERE id =".$j);

}

a +
<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
0
Merci
Mode pinaillage lol :



$chaine = 'abBCGKILHDEFcdefghijkmnPQRSTUVWXYpqrst23456789' ;


voilà ^^
<hr size ="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Lol, effectivement, inutile de reaffecter la chaine a chaque iteration.
Commenter la réponse de malalam
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
0
Merci
<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
7
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
0
Merci
Bonjour,

j'avais cru trouver une réponse au problème qui me préoccupe actuellement dans ce sujet.
Contrairement à Arnold002, le résultat à insérer est spécifique à l'id (num chez moi)
Ma requête de base est:

$requete =mysql_db_query($sql_bdd, "SELECT adulte_num FROM adultes WHERE Client_num=$num ; ",$db_link) or die(mysql_error());


$totadultes=mysql_num_rows($requete);

Y a-t-il un moyen d'insérer la centaine de "$totadultes" que produirait cette requête chez le num correspondant dans la table de destination qui contient déjà les num (id) concernés.

Mille mercis de me mettre sur la bonne voie.

Bien amicalement.

Camomille
Commenter la réponse de cs_Camomille
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
0
Merci
Salut,



en gros tu veux insérer ce que t'as retourné ta requête ?



t'as les requêtes du style INSERT INTO table SELECT champ,champ2 FROM table WHERE condition

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
7
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
0
Merci
Merci pour ta réponse.

Oui, c'est bien cela. Je ne comprends pas trop à quoi correspondent les paramètres
for($j=10; $j<705; $j
++)
de l'instruction. J'ai bien essayé en remplaçant $j par $num mais j'ai également la même valeur qui est entrée pour chaque enregistrement.
"num" est l'ident unique pour chaque client. Mais comme un premier tri à été fait, chaque "num" n'est plus le "précédent +1" !!
Si tu pouvais m'indiquer un bon tuto sur cette instruction, j'y arriverai peur-être!

Peut-être que je me trompe complètement et qu'il faudrait employer une autre instruction pour faire ce que je veux ?!!

Un grand merci pour vos conseils ou commentaires.

Bien amicalement

Camomille
Commenter la réponse de cs_Camomille
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Hello,



si j'ai bien compris :



$requete =mysql_db_query($sql_bdd, "SELECT adulte_num FROM adultes WHERE Client_num=$num ; ",$db_link) or die(mysql_error());

$totadultes=mysql_num_rows($requete);

for ($i = 0; $i < $totadulte; $i++) {

// ta requête d'insertion avec la condition sur $num

}
Commenter la réponse de malalam
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
0
Merci
mais là tu vas faire autant de requêtes que $totadulte autant dire que tu peux cramer ton serveur rapidement.



t'as essayé le INSERT SELECT ?

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
7
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
0
Merci
J'emploie un INSERT SELECT en premier lieu pour filtrer les clients pour lesquels un calcul doit être fait. Leurs coordonnées et leur id (Client_num) sont insérés dans une table vide .

$requete=mysql_db_query($sql_bdd,"INSERT INTO forfaits(Client_num, nom)
SELECT DISTINCT num, Nom FROM clients WHERE Client_annee=1 AND EMPLACEMENT>0
ORDER BY Nom",$db_link) or die(mysql_error());

Comme cette table contient un champ auto incrémenté (numero), un petit script "maison" va chercher à quel Client_num orrespond "numero + 1" et renvoie la serie de requêtes pour le client suivant.
Mais tout cela reste du "bricolage"!! Le processus des requêtes se plante à chaque coup. Un petit test en remplaçant le "header" vers les nouvelles requêtes par un lien à cliquer m'a permis de réussir les 97 calculs! Mieux encore, en insérant une page créant un temps mort entre les requêtes de chaque client permet de tout faire marcher sans encombres!

<?
$number=@$_GET["number"];
$number_next=($number+1);


?>


<html>


<head>
<meta http-equiv="refresh" content="2;URL=choix_client.php?number=<? echo "$number"; ?>">
</html>

Je sais bien que tout cela n'a rien de pro mais j'essaye d'en apprendre tous les jours. 8 pages php sont appelées pour chaque client!! Oui, je sais !!!!!!!!

Merci pour vos bons conseils et bon week end à tous.

Bien amicalement.

Camomille
Commenter la réponse de cs_Camomille