Insertion multiple dans une bdd mysql

Résolu
arnold002 Messages postés 121 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 5 mars 2007 - 10 mai 2005 à 15:46
cs_Camomille Messages postés 9 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 1 novembre 2023 - 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

14 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 mai 2005 à 17:02
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 :-)
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 mai 2005 à 16:38
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
."'"
);

}
0
arnold002 Messages postés 121 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 5 mars 2007
10 mai 2005 à 16:48
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.
0
arnold002 Messages postés 121 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 5 mars 2007
10 mai 2005 à 17:10
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
10 mai 2005 à 20:56
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>
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
10 mai 2005 à 20:57
Mode pinaillage lol :



$chaine = 'abBCGKILHDEFcdefghijkmnPQRSTUVWXYpqrst23456789' ;


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




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 mai 2005 à 08:37
Lol, effectivement, inutile de reaffecter la chaine a chaque iteration.
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
11 mai 2005 à 18:39
<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
cs_Camomille Messages postés 9 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 1 novembre 2023
20 oct. 2005 à 14:35
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
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
20 oct. 2005 à 14:38
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>
0
cs_Camomille Messages postés 9 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 1 novembre 2023
20 oct. 2005 à 17:18
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
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
21 oct. 2005 à 09:05
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

}
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
21 oct. 2005 à 16:34
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>
0
cs_Camomille Messages postés 9 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 1 novembre 2023
21 oct. 2005 à 21:14
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
0
Rejoignez-nous