loto php

lola3009
Invité n'ayant pas de compte PHPfrance

10 sept. 2014, 11:39

Bonjour à tous,

je dois réaliser un petit programme en php (tout sur une seule page) et je ne trouve pas du tout comment faire.
Ecrire une fonction qui initialise un tableau 7x7 avec les nombres de 1 à 49 et qui le retourne=>J'ai utiliser array mais je n'arrive pas à mettre des liens sur les numéros qui doivent être cliquables...
Quelles valeurs du programme peuvent-elles être déclarées en tant que constantes ?=> j'ai pensé aux numéros, et à la grille de loto mais rien ne marche dès que je met "define...".

Écrire la fonction qui écrit le code XHTML permettant d'afficher la grille de jeu dans un navigateur?? moi j'avais simplement fait un echo... mais la encore je ne sais pas comment mettre les liens.

Écrire la fonction realise_tirage(), qui procède au tirage aléatoire de six nombres différents entre 1 et 49, les stocke dans un tableau unidimensionnel et retourne ce tableau.=>je suis perdue

En utilisant le code écrit aux questions précédentes, donner le programme PHP permettant de réaliser le jeu de Loto en ligne.

Si quelqu'un peu m'aiguiller vous seriez d'une grande aide, c'est un devoir que je dois rendre mais étant novice en php je suis vraiement perdue, j'ai bien trouvée des aides sur internet mais des que je créer une fonction elle ne marche pas...

Eléphant du PHP | 113 Messages

10 sept. 2014, 15:54

DOC: http://php.net/manual/fr/function.rand.php

A aucun moment il me semble nécessaire d'avoir une constante...

Voici les fonctions avec des commentaires pour que tu comprennes ce que je fais

afficheTable($tab) {
   //$tab est le tableau 7x7 que tu as générer
   echo '<table>';
   // On parcours toutes les lignes du tableau
   for ($i=0; $i<count($tab); $i++) {
      echo '<tr>'; // nouvelle ligne
      // On parcours toutes les colonnes de la ligne courante
      foreach ($tab[$i] as $value) {
         echo '<td><a href="?numero=',$value,'">',$value,'</td>'; // nouveau numero cliquable qui renvoie une variable $_GET['numero'] avec le numéro cliqué
      }
      echo '</tr>'; // fermeture de la ligne
   }
   echo '</table>';
}

 realise_tirage() {
   //Initialisation du tableau
   $tab = array();
   //On tire 6 nombres...
   for ($i=0; $i<6; $i++) {
      //...allant de 1 à 49
      $tab[] = rand(1,49);
   }
   return $tab;
}

$tab[] => indique qu'on insère la valeur dans un nouveau champ

Mammouth du PHP | 2278 Messages

11 sept. 2014, 20:38

Cette fonction ne retourne pas nécessairement des nombres différents
function realise_tirage() {
//Initialisation du tableau
$tab = array();
//On tire 6 nombres...
for ($i=0; $i<6; $i++) {
//...allant de 1 à 49
$tab[] = rand(1,49);
}
return $tab;
}
Voici une mise en place possible du tableau

<?PHP
function afficheTable($tab) 
{
     print  "<form method = 'post' action = 'resultat.php' >
                     <table border = '1'>";
                            // On parcours toutes les lignes du tableau 
		/*Inutile d'utiliser count($table) puisqu'on sait qu'il ya 7 lignes. Qui plus est, on aurait dû extraire ce count
		$nb_lignes = count ($table);
		for  $i=0; $i< $nb_lignes; $i++)
		*/

                          for ($i=0; $i< 7 ; $i++)  // 7 parce qu'on démarre le tableau en 0
	           {
                              print "<tr>"; // nouvelle ligne
                              // On parcours toutes les colonnes de la ligne courante
                             foreach ($tab[$i] as $value) {
                                 print " <td><input type= 'checkbox' = name = 'choisis[]' value ='$value' />$value</td>";  
                                /* c'est checbox qui les rend cliquables; Le seul risque c'est que plus de 7 soient choisis; on gardera les 7 premiers*/
                       }
                      print "</tr>"; // fermeture de la ligne
            }
          print "
	     <button type = 'submit'>Valider son choix</button>
	</form>
	</table>";
}

/* Création du tableau */
$tab[0] = range (1, 7, 1);
$tab[1] = range (8, 14, 1);
$tab[2] = range (15, 21, 1);
$tab[3] = range (22, 28, 1);
$tab[4] = range (29, 35, 1);
$tab[5] = range (36, 42, 1);
$tab[6] = range (43, 49, 1);
afficheTable ($tab);
?>
resultat.php reste à écrire
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 113 Messages

12 sept. 2014, 09:37

J'ai en effet bâclé les règles du loto ^^'

J'ai fait que les numéros étaient des liens, comme à corriger sirakawa il faut que tu mettes des checkbox, je vais justifier le fait d'utiliser count($table) afin qu'on puisse utiliser cette boucle pour toute taille de tableau (ex: la forme du carton change => 3*9)

function realise_tirage() ; cette fonction retournait 6 valeurs de 1 à 49 mais non unique, pour que les nombres tirés soit unique il faut avoir une approche différente,
tant que le numéro n'est pas unique on retire un numéro, une autre solution consiste à crée une pile de tes numéros, puis à supprimée de la liste le numéro tiré,
function realise_tirage() {
   $tab = array();
   $busy = false; //numéro unique ?

   for ($i=0; $i<6; $i++) {
      do {
         $nb = rand(1,49);
         foreach ($tab as $val) {
            if ($busy = ($val == $nb))
               break;
         }
      } while ($busy);
      $tab[] = $nb;
   }
   return $tab;
}

lola3009
Invité n'ayant pas de compte PHPfrance

12 sept. 2014, 10:11

Merci pour votre aide. Je regarde cela attentivement mais ce n'est pas très évident.

voila la question pour les constantes et j'avoue ne pas trouver lesquelles je pourrais déclarer...: Quelles valeurs du programme peuvent-elles être déclarées en tant que constantes ? Écrire les déclarations PHP correspondantes.

Le tableau de départ n'est pas censé changé c'est peut etre ça?, il y a bien des liens (c'est ce qui est demandé) et ayant fait mon tableau, je n'arrive pas à surligner les numéros. Lorsque la personne clic pour choisir ses 6 numéros, ils se transforment en croix.
Ensuite il faut vérifier les numéros avec le tirage aléatoire qui est généré.

Mammouth du PHP | 2278 Messages

12 sept. 2014, 11:14

"je vais justifier le fait d'utiliser count($table) afin qu'on puisse utiliser cette boucle pour toute taille de tableau (ex: la forme du carton change => 3*9) :"
1 il faut lire l'énoncé qui demande de traiter un tableau précis.
2 il est absurde de mettre le count ($tableau) dans la boucle : à chaque itération la fonction est invoquée.
3 Jeme demande même si un foreach ne suffirait pas aussi bien pour les lignes que pour les colonnes

Maintenant : les nombres ne sont pas soulignés : si on s'amuse à mettre des liens sur les nombres pour les souligner, on n'aura pas de manière simple d'en sélectionner 7.
Il faudrait passer par du javascript pour ça.
Pour les constantes, il ya ça qui concilie la génaralité et les constantes:
<?PHP
/*Peut-être les dimensions en constantes*/
define ( "NBL", 7);
define ("NBC", 7);
function afficheTable($tab) 
{
      print  "<form method = 'post' action = 'resultat.php' >
                      <table border = '1'>";
                             // On parcours toutes les lignes du tableau 
              
                 for  $i = 0; $i < NBL; $i++)
                 */

           for ($i = 0; $i< NBL ; $i++) 
    		{
               print "<tr>"; // nouvelle ligne
               // On parcours toutes les colonnes de la ligne courante
              for ($j = 0; $j < NBC; $j++)
	{
	    $value = $tab[$i][$j];
                  print " <td><input type= 'checkbox' = name = 'choisis[]' value ='$value' />$value</td>";  
                 /* c'est checbox qui les rend cliquables; Le seul risque c'est que plus de 7 soient choisis; on gardera les 7 premiers*/
        	}
           print "</tr>"; // fermeture de la ligne
             			}
           print "
              <button type = 'submit'>Valider son choix</button>
         </form>
         </table>";
}

/* Création du tableau */
$tab[0] = range (1, 7, 1);
$tab[1] = range (8, 14, 1);
$tab[2] = range (15, 21, 1);
$tab[3] = range (22, 28, 1);
$tab[4] = range (29, 35, 1);
$tab[5] = range (36, 42, 1);
$tab[6] = range (43, 49, 1);
 afficheTable ($tab);
?>
Je ne vois pas de raison majeure de déclarer les valeurs du tableau en constantes: ça alourdirait le code; mais ça peut se faire.On ne peut pas créer un tableau constant du genre
define ("TABLEAU", array(1,12,3.));
On peut faire ceci:
<?PHP
define ( "NBL", 7); //nombre de lignes
define ("NBC", 7); //nombre de colonnes

define ("UN", 1);
define ("DEUX", 2);
define ( "TROIS", 3);
$tab = array();
$tab[0][0] = UN;
$tab[0][1] = DEUX;
print_r($tab);
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

nolan3009
Invité n'ayant pas de compte PHPfrance

13 oct. 2014, 23:41

voila ce que j'ai fait mais je n'arrive pas a transformer les nombres cliqués par des croix...en plus de dois ajouter une session :
"On utilisera également une session, contenant essentiellement un tableau à deux dimensions appelé grille. Ainsi, la variable $_SESSION['grille'] contiendra au départ les entiers 1 à 49.
Quand une case sera cochée, on pourra par exemple changer le signe de sa valeur (exemple : 10 deviendra -10). Les nombres négatifs seront affichés sous forme d'une croix (caractère « X » non cliquable) lors de l'affichage de la grille à l'écran.
D'autres variables de session seront sans doute utiles pour réaliser cette application, comme par exemple un entier comptant le nombre de cases cochées."

<html>
<head>
<title>grille loto</title>
</head>
<body>

<?Php

define ( "NBL", 7); //nombre de lignes
define ("NBC", 7); //nombre de colonnes

/* Création du tableau */
$tab = array();
$tab[0] = range (1, 7, 1);
$tab[1] = range (8, 14, 1);
$tab[2] = range (15, 21, 1);
$tab[3] = range (22, 28, 1);
$tab[4] = range (29, 35, 1);
$tab[5] = range (36, 42, 1);
$tab[6] = range (43, 49, 1);
return affiche_grille($tab);


function affiche_grille($tab)
{
echo "
<br><br><br><br>
<table border = '1', align='center', cellpadding='6', textalign='center'>";
// On parcours toutes les lignes du tableau

for ($i = 0; $i< NBL ; $i++)
{
echo "<tr>";
// On parcours toutes les colonnes de la ligne
for ($j = 0; $j < NBC; $j++)
{
$value = $tab[$i][$j];
echo '<td><a href="?numero=',$value,'">',$value,'</td>';
// nouveau numero cliquable qui renvoie une variable $_GET['numero']
}

'</tr>';
}
'</table>';
{
echo "<br>
<table align='center', textalign='center'>";
$new = 'Nouveau tirage';
echo '<br><br><br><td><a href="index.php">',$new,'</td>';
// nouveau numero cliquable qui renvoie une variable $_GET['numero']
}}



function realise_tirage() {
$tab = array();
$busy = false; //numéro unique

for ($i=0; $i<6; $i++) {
do {
$nb = rand(1,49);
foreach ($tab as $val) {
if ($busy = ($val == $nb))
break;
}
} while ($busy);
$tab[] = $nb;
}
return $tab;
}

?>

</body>
</html>