Créer une base pour des evenements sportifs

Mammouth du PHP | 2278 Messages

12 sept. 2014, 09:09

C'est aussi commode avec des checkbox comme ci-dessous (je réutilise un truc pondu pour autre chose; l'emploi de la fonction est totalement superflu ici)
<?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++)
		*/
	foreach ($tab as $element)
	{
		$nom = $element[1];
		$id = $element[0];
	      print "<tr>
					<td><input type= 'checkbox'  name = 'choisis[]' value ='id' />$nom</td>
          		</tr>"; 
    }
    print "
			<button type = 'submit'>Valider son choix</button>
		</form>
		</table>";
}

/* Création du tableau pour simuler le r&sultat de ton select */
$tab = array();
$tab[0] = array (1, "André");
$tab[1] = array (8, "Luc");
$tab[2] = array (12, "Marc");

afficheTable ($tab);
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 36 Messages

12 sept. 2014, 11:45

Oula.. :shock: :

Donc j'envoi mes boutons ou checkbox ( l'avantage c'est que bouton n'offre qu'un choix, par rapport a checkbox ) dans un tableau pour qu'il soit géré a la maniere des $tab = array() ?

voici ma page ' a_venir.php ' :

Code : Tout sélectionner

<?PHP require ('conf.php'); // Connexion au serveur mysql $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) or die('Impossible de se connecter : ' . mysql_error()); // sélection de la base de données mysql_select_db(DB_DATABASE, $connect); $sql = "SELECT id_match FROM `JOUES` order by id_match DESC"; $res = mysql_query($sql); echo '<a href="index.php">Retour a l\'accueil</a><br><br>'; $res2 = mysql_fetch_assoc($res); $sql2 = ('SELECT * FROM `event` WHERE id="'.$res2['id_match'].'"'); $res3 = mysql_query($sql2); $res4 = mysql_fetch_assoc($res3) ; $res5 = $res4['Moment']; $res5 = str_replace('M' ,'- Midi',$res5); $res5 = str_replace('S' ,'- Soir',$res5); $date2 = ''.$res4['date_match'].''; $timestamp = strtotime($date2); echo 'Match a venir :<br><br>'; echo 'Le '.date("d-m-Y", $timestamp).' '.$res5.''; echo '<br><br>Liste des joueurs disponibles pour ce match :<br><br>'; $req = mysql_query('SELECT * FROM players WHERE Moment="'.$res4['Moment'].'" OR Moment="T"')or die(mysql_error()); while($player_list = mysql_fetch_assoc($req)) { echo $player_list['nom'].'<br> <form method="post" action="traitement_player.php"> <input type="radio" name="Dispo" value="Y" />Dispo <input type="radio" name="En_Attente" value="Y" />En Attente <input type="radio" name="Indispo" value="Y" />Indispo <input type="radio" name="Annule" value="Y" />Annulé <input type="submit" value="Envoyer" /> </form>'; } ?>
je tente donc de faire un tableau dans ce style :

$tab = array();
$tab[0] = array ($player_list['nom'], "Dispo");
$tab[1] = array ($player_list['nom'], "Indispo");
$tab[2] = array ($player_list['nom'], "etc..");

?

Partie calendrier, remise dans l'ordre des dates etc, j'ai pu me dépatouiller, depuis hier j'essai de comprendre vers ou envoyer mon form, afin que ca ajoute aux joueurs le nb de matchs joués etc, mais la table JOUES n'arrive toujours pas a prendre un sens dans ma tete, en effet je peux grace a elle, comparer les id_match, mais comment mettre les ' id_joueurs ' dedans ? je pense que ca ne sera possible qu'une fois la dispo de chacun sera validée ?

Mammouth du PHP | 2278 Messages

12 sept. 2014, 11:57

Si ce code, inspiré du tien fonctionne
while($player_list = mysql_fetch_assoc($req))
{
{
print_r($playerlist);
print"<br>";
}
on peut faire mieux et plus simple et surtout opérationnel.

Quant à la tabler joues, elle contient :
l'id du joueur et l'id du match qu'il a joué
Par conséquent;, en la consultant avec une jointure vers les autres tables, on a la liste des joueurs pour un match donné, la liste des matchs d'un joueur donné (et donc le nombre de ces matchs), les matchs pour lesquels tel et tel joueurs ont joué ensemble....
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 36 Messages

12 sept. 2014, 14:07

Voila ce que me sort le print_r :
Array ( [id] => 1 [nom] => d0uz3 [Dispo] => [En_attente] => [Annule] => [Moment] => T )
Array ( [id] => 3 [nom] => d1x [Dispo] => [En_attente] => [Annule] => [Moment] => S )
ca me donne bien les 2 en Moment='T' or Moment='$var(moment'

en effet, si lorsque je renseigne les boutons ( radios ou checkbox ) ca met a jour que ' douz3 ' a joué a un ' id_mach ' précis ou etait indispo ou a annulé je comprends la fonction de ' JOUES ' mais du coup il faut rajouter des champs dans la table non ?!

parce que en fait la c'est ' player ' qui a ces colonnes, et comment les ' incrémenter ' en fonction du nombre de matchs ' joués ' ou ' indispos ' ou ' annulés ' ?

Mammouth du PHP | 2278 Messages

12 sept. 2014, 14:59

La table joues ne sert qu' à savoir qui a joue quoi. Ceux qui étaient indisponibles ou non sélectionnés ne sont pas mémorisés.
<?PHP
session_start();
/*player_list uniquement chez moi pour simuler ta consultation par SELECT*/
$player_list = array();
$player_list[0] = array ("id"=>1, "nom" =>"André");
$player_list[1] = array ("id"=>8, "nom"=>"Luc");
$player_list[2] = array ("id"=>12, "nom"=>"Marc");

print "<form method = 'post' action = 'enregistrer.php' >
<table border = '1'>
<tr><th>id</th><th>Nom</th><th>Sélectionné</th><th>Non sélectionné</th></tr>";
$i = 1;
while($player_list)
{
$ligne = array_shift($player_list); //  toi tu te sers de player_list à la place de ligne chez moi

 $nom_joueur = $ligne['nom'];
 $id_joueur = $ligne ['id'];
print "<tr>
	<td><input type = 'text' name = 'ids[$i]' readonly = 'readonly' value ='$id_joueur' /></td>
	<td><input type = 'text' name = 'noms'[$i]' readonly = 'readonly' value ='$nom_joueur' /></td>
	<td><input type = 'radio' name = 'selection[$i]' checked = 'checked'  value ='O' /></td>
	<td><input type = 'radio' name = 'selection[$i]'  value =' N' /></td>";
$i++;
}
print "</table>
<button type = 'submit'> Enregistrer</button>
</form>";
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 36 Messages

12 sept. 2014, 16:03

En ayant aménagé de la sorte, j'ai bien la liste des joueurs pour le 'moment ' du 'date_match' qui s'affiche avec les radios :

Code : Tout sélectionner

print "<form method = 'post' action = 'join_party.php' >"; $i = 1; while($player_list = mysql_fetch_assoc($req)) { $nom_joueur = $player_list['nom']; $id_joueur = $player_list['id']; print "<input type='text' name='ids[$i]' readonly='readonly' value='$id_joueur' /> <input type='text' name='noms'[$i]' readonly='readonly' value='$nom_joueur' /> <input type='radio' name='Dispo[$i]' value='Y' />Dispo <input type='radio' name='En_Attente[$i]' value='Y' />En Attente <input type='radio' name='Indispo[$i]' value='Y' />Indispo <input type='radio' name='Annule[$i]' value='Y' />Annulé<br>"; $i++; } print "<button type = 'submit'>Ajouter</button></form>";
Mais bizarement, quand je peux tous les cochers, que ce soit dispo ou indispo, chose qui n'arrive pas dans mes add_player par exemple... enfin a voir par la suite

Du coup la je crée une page ( que tu as apellé enregistrer.php ) ou j'insert dans la table JOUES, les id_joueurs et l'etat 'Dispo' / ' En_Attente ' etc ?

Je comprends pas comment un champ sql va pouvoir enregistrer, et l'id_joueur, et leur état.

Ou alors l'id_joueur va sur la meme ligne que l'id_match select into JOUES Where id_match = xx ? et ce pour chaque id_joueur, qui seront donc séparés par des virgules ?

Puis les états, je les mets a jour dans la table players et ca sera du coup a remettre a jour a chaque nouvel ' id_match ' ?

Mammouth du PHP | 2278 Messages

12 sept. 2014, 16:12

Moi ce que je ne comprends pas, c'est cette obstination à marquer dispo, indispo, en_attente choses que tu sais fort bien et qui étaient utilses, peut-être dans ta table excel..
Il suffit de cocher ceux qui sont susceptibles de jouer.parce qu'ils sont du matin ou de l'AM.
Pour chaqe joueur SELECTIONNE , on insère une ligne dans la table joues :
id_du_joueur, id_du_match
On pourra par la suite utiliser cette table pour établir des feuilles de matches ou modifier les sélections....
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 36 Messages

15 sept. 2014, 10:21

du coup je fais un insert into JOUES where id_match='$id_match' values 'id_joueur'
mais quel est le moyen de mettre tous les id_joueur dispos pour le match ?

ensuite, je pourrais savoir via un select into JOUES where id_joueur='d0uz3' le nombre de matchs auxquels il a participé c'est ca ?

Mammouth du PHP | 2278 Messages

15 sept. 2014, 10:40

Bjr,
Remets moi ici le code que TU utilises pour afficher tes joueurs; je répondrai en fonction.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 36 Messages

15 sept. 2014, 13:37

voila pour le code de ma page a_venir.

au final j'ai repris ton code précédent en y ajoutant juste ' indispo ' et ' en attente ' car ce que j'aimerais c'est que lorsque j'ai contacté les joueurs, si ils me répondent pas tout de suite, que j'ai quand meme un visuel ' rapide ' sur la quantité d'en attente, afin de pas trop en contacter et avoir 20 personnes sur le terrain..

Code : Tout sélectionner

<div id="a_venir"><?PHP require ('conf.php'); // Connexion au serveur mysql $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) or die('Impossible de se connecter : ' . mysql_error()); // sélection de la base de données mysql_select_db(DB_DATABASE, $connect); $sql = "SELECT id_match FROM `JOUES` order by id_match DESC"; $res = mysql_query($sql); $res2 = mysql_fetch_assoc($res); $sql2 = ('SELECT * FROM `event` WHERE id="'.$res2['id_match'].'"'); $res3 = mysql_query($sql2); $res4 = mysql_fetch_assoc($res3) ; $res5 = $res4['Moment']; $res5 = str_replace('M' ,'- Midi',$res5); $res5 = str_replace('S' ,'- Soir',$res5); $date2 = ''.$res4['date_match'].''; $timestamp = strtotime($date2); echo 'Match a venir :<br><br>'; echo 'Le '.date("d-m-Y", $timestamp).' '.$res5.''; echo '<br><br>Liste des joueurs disponibles pour ce match :<br><br>'; $req = mysql_query('SELECT * FROM players WHERE Moment="'.$res4['Moment'].'" OR Moment="T"')or die(mysql_error()); print "<form method = 'post' action = 'join_party.php' >"; $i = 1; while($player_list = mysql_fetch_assoc($req)) { $nom_joueur = $player_list['nom']; $id_joueur = $player_list['id']; print "<label>$nom_joueur :</label> <input type='radio' name='Dispo[$i]' value='Y' />Dispo <input type='radio' name='En_Attente[$i]' value='Y' />En Attente <input type='radio' name='Indispo[$i]' value='Y' />Indispo<br>"; $i++; } print "<button type = 'submit'>Ajouter</button></form>"; ?></div>
du coup dans la base sql ' players ' je vais pouvoir virer le champ ' annulé ' qui apres reflexion m'importe peu.

reste a voir, comment mettre dans la table JOUES l'info qui va bien... ou alors, conserver l'id_joueur, et rajouter un champ dans JOUES ' status ' ? et au lieu de préciser les infos ' dispo ' ' en attente ' ou ' indispo ' on met juste D pour Dispo E pour En att et I pour indispo ?!
Modifié en dernier par d0uz3 le 15 sept. 2014, 14:02, modifié 1 fois.

Mammouth du PHP | 2278 Messages

15 sept. 2014, 13:58

Ok vu mais un radio bouton a deux ou plusieus valeurs exclusives l'une de l'autre et ce sont des champs qui doivent porter le même nom:
print "<label>$nom_joueur :</label>
      <input type='radio' name='Dispo[$i]' value='Y'/>Dispo
<input type='radio' name='dISPO[$i]' value='A' />En Attente
<input type='radio' name='Dispo[$i]' value='N />Indispo<br>";
$i++;
}
Il suffirait de rajouter une colonne dispo à joues (uniquement renseignée si dispo ou en attente...)
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 36 Messages

15 sept. 2014, 15:14

j'ai beau demander un print_r pour voir ou est mon erreur, il ne m'affiche rien :/

je pense que je dois marder dans mon appel pour récupérer les variables de la précédente page ( a_venir )

car je suis obligé de les rapeller pour les inclures dans JOUES non ?

ma page 'join_party'

Code : Tout sélectionner

<?PHP session_start(); extract($_POST); $_SESSION['match'] = $match; $_SESSION['Dispo[$i]'] = $dispo; require ('conf.php'); $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) or die('Impossible de se connecter : ' . mysql_error()); mysql_select_db(DB_DATABASE, $connect); $sql = "INSERT INTO JOUES('id_joueur', 'Dispo') WHERE id_match='$match' VALUES ('$id_joueur','$dispo')"; $res = mysql_query($sql); print_r($res); print"<br>"; ?>
et dans a_venir j'ai rajouté ca : $_SESSION['match'] = ''.$res2['id_match'].''; mais il semble pas renvoyer quoi que ce soit..

Mammouth du PHP | 2278 Messages

15 sept. 2014, 15:26

Il faut d'abord corriger e_venir (un bouton radio c'est au moins deux boutons exclusifs qet qui portent le même nom)
p
rint "<form method = 'post' action = 'join_party.php' >";
$i = 1;
while($player_list = mysql_fetch_assoc($req))
{
 $nom_joueur = $player_list['nom'];
 $id_joueur = $player_list['id'];
 
print "<input type='text' name='ids[$i]' readonly='readonly' value='$id_joueur' />
        <input type='text' name='noms'[$i]' readonly='readonly' value='$nom_joueur' />
      <input type='radio' name='Dispo[$i]' value='Y' />Dispo
<input type='radio' name='Dispo[$i]' value='S' />En Attente
<input type='radio' name='Dispo[$i]' value='N' />Indispo
<input type='radio' name='Dispo[$i]' value='A' />Annulé<br>";
$i++;
}

print "<button type = 'submit'>Ajouter</button>
</form>";
et dans join_party, mettre simplement au début
print_r($_POST); //il doit te sortir un tableau ids, un tableau noms, un tableau Dispo qui sont tous indicés de la même façon
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 36 Messages

15 sept. 2014, 16:16

Ah oui la j'ai un resultat, mais ca semble pas etre bon mon affaire :
Array ( [ids] => Array ( [1] => 1 [2] => 3 [3] => 4 [4] => 5 [5] => 7 [6] => 8 ) [noms] => s1x [Dispo] => Array ( [1] => Y [2] => S [3] => N [4] => S [5] => S [6] => A ) )
j'ai aucune données qui s'inserent dans la table JOUES

j'ai mardé quelque part ?

Code : Tout sélectionner

print "<form method = 'post' action = 'join_party.php' > <table align=\"center\" border = '0'> <tr><th>Id</th><th>Nom</th><th>Dispo</th><th>En Attente</th><th>Indispo</th><th>Annulé</th></tr>"; $i = 1; while($player_list = mysql_fetch_assoc($req)) { $nom_joueur = $player_list['nom']; $id_joueur = $player_list['id']; print "<tr> <td><input type='text' name='ids[$i]' readonly='readonly' value='$id_joueur' /></td> <td><input type='text' name='noms'[$i]' readonly='readonly' value='$nom_joueur' /></td> <td><input type='radio' name='Dispo[$i]' value='Y' />Dispo</td> <td><input type='radio' name='Dispo[$i]' value='S' />En Attente</td> <td><input type='radio' name='Dispo[$i]' value='N' />Indispo</td> <td><input type='radio' name='Dispo[$i]' value='A' />Annulé</td>"; $i++; } print "</tr></table> <button type = 'submit'> Enregistrer</button> </form>";
le listing des joueurs et radios lui semble pourtant cohérant.

Mammouth du PHP | 2278 Messages

15 sept. 2014, 16:31

C'est moi qui suis allé trop vite a_venir.php
name = 'noms[$i]' et pas name='noms'[$i]'
print "<input type='text' name='ids[$i]' readonly='readonly' value='$id_joueur' />
<input type='text' name='noms[$i]' readonly='readonly' value='$nom_joueur' />
<input type='radio' name='Dispo[$i]' value='Y' />Dispo
<input type='radio' name='Dispo[$i]' value='S' />En Attente
<input type='radio' name='Dispo[$i]' value='N' />Indispo
<input type='radio' name='Dispo[$i]' value='A' />Annulé<br>"

Quand tu auras comme résultat du print_r:
Array ( [ids] => Array ( [1] => 1 [2] => 3 [3] => 4 [4] => 5 [5] => 7 [6] => 8 ) [noms] => Arrray([1] => six.....) [Dispo] => Array ( [1] => Y [2] => S [3] => N [4] => S [5] => S [6] => A ) )
on verra...
Courage c'est presque fini
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD