Mon affichage se dédouble.

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 : Mon affichage se dédouble.

Re: Mon affichage se dédouble.

par Jalance » 23 févr. 2013, 04:13

Salut moogli et merci pour tes conseils judicieux.
Je tiens à te préciser une chose au sujet de mon site. Les concours qui y sont inscrits viennent d'autres sites et ne sont pas de mon fait. Je ne fais que répertorier tous les concours valides de ma province. Quand tu cliques sur le bouton "Inscription", cela ouvre une nouvelle fenêtre qui t'amène à la page du formulaire d'inscription du concours proprement dit. De là, tu remplis le formulaire pour t'y inscrire. Donc, impossible de s'inscrire à plusieurs concours en même temps. Quand tu as fini de t'inscrire à ces concours, ils disparaissent de cette page quand tu la quittes et vont se placer dans la "page perso" du membre.
Merci encore pour le code et les conseils. Étant débutant en php (mon ami programmeur m'a lâché! :evil: ) je vais tenter de bien décortiquer tout ce que tu m'as proposé et vais sûrement te revenir pour savoir si j'ai bien travaillé! 8-)

Re: Mon affichage se dédouble.

par moogli » 22 févr. 2013, 21:02

salut,

il faut que tu organise une "césure" c'est a dire que tu doit gérer le fait de changer de concourt lors de l'affichage.

c'est relativement simple, pour cela il te faut une variable qui contient la référence au concourt 'précédent' (celui fournit par la ligne précédente de la requête sql), dans ton cas c'est id_concours.


par exemple
<?php
$result = $mysql_query($sql);

$idprecendent = null; // parce qu'il y a des tordus qui utilise zéro comme clef primaire valide :)
// on affiche le début du premier concourt
echo '<fieldset>';

while($data = mysql_fetch_assoc($result)) {
if($idprecedent != $data['id_concours']) {
// si l'on change ce concourt
if($idprecedent !== null) {
// si ce n'est pas le premier passage dans la boucle c'est donc que j'ai déjà un concours (au moins) d'affiché donc je ferme le fieldset et en ouvre un autre
echo '</fieldset><fieldset>';
$idprecedent = $data['id'];
}
echo '<legend>'.$data['titre'].'</legend>';
// Ajoute ici ce qui correspond au coucourt seulement
}
// ici tu affiche les réponses
echo $data['reponse'].'<br />';
}
?>
A toi d'adapter a ton code ;)

Je te conseil de :
- supprimer les balises obsolète / inutile et de remplacer par une css (par exemple font ou b)
- Former ton html correctement : utiliser " pour délimiter les attributs des tags (tu ne le fait pas partout), c'est important parce qu'un jour tu ne va comprendre pourquoi cela ne fonctionne pas :)
- Ne pas utiliser les tableaux pour la mise en page (c'est le mal :twisted: ) => CSS
- Utiliser l'extension mysqli plutôt que l'extension mysql (qui est dépréciée a partir de la prochaine version et vouée à disparaître). La différence est relativement minime ;).
- Ne pas passer trop de données dans le formulaire (au final tu n'a besoin ques des id_concours le reste étant récupéré a partir de celui ci).
- Ne pas utiliser de copie de variables comme $truc = $data['truc'] cela n'apporte rien un tableau c'est aussi lisible et l'on sais au premier coup d'oeil (par exemple lorsque l'on lit le code en biais) d'ou ça vient, parce que l'on aura repéré le mysql_fetch_assoc dans le while. (les extrémistes te diront c'est anti performant autant au niveau processeur que mémoire mais bon je préfère mes arguments pour quelques variables ;) ).
- Utiliser un seul formulaire bien foutu plutôt que 50 ;)
Tu y a gagnera en maintenance et surtout en "expérience utilisateur". La tu doit afficher 12 fois la page pour d'inscrire a 12 concours.
si tu remplace tes boutons submit par des checkbox, avec en nom la notation tableau contenant l'id_concours (par exemple <input type="checkbox" name="inscription['.$id_ concours.']" />) et un seul bouton submit à la fin tu permet l'inscription à plusieurs concourt en même temps et ce n'est pas beaucoup plus complexe pour toi coté validation.

pour la validatin un foreach que $_POST['inscription'] te permet de traiter toutes les cases qui on étaient cochées (seules celles qui sont cochées sont retournées).


@+

Mon affichage se dédouble.

par Jalance » 22 févr. 2013, 15:49

Bonjour à tous!
Voilà mon problème. J'ai un script qui affiche des concours se terminant dans les 5 jours qui suivent. Certains concours ont des réponses (comme des indices télés, des codes barres, ect...). Mais quand un concours a 2 réponses ou plus, ce dernier se dédouble sur ma page et inscrit une réponse dans chaque. J'aimerais que les réponses soient regroupées en bloc et s'insèrent avec leurs concours respectifs. Voici mon script:


<?php

$sql="SELECT * FROM concours LEFT JOIN reponses ON concours.id_concours = reponses.id_concours
  WHERE  concours.id_concours NOT IN (SELECT pid_concours FROM perso WHERE rpseudo ='$login') 
  AND datelimite BETWEEN CURRENT_DATE AND DATE_ADD( CURRENT_DATE,INTERVAL 5 DAY)
 ORDER BY datelimite ASC" ;

$resultat=mysql_query($sql); 

while( $ligne=mysql_fetch_array($resultat))
{
 $no_concours=$ligne['id_concours'];
 $nick=$ligne['pseudo'];
 $titre=$ligne['titre_concours'];
 $url=$ligne['url_concours'];
 $type=$ligne['type_concours'];
 $description=$ligne['remarque'];
 $datel=$ligne['datelimite'];
 $rep=$ligne['reponse'];

	    
		echo '<form target="_blank" name="MaForm" action="inscription.php" method="post">';
		echo '<FIELDSET>';
                echo '<LEGEND align=top><b><h3><font color=red>'; echo $titre;echo '</font></h3></b></LEGEND>';
		echo'<table>';
		echo '<td align="justify">';
 

		if ($type == "Unique")
			echo '<img src="../images/puce26.gif" width="14" height="14">';
		else if ($type == "Journalier")
			echo '<img src="../images/puce27.gif" width="13" height="13">';
		else if ($type == "Hebdomadaire")
			echo '<img src="../images/puce43.gif" width="11" height="11">';
		else if ($type == "Mensuel")
			echo '<img src="../images/puce129.gif" width="12" height="12">';
                else 
			echo '<img src="../images/24heures.gif" width="13" height="13">';
		


           


?>
<b>
<font color="blue"> No. du concours :</font>   <?php echo $no_concours?>&nbsp;&nbsp;&nbsp;
<font color="blue">Pseudo : </font>  <?php echo $nick?>&nbsp;&nbsp;&nbsp;
<font color="blue">Date limite:</font> <?php echo $datel?>&nbsp;&nbsp;&nbsp;<br>  			
<font color="blue">Remarques :</font> <?php echo $description?>&nbsp;
<font color="Red">R&eacuteponse :</font><font color="blue"> <?php echo $rep?></font>
<br><br></td></table></b> 
<input type="hidden" name="pseudo" value="<?php echo $nick?>">
<input type="hidden" name="login" value="<?php echo $login?>">
<input type="hidden" name="datelimite" value="<?php echo $datel?>">
<input type="hidden" name="id_concours" value="<?php echo $no_concours?>">
<input type="hidden" name="titre_concours" value="<?php echo $titre?>">
<input type="hidden" name="type_concours" value="<?php echo $type?>">
<input type="hidden" name="url_concours" value="<?php echo $url?>"> 
	
</font>
<!--<input type="image" src="/images/inscription.png" width=70 height=30 onclick="window.open('<?php echo $url?>','_blank');"/>-->
<input type="submit" value="Inscription">

</fieldset>
</form>
<?php
   }
  ?> 
La variable pour la réponse est "$rep". La solution parfaite serait d'insérer un bouton et d'afficher toutes les réponses rattachées à un concours dans une petite fenêtre. J'ai bien essayé mais je dois avouer que mes essais se sont avérés infructueux. J'attends vos suggestions.
Merci.