Page 1 sur 2

tirer au hasard 5 lettres de l'alphabet

Posté : 19 avr. 2006, 09:58
par El doc
Stlm !!

Je débute en php et voudrais savoir comment puis-je sortir 5 lettres au hasard de l'alphabet ?

El doc

Posté : 19 avr. 2006, 10:02
par jpaul
Je ne te donne pas la solution ?
Tu préfère des pistes pour mieux apprendre ?

Regarde les fonctions :
rand()
et
substr()
tu auras peut être aussi besoin de strlen() pour passer en paramètre à rand le nombre de caractères qui se trouvent dans la chaîne où tu les tire...

L'idée est de construire une chaine avec tes lettres dans laquelle tu va aller puiser les caractères au hazard.
Si tu ne veux pas doublon, il faut retirer les lettres de la chaîne de départ à chaque fois que tu en tire une...

tirer au hasard 5 lettres de l'alphabet

Posté : 19 avr. 2006, 11:47
par El doc
Re,

Entre-temps j'étais parti sur une autre piste à savoir les tableaux mais je rencontre un problème particulier. En faisant :
$alphatab=array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
while ($i<200){
$indices = array_rand($alphatab,3);
$q2="update matable set monchamp='".$i;
foreach($indices as $keys) {
echo $alphatab[$keys];
}
$q2 .= "'";
echo $q2."<br>";
$i++;
L'echo de ma requête me donne par exemple :
QTYupdate matable set monchamp='250'
alors que j'attends/ca devrait me donner :
update matable set monchamp='250QTY'

Quelqu'un a une idée du pourquoi du comment ?

El doc

Posté : 19 avr. 2006, 11:54
par Ryle
Il ne fait que ce que tu lui demande :)
while ($i<200){ // tant que $i est inférieur à 200
  $indices = array_rand($alphatab,3); // récupère 3 valeurs au hazard de $alphatab dans $indices
  $q2="update matable set monchamp='".$i; // renseigne $q2
  foreach($indices as $keys) { // pour chaque élément de $indices
    echo $alphatab[$keys]; // affiche l'élément
  } 
  $q2 .= "'"; // complete $q2
  echo $q2."<br>"; // affiche $q2
  $i++; // incrémente $i
}

Posté : 19 avr. 2006, 12:17
par El doc
Il me met toujours les 3 lettres avant mon nombre alors qu'elles viennent après !

J'obtiens toujours une requête bizarre :

QXYupdate matable set monchamp='200'

:?

El doc[/b]

Posté : 19 avr. 2006, 12:22
par Ryle
Vi mais ca c'est normal, je n'ai fait que décrire ce que tu lui demandais de faire pour que tu vois bien que l'instruction "afficher l'élément" était appellé avant l'instruction "afficher $q2" et qu'il était tout à fait logique que ceux-ci soient donc affichés en premier... :)

A toi de voir comment corriger maintenant, n'hésite pas à prendre une feuille et un crayon et à suivre ton code pas à pas pour noter ce qui sera affiché et dans quel ordre :)

Posté : 19 avr. 2006, 13:31
par El doc
J'ai réussi avec un peu de logique (merci ryle ;)) à écrire la requête dans le bon ordre. Par contre, je ne vois pas mais alors vraiment pas comment exécuter ma requête avec le mysql_query dans ce contexte :(

Si une âme charitable...

El doc

Posté : 19 avr. 2006, 13:55
par Ryle
Pourrais tu être un peu plus précis sur ce que tu veux faire exactement, parce que là, en dehors de la récupération des 3 lettres, c'est pas très évident :)

Pour l'exécution de ta requête, au lieu de mettre des echo pour afficher les valeurs, tu les ajoutes à la suite dans une chaine ($q2 faisant très bien l'affaire), et une fois que celle ci est prête, au lieu de l'afficher à son tour, tu la passes dans ton mysql_query() pour que la requête soit exécutée :)

Posté : 19 avr. 2006, 13:58
par jpaul
Sauf erreur, mysql_query c'est un nouvel élément, tu n'en avais pas encore parlé.
Que veux tu récupérer ?
Un petite piste, phpMyAdmin si tu ne l'as pas, à ta place, je demanderais à google de me le trouver.
Une fois installé, tu peux administrer ce que tu veux (en mysql) et faire des tests...

Posté : 19 avr. 2006, 13:59
par El doc
En clair, je cherche à générer un chiffre qui s'incrémente avec x lettres derrière. Ensuite, à chaque boucle j'update en base...

El doc

Posté : 19 avr. 2006, 14:04
par jpaul
Ben, comme te l'as dit Ryle, au lieu de faire au lieu de faire echo, tu concatènes chaque lettre tirée dans une variable préalablement initialisée à vide ensuite, tu pourras concaténer des chaînes de caractères pour construire ta réquête...

Ca pourrait ressembler à :
$q2="update matable set monchamp='".$i.$mes_lettres_tirées."';";

Posté : 19 avr. 2006, 14:12
par Invité
On y vient, c'est ce que je cherche à faire depuis le début mais je ne sais pas comment alimenter ma variable $mes_lettres_tirees :roll:
Après, pour la concaténation, je n'ai pas de problème ;)

El doc

Posté : 19 avr. 2006, 14:33
par El doc
On y vient, c'est ce que je cherche à faire depuis le début mais je ne sais pas comment alimenter ma variable $mes_lettres_tirees :roll:
Après, pour la concaténation, je n'ai pas de problème ;)

El doc
C'était moi, désolé :oops:

Posté : 19 avr. 2006, 14:38
par jpaul
Pourtant, tu as tous les éléments, faut pas avoir peur du code ;)

Tu peux essayer de concaténer dans $q2 comme l'a suggéré Ryle :
$alphatab=array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
while ($i<200){
$indices = array_rand($alphatab,3);
$q2="update matable set monchamp='".$i;
foreach($indices as $keys) {
//echo $alphatab[$keys];
$q2 .= $alphatab[$keys];
}
$q2 .= "'";
echo $q2."<br>";
$i++;
Au lieu d'afficher par echo (mis en commentaire) tu concatènes.

Posté : 19 avr. 2006, 17:47
par yuuzhantar
voila un truc qui peut etre interessant

a toi de le modifier
//Générer un mot de passe aléatoirement  
// de www.phpdebutant.org
<?php

$chaine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
 
 srand((double)microtime()*1000000);
 
// on génère un mot de passe de 6 caractères
 
 for($i=0; $i<6; $i++) 
{
$pass .= $chaine{rand()%strlen($chaine)};
}

echo $pass;
 
?>
 

voila