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
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

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
9
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
9
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
9
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
7
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
5 avril 2008

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
9
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
7
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
5 avril 2008

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
9
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
7
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
5 avril 2008

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