[RESOLU] Tableau + Variable dynamique + requete sql

Petit nouveau ! | 2 Messages

04 oct. 2016, 23:00

Bonjour à tous,

J'ai besoins d'aides, car je ne sais pas du tout comment réaliser .

Je m'explique, actuellement je développe une application de gestion de tournoi qui permet de gérer les inscriptions,les pointages et la génération de poules etc )
Lorsque que l'on n'a 2 personnes du même club dans la même poule il y a conflit.
exemple de mon tableau:
La tableau est générer de façon dynamique .
J'ai crée aussi le script qui m'indique tous les doublons des poules.
Dans un premier temps je voudrai gérer ma gestion de doublon manuellement puis automatiquement.
Image

Mais question je voudrai mettre pour la ligne 2 jean/luc/1124/34786954/01260031 mettre 2 à NumPoules à la place de 1
et mettre pour la ligne 4 DEPO/yhjkhjk/1357/015999/01260001 et mettre 1 à NumPoules à la place de 2
Mon code fonctionne très bien si je prend une seule valeur, j'appel une autre page php ou exécute un update.
Mais je voudrai modifier toutes les valeurs qui me concerne en une seul fois
Voici mon code pour générer le tableau
$parti2 = mysql_query("SELECT nom, prenom, pts,numLicence,NumClub,NumPoules FROM poules1799v2 order by NumPoules asc ;") or die("Requete impossible");
echo "<table border ='3 px' width='60%' cellpadding='1' cellspacing='1'  >";
echo "<tr><th><center>Nom</th>
<th><center>Prenom</th>
<th><center>Points</th>
<th><center>NumLicence</th>
<th><center>NumClub</th>
<th><center>NumPoules</th>";

		while ($row=mysql_fetch_array($parti2)) 
		{ 
			echo "<input type='hidden' value=".$row[3]." name='modifier'/>";
			echo "<tr><td><center>"; printf(  $row[0]); echo "</td>";
			echo "<td><center>"; printf(  $row[1]); echo "</td>";
			echo "<td><center>"; printf(  $row[2]); echo "</td>";
			echo "<td><center>"; printf(  $row[3]); "<td> <input type='text' value=".$row[3]." name='Numlicience'/> </td>";
			echo "<td><center>"; printf(  $row[4]); echo "</td>";
			if ($row[5] == '') $row[5] = '0'; echo "<td> <input type='text'value=".$row[5]." name='NumPoules'/> </td>";
		}
	echo "<p><input type='submit' class='myButton' value='Mise a Jour' /></p><br>";

	echo "</form>";
    echo "</table>";

Actuellement j'ai tout développé en PHP,
Selon vous ça serai possible de générer en php ? ou pas du tout il faudrait changer de langage ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 oct. 2016, 10:01

salut,

première chose un p'tit rapel de la doc
Cette extension est obsolète depuis PHP 5.5.0 et a été supprimée depuis PHP 7.0.0. A la place, soit l'extension mysqli ou PDO_MySQL devrait être utilisée. Voir aussi la vue d'ensemble de l'API MySQL pour plus d'aide dans le choix d'une API MySQL.
tu y gagneras a passer à mysql ou pdo ;))

coté code il faut utiliser la notation tableau pour nommer les champs de formulaire afin d'avoir des tableaux php pour traiter cela en boucle.

en clair <input name="toto[]" /> donnera coté php (pour un formulaire de type post) $_POST['toto'] qui contiendra un tableau.
si tu utilise deux champs de formulaires différents à la suite ils auront le même index et du coup tu as les données synchro ;) (pour peu que tu les utilises toujours en même temps ;) ).

voici code revue et corrigé
<?php
if (!empty($_POST['miseajourpoulette'])) {
    foreach ($_POST['numLicence'] as $key => $value) {
        $sql = 'update poules1799v2 set NumPoules ='.mysql_real_escape_string($_POST[NumPoules][$key]).' where numLicence='.mysql_real_escape_string($value);
        mysql_query($sql);
    }
}
$parti2 = mysql_query('SELECT nom, prenom, pts, numLicence, NumClub, NumPoules FROM poules1799v2 order by NumPoules asc');
if ($parti2 === false) {
    echo '<p class="alerte">Erreur SQL :', mysql_error(),'</p>';
} else {
    echo <<<html
<form action="" method="post">
<table border ="3 px" width="60%" cellpadding="1" cellspacing="1">
    <thead>
        <tr>
            <th>Nom</th>
            <th>Prenom</th>
            <th>Points</th>
            <th>NumLicence</th>
            <th>NumClub</th>
            <th>NumPoules</th>
        </tr>
    </thead>
    <tbody>
html;

    while ($row=mysql_fetch_assoc($parti2)) {
        echo '<tr><td style="text-align:center">', $row['nom'] , '</td>';
        echo '<td style="text-align:center">', $row['prenom'] , '</td>';
        echo '<td style="text-align:center">', $row['pts'] , '</td>';
        echo '<td style="text-align:center">', $row['numLicence'] ,'<td>';
        echo '<td style="text-align:center">', $row['NumClub'] , '</td>';
        if (empty($row['NumPoules'])) {
            $row['NumPoules'] = 0;
        }
        echo '<td> <input type="text"value='.$row['NumPoules'].' name="NumPoules[]"/> </td>';
        echo '<input type="hidden" value="',$row['numLicence'],'" name="numLicence[]"/>';
    }
    echo <<<html
    </tbody>
</table>
<p>
    <input type="submit" class="myButton" value="Mise a Jour" name="miseajourpoulette" />
</p>
</form>
html;
}
Je suis partie du principe qu'une personne était dans une seule poule et que donc le numéro de licence était unique dans la table.
cela m'indique un problème de modélisation des données. Les informations des joueurs ne devrait pas être dans cette table mais dans une table dédiée.
il devrait y avoir aussi une table "tournoi" et une jointure entre la table des poules et celle du tournoi pour savoir à quel tournoi sont attachée les poules ;)
cette partie est a voir maintenant :)

J'ai aussi corrigé le code pour qu'il produise du html valide et supprimer les champs non affichés / inutiles.

en utilisant mysqli_ PDO tu pourrais remplacer la construction de la requête sql en haut par l'utilisation d'une requête préparée et y gagner en performance.


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 2 Messages

05 oct. 2016, 18:12

je sais pas quoi dire.
Dans ta réponse tu me fait un cours très explicite + la solution . Et en prime tu as bien compris le besoin. :D
La seul différence c'est qu'une personne peut être dans plusieurs poules. c'est pour ça que lorsque que je génère la poule il me créer une table avec les valeurs concernés.

je te dis MERCI BEAUCOUP :D. Franchement chapeau :)