Filtre avant affichage

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Filtre avant affichage

Re: Filtre avant affichage

par Jibe » 27 janv. 2012, 10:35

OK et du coup il n'y aurait pas moyen d'obtenir :
a 1
b 2
c 3

??

Re: Filtre avant affichage

par xTG » 26 janv. 2012, 20:24

Tu as un foreach si la variable de priorité donc c'est un comportement normal par rapport à ce que tu as codé.

Re: Filtre avant affichage

par Jibe » 26 janv. 2012, 18:43

Pas exactement, à chaque fois il m'enregistre autant de ligne qu'il a y de priorité...
Enfin je sais pas si c'est très clair mais par exemple si dans la page de saisie j'ai trois lignes ou faut que je rentre une priorité et un commentaire, supposons que je rentre 1 2 et 3 en priorité puis a b et c en commentaire, dans la base il va m'enregistrer :

a 1
a 2
a 3
b 1
b 2
b 3
c 1
c 2
c 3

Re: Filtre avant affichage

par xTG » 26 janv. 2012, 18:37

Quand tu dis plusieurs fois c'est plusieurs fois avec exactement les mêmes valeurs ?
Car vu que tu as des boucles c'est normal de constater plusieurs insertions, mais elles ont toutes des valeurs différentes.

Re: Filtre avant affichage

par Jibe » 26 janv. 2012, 18:33

En fait j'ai changer, maintenant j'ai ce code là :
foreach($com as $element => $valeur)
{
	foreach($prio as $elements)
	{
		if($valeur != "")
		{
			$bdd->exec("INSERT INTO l_collab_form_met VALUES(NULL, '$matricule', '$element[2]', '$valeur', '$elements', '$date', '$bu')");
		}
	}					
}
Mais ça enregistre toujours en plusieurs fois :(

Re: Filtre avant affichage

par xTG » 26 janv. 2012, 18:31

$string = explode("-", $element);
foreach($string as $ele)
Pourquoi une boucle là dessus ?
Cela veut dire que tu vas enregistrer deux fois, l'une avec 1 et l'autre avec la valeur de $codef.

Re: Filtre avant affichage

par Jibe » 26 janv. 2012, 16:37

J'ai suivi ton conseil mais je dois faire un betise quelque part parce que à l'enregistrement dans la base j'ai mes lignes doubles, triples,...
Voilà le bout de code de la page de saisie :
$z = 1;
$te = $bdd->query('SELECT l_met_scomp.niveau, scompetence.libscomp, scompetence.defscomp, formation.libform, formation.codeform FROM l_met_scomp, scompetence, competence, formation, l_form_scomp WHERE l_met_scomp.codemet = '.$_SESSION['met'].' AND l_met_scomp.codescomp = scompetence.codescomp AND scompetence.codecomp = competence.codecomp AND l_form_scomp.codescomp = scompetence.codescomp AND l_form_scomp.codeform = formation.codeform');
while($don = $te->fetch())
{
	$cib = $don['niveau'];
	$libsc = $don['libscomp'];
	$defsc = $don['defscomp'];
	$libf = $don['libform'];
	$codef = $don['codeform'];
	if(($cib - $note[$j]) >= 2)
	{
		<tr>
			<td align="left" width="300"><p onmouseover="montre('<?php echo addslashes($defsc); ?>');" onmouseout="cache();"><?php echo $libsc; ?></td>
			<td><?php echo $cib; ?></td>
			<td><?php if($remplit) echo $note[$j]; //$j++; ?></td>
			<td align="left"><label for="form[]"><?php echo $libf; ?></label></td>
			<td><select name="prio[]" id="prio[]">
				<option value=""></option>
				<option value="1">1</option>
				<option value="2">2</option>
				<option value="3">3</option></td>
			<td><textarea name="com[<?php echo $z.'-'.$codef; ?>]" id="com[<?php echo $z.'-'.$codef; ?>]" rows="3" cols="50"></textarea></td>
		</tr>
<?php
	}
$j++;
$z++;
}
Et voilà le code de la page de traitement pour l'enregistrement dans la base :
$com = $_POST['com'];
$prio = $_POST['prio'];
foreach($com as $element => $valeur)
{
	$string = explode("-", $element);
	foreach($string as $ele)
	{
                foreach($prio as $elements)
	        {
			if($valeur != "" && $elements != "")
			{
				$bdd->exec("INSERT INTO l_collab_form_met VALUES(NULL, '$matricule', '$ele[2]', '$valeur', '$elements', '$date', '$bu')");
			}
		}
	}
}
Mais du coup j'ai des lignes enregistrés plusieurs fois...

Re: Filtre avant affichage

par xTG » 26 janv. 2012, 12:40

tu peux le nommer ainsi : tonTab[premiereCle-secondeCle]
Ainsi à la récupération tu fais un explode de l'index sur le tiret et tu récupères tes deux clés.

Re: Filtre avant affichage

par Jibe » 26 janv. 2012, 11:24

Oui c'est une bonne idée mais dans une ligne de code comme celle-ci :
<td><select name="prio[<?php echo $codef; ?>]" id="prio[<?php echo $codef; ?>]">
Comment je peux faire le tableau à partir de deux clés (codef et codecomp) ?

Re: Filtre avant affichage

par xTG » 25 janv. 2012, 19:28

Travailles sur un jeu de clé (compétence + formation) sinon.
Comme ça pour le traitement tu peux faire ce que tu souhaites.

Re: Filtre avant affichage

par Jibe » 25 janv. 2012, 17:59

Ca m'arrange pas du tout ça :cry:. Je voulais enregistrer dans ma base les priorités et commentaires liées aux formations pour avoir pouvoir ressortir le tout dans un tableau... Si il faut que je passe par les codes compétences ça fausse tout

Re: Filtre avant affichage

par xTG » 25 janv. 2012, 17:43

Il faut toujours travailler sur une clé unique.
Donc la compétence dans ton cas.

Re: Filtre avant affichage

par Jibe » 25 janv. 2012, 17:00

Merci ça marche.

Par contre j'ai un autre problème.
Dans le 1er message que j'ai posté j'ai mis un extrait de code en disant que ça affichait un certains nombres de colonnes avec des informations...
<?php
<td align="left" width="300"><p onmouseover="montre('<?php echo addslashes($defsc); ?>');" onmouseout="cache();"><?php echo $libsc; ?></td>
          <td><?php echo $cib; ?></td>
          <td><?php echo $note[$j]; $j++; ?></td>
          <td align="left"><input type="checkbox" name="for[]" id="for[]" value="<?php echo $codef; ?>" /><label for="for[]"><?php echo $libf; ?></label></td>
          <td><select name="prio[<?php echo $codef; ?>]" id="prio[<?php echo $codef; ?>]">
          <option value=""></option>
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option></td>
          <td><textarea name="com[<?php echo $codef; ?>]" id="com[<?php echo $codef; ?>]" rows="3" cols="50"></textarea></td>
?>
Compétences | Niveaux cibles | Niveaux collab | Formation associée | Priorité | Commentaire
comp1 4 2 form1 2 com1
comp2 3 1 form2 3 com2
comp3 2 1 form1 2 com3

Pour les priorités et les commentaires je crée des tableaux à partir du code formation ($codef) et dans la page suivante (d'enregistrement) je fais un foreach pour enregistrer mes données dans la base. Le problème c'est que si une compétence est liée à la même formation il m'en prend qu'une seule...

Exemple : Si je prend la comp1 et la comp3 qui sont toutes les deux liées à la form1, au moment de l'enregistrement seule une seule sera retenue... Est-ce qu'il y a un moyen de contourner ça ou alors faut-il que je crée mes tableaux avec un code unique ?

Re: Filtre avant affichage

par xTG » 25 janv. 2012, 13:01

Dans ce cas : (avec suppression de la condition inutile sur le renseignement de niveau collab)
<?php
while($don = $te->fetch())
{
        $cib = $don['niveau'];
        $libsc = $don['libscomp'];
        $defsc = $don['defscomp'];
        $libf = $don['libform'];
        $codef = $don['codeform'];
        if( $cib - $note[$j] >= 2 ) {
        ?>
        <tr>
          <td align="left" width="300"><p onmouseover="montre('<?php echo addslashes($defsc); ?>');" onmouseout="cache();"><?php echo $libsc; ?></td>
          <td><?php echo $cib; ?></td>
          <td><?php echo $note[$j]; $j++; ?></td>
          <td align="left"><input type="checkbox" name="for[]" id="for[]" value="<?php echo $codef; ?>" /><label for="for[]"><?php echo $libf; ?></label></td>
          <td><select name="prio[<?php echo $codef; ?>]" id="prio[<?php echo $codef; ?>]">
          <option value=""></option>
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option></td>
          <td><textarea name="com[<?php echo $codef; ?>]" id="com[<?php echo $codef; ?>]" rows="3" cols="50"></textarea></td>
        </tr>
        <?php
        }
}

Re: Filtre avant affichage

par Jibe » 25 janv. 2012, 12:04

Si normalement il est toujours renseigné.
C'est une page précédente ou l'utilisateur rentre les niveaux et si il y a des oublis ils sont signalés donc à priori le cas ne devrait pas arriver