Aller au contenu

Indexation d'après un nombre variable


Messages recommandés

Chers Impactiens - Chères Impactiennes

Pour ceux et celles qui me "connaissent" , me revoila. J'ai comme l'impression d'avoir mis le doigt dans un sac de noeuds .. et je vous remercie de votre solicitude

Pour les autres, merci de prendre le temps...

Je commence juste par une brêve : je reprends un site d'assoc sportive, bénévolement, conçu par un bénévole débutant webmaster, parti depuis (mais il avait fait du bon boulot qd même .....)

Aujourd'hui je cherche à afficher des données saisies et updatées (présentes en bdd => MySQL) en php (seul language que je "connaisse").

Synoptique :

- j'active des catégorie de jeu (Seniors masc - Minimes - Cadet ..etc) en leur attribuant une valeur 1 pour activer ou 0 pour désactiver, en compétition (cat_comp = 1) ou non (cat_nocomp = 0). Jusque là => no-souci...

Ensuite je défini le nombre d'équipe(s) par catégorie (Séniors Masc-> 2 équipes - Minimes masc -> 1 - Benjamins -> 1 - Séniors Fem -> 3 ...Etc...), qu'elles soint en compétition ou non. Idem => jusque là no problèm'.

Chaque catégorie est définie dans un table par un IDcat.

Sur chacune des page, je peux revenir en arrière pour faire une modif ...

La ou le problème se pose, c'est :

- 1 => comment indexer proprement les équipes quand ils y en a plusieures dans la même catégorie ?

- 2 => comment afficher les valeurs déja présentes dans la base de données (en 1° ligne de la liste déroulante)?

Voici le code qui permet l'affichage/saisie

$j=0;
echo"
<fieldset style=\"padding:5px; margin:10px; border: 2px solid #0000FF\"><legend><font color=\"0000FF\" size=\"+1\">Engagements en championnats</font></legend>
<form action=\"?pg=lapageactuelle\" method=\"POST\">";
//recherche des équipes actives et compétitrices
$req= mysql_query("SELECT * FROM categorie WHERE cat_comp > 0 && act = 1" ) or die(mysql_error());
while($team= mysql_fetch_array($req))
{
for($i=1; $i <= $team[cat_comp'];$i++)
//si plusieures équipes dans la même catégorie
if($team[cat_comp'] > 1) 
{
 echo
 "<fieldset style=\"padding:5px; margin:10px; border: 1px solid #330066 \"><legend><font size=\"+1\" color=\"#72110C\">".$team['Cat_nom']." ".$i."</font></legend>
 <p> </p>
 <input type=\"hidden\" value=\"".$j."\" size=\"1\" name=\"id[]\">
 <input type=\"hidden\" value=\"".$team['IDcat']."\" size=\"1\" name=\"cat[]\">
 <input type=\"hidden\" name=\"abr[]\" value =\"".$team['abrcat']."\">".$team['abrcat']." ".$i."
 <input type=\"hidden\" name=\"indexteam[]\" value=\"".$i."\" size=\"1\"><br/>
 //récupération du nom du championnat dans la tableChampionnat :
 <select name=\"champ[]\">";
 $reqchamp=mysql_query("SELECT * FROM championnat ORDER BY IDchamp DESC") or die (mysql_error());
 while($reschamp=mysql_fetch_array($reqchamp))
 {
  echo"
  <option value=\"".$reschamp['IDchamp']."\">".$reschamp['nom']."</option>";
 }
 echo"
 </select>
//récupération du niveau (depart-region-nation)
 Niveau :
 <select name=\"niv[]\">";
 $reqniv=mysql_query("SELECT * FROM niveau ORDER BY IDniv DESC") or die (mysql_error());
 echo"
 <option value=\"0\"> - </option>";
 while($resniv=mysql_fetch_array($reqniv))
 {
  echo"
  <option value=\"".$resniv['IDniv']."\">".$resniv['nom']."</option>";
 }
 echo"
 </select>";
//si les catégories ne sont pas adultes => définition des phases
 if(($team['IDcat']>=2 && $team['IDcat']<=5) || $team['IDcat'] >=7)
 {
  echo"
  Phase :  
  <select name=\"phase[]\">
  <option value=\"1\"> 1 </option>
  <option value=\"2\"> 2 </option>
  </select>
  ";
 }
//si catégorie adulte => pas de phase(phase 0)
 else
 {
  echo"
  <input type=\"hidden\" name=\"phase[]\" value=\"0\">";
 }
 echo"
//récupération de la poule
 Poule :
 <select name=\"poule[]\">";
 $reqpoule=mysql_query("SELECT * FROM poule") or die (mysql_error());
 echo"
 <option value=\"0\"> - </option>";
 while($respoule=mysql_fetch_array($reqpoule))
 {
  echo"
  <option value=\"".$respoule['IDpoule']."\">".$respoule['nom']."</option>";
 }
 echo"
 </select>
 </fieldset>
 ";$j++;
}
/si le nombre d'équipe dans la catégorie est = à 1
else
{
 echo
 "<fieldset style=\"padding:5px; margin:10px; border: 1px solid #330066 \"><legend><font size=\"+1\" color=\"#72110C\">".$categorieactive['Cat_nom']." </font></legend>
 <p> </p>
 <input type=\"hidden\" value=\"".$j."\" size=\"1\" name=\"id[]\">
 <input type=\"hidden\" value=\"".$categorieactive['Cat_id']."\" size=\"1\" name=\"cat[]\">
 <input type=\"hidden\" name=\"abr[]\" value =\"".$categorieactive['Cat_abr']."\">".$categorieactive['Cat_abr']."
 <input type=\"hidden\" name=\"indexteam[]\" value=\"0\" size=\"1\"><br/>
.....................
}
}

A partir des pointillés, c'est 100% le même code

Si vous avez TOUT lu jusqu'ici... chapeau.... moi je n'aime pas les post à rallonge (quand je cherche une solution => mais promis je lirais les post correctemet à l'avenir)

Bon retour au problème.

Comme vous le voyez, à aucun moment je n'affiche ce qui est déja présent dans ma base (en cas de saisie antérieure) surtout si après avoir accédé à la page suiante, je décide de revenir en arrière pour une raison X ou Y (erreur de saisie sur une ligne par exemple).

De plus la manière d'indexer le nombre d'équipe à l'air de gêner .... l'ancien concepteur soumet le formulaire comme suit :

function verif_form()
{
// vérifie que le formulaire a été envoyé
if(isset($_POST["valider"]))
{
 return true;
}
}
if(verif_form())
{
//on efface les données au cas ou des modifications sur le nombre d'équipes aurai eu lieu pour créer de nouveau indes d'équipe (IDequ)
$req = "TRUNCATE TABLE equipe";
$raz = mysql_query($req);
foreach ($_POST['id'] as $id)
 { 
  $newteamchamp = "INSERT INTO equipe (cat_id, abrev, index, champ_id, niv_id, phase, poule_id) VALUES ('".$_POST['cat'][$id]."' , '".$_POST['abr'][$id]."' , '".$_POST['indexteam'][$id]."' , '".$_POST['champ'][$id]."' , '".$_POST['niv'][$id]."' , '".$_POST['phase'][$id]."' , '".$_POST['poule'][$id]."')";
  $result = mysql_query($newteamchamp) or msg(mysql_error(),"erreur");
 }
  if($raz)
  {
msg("Table vidée ...","succes");
  }
  if($result)
  {
  msg("Nouvelle répartition réussie","succes");
  };
//on passe à la page suivante
header('Location: ?pg=pagesuivante');
}

Tout ceci est fonctionnel. mais dès que j'arrive ou reviens sur la page, je dois TOUT resaisir (avec les risque d'erreur que ça comporte) au lieu de modifier ce qui doit l'être (ou passer mon chemin por arriver sur la page qui m'intéresse (2 encores qui se suivent...)

Qu'est-il possible de faire ?

En plus "propre" (sans parler du nomage des champs ou des requètes)

Merci d'avance et merci d'avoir lu jusqu'au bout.

:smack::francais::smack:

Lien vers le commentaire
Partager sur d’autres sites

Effectivement ton code est assez vilain...

Cela dit on ne reviens jamais en arrière pour modifier x ou y il faut que plutôt que tu fasses une page de modification pour tes équipes.

(par exemple modif.php?Equipeid=[id de ton équipe a modifier] ensuite tu remplis tes champ de formulaire en utilisant le paramètre dans tes clauses where)

Si tu veux vraiment te garder une possibilité pour revenir en arrière tu peux stocker toutes les valeur de ton formulaire en Session et re remplir ton formulaire avec si tu réaffiche la page... (On le fait parfois en cas de validation de données pour que l'utilisateur ne re remplisse pas tout mais le but n'est pas qu'il corrige en revenant en arrière :non: )

Pour faire de ton code un truc plus propre je te conseil d'utiliser un design type master/detail.

En gros tu fait une page qui liste toute tes équipes (dans un tableau par exemple), avec en plus un lien permettant de modifier ton équipe (on retombe sur modif.php...) contenant ton formulaire plus simple car une équipe a la fois et que tu pourras préremplir.

Pour la deuxieme partie de ton code j'avoue que je comprends pas bien le but rechercher avec ton truncate ? Tu ne peux pas tout simplement faire un update de l'équipe qui t'intéresse ? (a moins que ce ne soit liée à l'architecture du code qui fait qu'on ne connait pas l'équipe en question :chinois: ) Je comprends pas trop l'intérêt de refaire ta table à chaque fois d'autant que tu "perds" toute les équipe inactive ou qui ne sont pas en compétition dans le processus, ce qui doit forcément créer des incohérence dans ta base (surtout que le compteur de ta table repars de 1 à chaque fois donc les relations...). Ou alors j'ai rien compris à la logique de code :transpi::eeek2:

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

Et merci 'thiiil', d'avoir pris le temps de lire, puis de répondre.

Concernant les modifications de championnat, je vais effectivement (c'est en cours de création) passer par une page spécifique.

En fait, concernant ces modifications, j'ai 4 pages qui se suivent. j'arrive sur la page A, quand je valide, je vais automatiquement sur la B qui posède un "rappelle" du contenu de la A, puis sur C avec rappel du contenu de saisies dans B .. et ainsi de suite. Quand je suis sur une page (excepté la A) il y a un bouton qui me ramène à la précédente pour que je puisse corriger une eventuelle erreur.

L'histoire du 'TRUNCATE' c'est simplement que, effectivement, on vient tout juste (page précédente) de saisir le nommbre d'équipe par catégorie => sur ma page, un index est posé (l'est-il correctement ??) pour chaque équipes de la même catégorie, on rempli les différentes infos propres à chaque équipes puis on valide ces nouvelles informations qui sont différentes de la saison d'avant => cela équivaut à tout recréer (je n'aurais pas une equipe 2 en séniors comme l'année 2008-2009 par exemple). Cela ne me semble pas 'idiot' à vrai dire (quand j'ai poster la première fois je ne comprenais pas pourquoi, depuis j'ai édité...)

Mes questions réelles étaient (et sont toujours) :

- 1 => comment indexer proprement les équipes quand ils y en a plusieures dans la même catégorie ? (est-ce que ce qui est 'codé' est correct?)

- 2 => comment afficher les valeurs déja présentes dans la base de données (en 1° ligne de la liste déroulante)?

Si cela est possible bien sur.

Sinon je trouve tout cela long, peut-on faire plus court ? :mdr:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...