Créer une base pour des evenements sportifs

Eléphanteau du PHP | 36 Messages

15 sept. 2014, 17:37

Rah la vache, autant quand ca marche ca fait plaisir, autant quand une ' glissée ' fout la grouille comme ca, c'est facheux :P

en plus, au début je le mettais dans un ' label ' le nom et il me les sortait bien, et la ca décalait tout..

bon j'ai bien les array qui vont bien, je cherche a intégrer ca dans JOUES comme un grand, et j'te tiens au jus :)

Eléphanteau du PHP | 36 Messages

16 sept. 2014, 11:33

Snif, et c'est pas faute d'avoir chiné, mais comment intégrer dans un champ sql, plusieurs variables a la suite identifiable ? :/

voila mon code :

Code : Tout sélectionner

<?PHP extract($_POST); require ('conf.php'); $r_ids = $_POST['ids']; $r_Dispo = $_POST['Dispo']; $i = 1; $ids = $r_ids[$i]; $Dispo = $r_Dispo[$i]; $i++; $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); $sqlmatch = "SELECT id_match FROM `JOUES` order by id_match DESC LIMIT 0,1"; $resmatch = mysql_query($sqlmatch); while($resultat = mysql_fetch_assoc($resmatch)) { $match = $resultat['id_match']; } $sql = ("UPDATE JOUES SET `id_joueur` = '$ids', `Dispo` = '$Dispo' WHERE `id_match` = '$match'"); $res = mysql_query($sql); ?>
mais il ne prend en compte que mon $i = 1; et n'incrémente pas, et de fait ne met que les infos du joueur qui a l'id ' 1 ' :/

Mammouth du PHP | 2278 Messages

16 sept. 2014, 14:18

Je vais faire les courses, en revenant je te réponds.
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

16 sept. 2014, 14:20

quelle chance de pouvoir les faire quand c'est pas blindé :)

Mammouth du PHP | 2278 Messages

16 sept. 2014, 15:33

En gros:
$nb_reponses = count($ids); // nombre de joueurs affichés dur la page précédente
for ($i = 1; $i<=$nb_reponses;$i++)
{
$id_joueur = $ids[$i];
$dispo = $Dispo[$i];
//fais afficher le résultat et si ça a l'air d'aller passe à la requête. comment on retrouvera les noms des joueurs ? avec un requete à jointure. Id pour les dates xdes maths

}
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

16 sept. 2014, 20:55

Bizarrement, ca ne m'inclut QUE, la derniere ligne, j'avais au début pensé ( et c'etait le cas ) que mon varchar dans la table etait a 1, je l'ai passé a 20 comme ca j'ai de la marge..

Mais ca ne change rien, du coup il doit manquer un truc dans ma requete sql.. comment on integre ' plusieurs ' variables dans un champ ?

Code : Tout sélectionner

$nb_reponses = count($ids); for ($i = 1; $i<=$nb_reponses;$i++) { $id_joueur = $ids[$i]; $dispo = $Dispo[$i]; $sql = ("UPDATE JOUES SET `id_joueur` = '$id_joueur', `Dispo` = '$dispo' WHERE `id_match` = '$match'"); $res = mysql_query($sql); echo $id_joueur; echo '-'; echo $dispo; echo '<br>'; }
l'echo me renvoi correctement les infos soit :

1-Y
3-S
4-S
5-N
7-A

ViPHP
xTG
ViPHP | 7331 Messages

16 sept. 2014, 21:08

$match a toujours la même valeur pour toutes les itérations de ta boucle.
Tu exécutes donc la requête sur le même jeu de données (id_match est ta seule clause WHERE) à chaque itération.
Si ta requête cible disons 4 n-uplets tu modifies leur valeur $nb_reponses fois, tu verras donc à la fin de la boucle leur valeur à celle de la dernière itération. ;)
Il faut donc qu'à chaque itération de la boucle tu identifies unitairement (dans le sens => différent de chaque itération précédente de la boucle) un n-uplet (ou une série, je n'ai pas lu le reste du topic).

Eléphanteau du PHP | 36 Messages

16 sept. 2014, 23:43

bah j'ai bien chaque données séparées ( ici par un - )

1-Y
3-S
4-S
5-N
7-A

mais comment dans un update sql on fait set id_joueur='1;3;4;5;7' et du coup apres la meme cmd fera Dispo='Y;S;S;N;A' ?

ensuite, je pense qu'en redécoupant le contenu du champ, je pourrais savoir quel ' id_joueur ' a joué quel match, compter le nombre de dispo automatiquement etc..

ViPHP
xTG
ViPHP | 7331 Messages

17 sept. 2014, 07:45

Problème de conception à priori.
Le mieux (et surtout le plus simple) aurait été d'avoir une table avec :
id_match | id_joueur | dispo

Ainsi pas de prise de tête et une simple boucle comme tu l'as fait suffit.
Je te recommande de modifier ta base de données pour partir sur ceci... Sinon bonjour les prises de tête et l'optimisation à deux sous. :?

Pour ton update bizarre sinon il aurait fallu s'y prendre ainsi :
$id_joueurs = '';
$dispos = '';
// concaténation des valeurs
for ($i = 1; $i<=$nb_reponses;$i++)
{
   $id_joueurs .= $ids[$i] . ';';
   $dispos .= $Dispo[$i] . ';';
}
//requête SQL
Ainsi on peut faire une seule requête qui contient tout notre bordel (ouais... pas d'autre nom à lui donner...).

Et pour exploiter les valeurs par la suite il faut faire un explode() sur le point virgule et parcourir les valeurs obtenues jusqu'à trouver celle qu'on cherche.
Bref pas tiptop... Car on reforme un système pseudo-relationnel en dehors de la base de données alors que c'est justement son rôle. ;)

Eléphanteau du PHP | 36 Messages

17 sept. 2014, 08:22

c'est bien ce qui est crée :

une table JOUES avec :
id_match | id_joueur | dispo

une table players avec :
id | noms | moment

et une table event avec :
id | date_match | moment

Mammouth du PHP | 2278 Messages

17 sept. 2014, 11:44

Développement de l'idée de xtg (merci au passage, car je ne savais pas qu'on pouvait faire une insertion multiple en une seule fois)

<
?PHP

/*partie simulation locale*/
$mysqli = mysqli_init(); 
$id_match = 712;
$lien = mysqli_real_connect($mysqli, "localhost", "root", "");
$ids = array(1=>1,2=>3,3=>5,4=>7);
$dispos = array (1 =>"Y",2=>"N",3=>"T", 4=>"Y");

$nb = count($ids);
/*on prend l'idée de xtg en faisant l'insertion en _une seule requete partie unique $requete; partie à développer $valeurs*/
$requete = "INSERT into foot.joues (id_joueur, id_match, dispo) VALUES ";
$valeurs = ""; //doit être vide au départ
for ($i = 1; $i <= $nb; $i++)
{
	$id_joueur = $ids[$i];
	$dispo = $dispos[$i];
	//il faut que chaque série de valeurs soit encafrée par des parenthèses et séparée de la suivante pâr une virgule
	// $virgule contient une virgule quand $i est inférieur au nombre de jeux de valeurs
	$virgule = ($i < $nb) ? ",":""; 
	$valeurs .= "($id_joueur, $id_match,'$dispo')$virgule";
}
//on concatène les valeurs au début de la requete
$requete .= $valeurs;
print "<br>$requete<br>";  //vérification
mysqli_query($mysqli, $requete);

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

17 sept. 2014, 15:17

j'ai tenté d'adapter a ma situation, mais j'dois polioter quelque part, ca ne me sort ni erreur, et ca ne modifie pas mes champs :/

Code : Tout sélectionner

$nb = count($ids); $requete = "INSERT into joues WHERE `id_match` = '$match' (id_joueur, Dispo) VALUES "; $valeurs = ""; //doit être vide au départ for ($i = 1; $i <= $nb; $i++) { $id_joueurs = $ids[$i]; $dispos = $Dispo[$i]; //il faut que chaque série de valeurs soit encafrée par des parenthèses et séparée de la suivante pâr une virgule // $virgule contient une virgule quand $i est inférieur au nombre de jeux de valeurs $virgule = ($i < $nb) ? ",":""; $valeurs .= "($id_joueurs,$dispos)$virgule"; } $requete .= $valeurs; print "<br>$requete<br>"; //vérification ?>
j'ai pourtant bien les infos qui sont ' séparées ' et qui semblent monter comme il faut soit :
INSERT into JOUES WHERE `id_match` = '2' (id_joueur, Dispo) VALUES (1,Y),(3,S),(4,S),(5,N),(7,A)
malgré ca, je pense que ca n'insert QUE, la derniere ids envoyée.

Mammouth du PHP | 2278 Messages

17 sept. 2014, 17:07

Ca fonctionne parfaitement; je l'ai testé.
Il faut peut-être exécuter cette reqête, ce que j'ai dû oublier dans le copier coller.
La vérification se fait par PHPMYadmin ou équvalent: SELECT * from joues;
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

17 sept. 2014, 20:07

Mais du coup, j'ai dans ' id_match ' plusieurs fois l'id 2, cela n'a pas d'impact ?

est ensuite ainsi que j'apellerais les joueurs ayant joué au match dont l'id est 2 ?

du coup si c'est ca, y'a possibilité de faire une requete sql du type ' select * from joues where id_match=$match ' et croiser avec les id_joueur pour avoir leurs noms.

l'idée serait apres, que du coup les ' checkbox ' restent pré-renseigné en fonction de ce qu'il y a dans ' joue ' et qu'on puisse le modifier a volonté ( et du coup sans faire ' valider ' ca afficherait dans le total en bas, le nb en dispo, en indispo etc. )

apres je sais pas si du coup, on reste sur le ' join_party.php ' en cours, ou si il vaudrait mieux faire un ' modif_party.php ' avec a la place de insert -> update

Mammouth du PHP | 2278 Messages

18 sept. 2014, 08:25

Oui, il y a le même id_match pour tous les joueurs: normal.
du coup si c'est ca, y'a possibilité de faire une requete sql du type ' select * from joues where id_match=$match ' et croiser avec les id_joueur pour avoir leurs noms.: oui, avec les jointures
select * from joues join players on players.id = joues.id_joueur;
cf doc mysql pour plus de détailshttp://dev.mysql.com/doc/refman/5.0/fr/join.html
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD