Menus déroulants de selection multicritères

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 : Menus déroulants de selection multicritères

par SpcK » 05 oct. 2005, 11:43

Si si, le .htaccess fonctionne sur Free (du moins, j'ai l'impression)

Pour mon pb de nom de la base différent entre ma machine et free, c'est tout bête : il fallait juste ajouter
mysql_selectdb($dbname);
dans le fichier de connection qui est inclus.

par Cyrano » 05 oct. 2005, 11:06

Pour le .htaccess sur free, j'ai peur que ça marche pas, mais l'astuce consiste à avoir dans le répertoire une page index.php qui redirige automatiquement vers l'index du site, quelque chose dans ce goût là:
<?php
header("Location: ../index.php?page=accueil");
$title="Sortie manu-militari, zone interdite.";
echo"<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title><?php echo "$title"; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="Robots" content="none" />
<script language="JavaScript">
<!-- Begin
//PLF-http://www.jejavascript.net/
function sortieforcee()
{
	setTimeout("window.location='../index.php'",2500); // delai en millisecondes
}
// End -->
</script>
</head>
<body onload="sortieforcee()" style="color: #ff0000; background-color: #ffcc66">
<h2 style="text-align:center">L'accès à ce répertoire est interdit.</h2>
<p style="text-align:center">Vous serez redirigé dans trois secondes vers l'acceuil du site</p>
<p style="text-align:center">S'il ne se passait rien, cliquez sur le lien ci-dessous:</p>
<p style="text-align:center"><a href="../index.php">Retour à l'accueil du site</a></p>
</div>
</body>
</html>

par SpcK » 05 oct. 2005, 10:56

Salut, je viens donner des news aux gentils formateurs de phpfrance après quelques jours parmi vous :

- j'ai enrichi ma feuille de style et je fais maintenant appel à des class partout
- j'ai installé Wamp sur vos conseil pour mon developpement local ===> nickel
Simplement dans mes fichiers en local, je fais des requetes sur mysql.matable alors que sur free comme je n'ai qu'une seule base c'est sur matable ==> avez-vous une ruse en stock pour alléger les opérations d'upload ???
- j'ai fait un include de monfichierdeconnexion.php qui se trouve dans un répertoire avec un .htaccess qui comprend deny all ==> est-ce une solution secure ???
- mon pb de bouton re-initialiser est toujours en cours.

Merci encore à tous pour votre aide très précieuse :P

par Cyrano » 04 oct. 2005, 19:25

Non, c'est encore plus simple que ça :
<input type="button" name="bouton_refaire" value="Re-initialiser" onclick="window.location: ./index.php" style="font-family: Verdana; font-size: 8 pt; color: #000080" />
on laisse un espace après le "location:" et on fait précéder le "/" juse avant index d'un point qui indique le répertoire courant.

Teste ça et reviens avec le résultat.

par Truc » 04 oct. 2005, 19:04

parcequ'il y avait un oubli, la redirection implique du javascript, et il faut le lui dire :wink:
<input tye="button" name="bouton_refaire" value="Re-initialiser" onclick="javascript:window.location:' <?php echo($_SERVER['PHP_SELF']); ?>'" />

par SpcK » 04 oct. 2005, 18:22

Re-Cyrano,

j'ai essayé ton code (en corrigeant tye en type et en essayant d'enlever un espace avant l'url) mais rien n'y fait : le bouton est inefficace.

Tu peux voir la page à http://tableaux.tennis.free.fr/index.php
Quand j'affiche la source, c'est interprété en html comme

Code : Tout sélectionner

<input type="button" name="bouton_refaire" value="Re-initialiser" onclick="window.location:/index.php" style="font-family: Verdana; font-size: 8 pt; color: #000080" />
Nota : je vais intégrer mes boutons et menus déroulants dans ma feuille de style....faut pas taper

par Cyrano » 02 oct. 2005, 10:22

L'astuce consisterait à recharger la page sans paramètres : au lieu d'un input type="reset", utilises un input type="button" : dedans, mets un gestionnaire d'évènement :
<input tye="button" name="bouton_refaire" value="Re-initialiser" onclick="window.location: <?php echo($_SERVER['PHP_SELF']); ?>" />

par SpcK » 02 oct. 2005, 01:10

Super cool votre aide chez Phpfrance :P
Ca commence à ressembler un peu à qqchose : http://tableaux.tennis.free.fr/draws4.php

Dernier pb avant le prochain : le bouton réinitialiser (reset) remet à la valeur initiale les champs de sélection avant que l'on exécute la requête. Si on l'utilise après avoir cherché, il est inefficace.

Y a un truc svp ????
Merci d'avance

par SpcK » 01 oct. 2005, 23:27

OK, je m'en suis sorti avec
if ($nom<>'') { $clauses[] = "nom = '". $nom ."'";}
au lieu de
 if(isset($nom)) 
{ 
    $clauses[] = "nom = '". $nom ."'"; 
} 
Merci à tous, je tiens ma requête et je vais passer au fignolage
@+

par Truc » 01 oct. 2005, 22:15

affiche la requete tel qu'elle va etre exécutée... echo $sql; apres le test sur le "count".

par SpcK » 01 oct. 2005, 22:02

Merci Truc, mais même avec if(count($clauses) >= 1) cela ne fonctionne pas mieux.

Pendant que vous essayez de m'aider, je passe mon temps à alimenter ma base à la mano : pas loin de 1.000 pdf à classifier...argggg

par Truc » 01 oct. 2005, 21:51

Il y a une toute petite erreur au niveau du "count" mauvais placement des parenthèses.

par SpcK » 01 oct. 2005, 21:38

Merci c'est cool, j'ai appris plein de trucs dans ton code.....et il y a même encore des subtilités à explorer.

La page est visible ici : http://tableaux.tennis.free.fr/draws4.php
J'ai ajouté des echo pour afficher les valeurs sorties du formulaires et $total.

Le problème réside encore dans la gestion de la sélection vide qui ne devrait pas exécuter le WHERE grace aux commandes if (isset($variable)).

Si tu sélectionnes US Open 2005 Grand Chelem H Federer, tu obtiens bien un enregistrement.
Si tu ne sélectionnes que US Open ===> 0 résultat......grumfffff

Merci encore de ton aide
@+

par Cyrano » 01 oct. 2005, 19:10

Il y a du foul dans ta construction de requête, essaye comme ça, je te laisse découvrir les modification/suppressions/ajouts et tiens moi au courant de l'évolution :
<?php
/* ~~~~~~~~~ Récupération au rechargement ~~~~~~~~~ */
$nom       = isset($_POST['tournoi'])   ? $_POST['tournoi']   : null;
$annee     = isset($_POST['annee'])     ? $_POST['annee']     : null;
$sexe      = isset($_POST['sexe'])      ? $_POST['sexe']      : null;
$type      = isset($_POST['type'])      ? $_POST['type']      : null;
$vainqueur = isset($_POST['vainqueur']) ? $_POST['vainqueur'] : null;

/* Création des des requêtes */
$sql_nom       = "SELECT DISTINCT(nom) from tableaux ORDER BY nom ASC";
$sql_annee     = "SELECT DISTINCT(annee) from tableaux ORDER BY annee ASC";
$sql_type      = "SELECT DISTINCT(type) from tableaux ORDER BY type ASC";
$sql_sexe      = "SELECT DISTINCT(sexe) from tableaux ORDER BY sexe ASC";
$sql_vainqueur = "SELECT DISTINCT(vainqueur) from tableaux ORDER BY vainqueur ASC";
/* exécution des requêtes */
$resultat_nom       = mysql_query($sql_nom);
$resultat_annee     = mysql_query($sql_annee);
$resultat_type      = mysql_query($sql_type);
$resultat_sexe      = mysql_query($sql_sexe);
$resultat_vainqueur = mysql_query($sql_vainqueur);
/* On prépare et on alimente les listes déroulantes */
?>
<form action="" method="post" id="tournois_form">
  <input type="submit" value="Envoyer" name="B1">
  <select name="tournoi" id="tournoi">
  <option value="">Tournoi ?</option>
<?
while($ligne_nom = mysql_fetch_assoc($resultat_nom))
{
    $selected1 = (isset($nom) && $nom == $ligne_nom['nom']) ? " selected=\"selected\"" : null;
?>
  <option value="<?php echo($ligne_nom ['nom']); ?>"<?php echo($selected1); ?>><?php echo($ligne_nom['nom']); ?></option>
<?
}
?>
  </select>
  <select name="annee" id="annee">
  <option value="">Année ?</option>
<?
while($ligne_annee = mysql_fetch_assoc($resultat_annee))
{
    $selected2 = (isset($annee) && $annee == $ligne_annee['annee']) ? " selected=\"selected\"" : null;
?>
  <option value="<?php echo($ligne_annee['annee']); ?>"<?php echo($selected2); ?>><?php echo($ligne_annee['annee']); ?></option>
<?
}
?>
  </select>
  <select name="type" id="type">
  <option value="">Type ?</option>
<?
while($ligne_type = mysql_fetch_assoc($resultat_type))
{
    $selected3 = (isset($type) && $type == $ligne_type['type']) ? " selected=\"selected\"" : null;
?>
  <option value="<?php echo($ligne_type['type']); ?>"<?php echo($selected3); ?>><?php echo($ligne_type['type']); ?></option>
<?
}
?>
  </select>
  <select name="sexe" id="sexe">
  <option value="">Sexe ?</option>
<?
while($ligne_sexe = mysql_fetch_assoc($resultat_sexe))
{
    $selected4 = (isset($sexe) && $sexe == $ligne_sexe['sexe']) ? " selected=\"selected\"" : null;
?>
  <option value="<?php echo($ligne_sexe['sexe']); ?>"<?php echo($selected4  ); ?>><?php echo($ligne_sexe['sexe']); ?></option>
<?
}
?>
  </select>
  <select name="vainqueur" id="vainqueur">
  <option value="">Vainqueur ?</option>
<?
while($ligne_vainqueur = mysql_fetch_assoc($resultat_vainqueur))
{
    $selected5 = (isset($vainqueur) && $vainqueur == $ligne_vainqueur['vainqueur']) ? " selected=\"selected\"" : null;
?>
  <option value="<?php echo($ligne_vainqueur['vainqueur']); ?>"<?php echo($selected5); ?>><?php echo($ligne_vainqueur['vainqueur']); ?></option>
<?
}
?>
  </select>
</form>
<?
/* Au moment de créer la requête pour l'affichage du tableau, on teste si tournoi existe pour rajouter une clause WHERE */

$sql = "SELECT * FROM tableaux";
$clauses = array();
if(isset($nom))
{
    $clauses[] = "nom = '". $nom ."'";
}
if(isset($annee))
{
    $clauses[] = "annee = '". $annee ."'";
}
if(isset($type))
{
    $clauses[] = "type = '". $type ."'";
}
if(isset($sexe))
{
    $clauses[] = "sexe = '". $sexe ."'";
}
if(isset($vainqueur))
{
    $clauses[] = "vainqueur = '". $vainqueur ."'";
}
if(count($clauses >= 1))
{
    $tri = implode(" AND ", $clauses);
    $sql .= " WHERE ". $tri;
}

$requete = mysql_query($sql) or die("Erreur SQL !<br>". $sql ."<br>". mysql_error());
$total = mysql_num_rows($requete);

// si on a récupéré un résultat on l'affiche.
if($total > 0)
{
    // debut du tableau
?>
<table bgcolor="#FFFFFF">
  <tr>
    <td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Annee</b></font></td>
    <td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Tournoi</b></font></td>
    <td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Type</b></font></td>
    <td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Catégorie</b></font></td>
    <td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Vainqueur</b></font></td>
    <td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Finaliste</b></font></td>
    <td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Score</b></font></td>
  </tr>
<?php
// on fait une boucle qui va faire un tour pour chaque enregistrements
while($data = mysql_fetch_array($requete))
{
?>
  <tr>
    <td bgcolor="#FFFFFF"><font face="Verdana" size="1" color="#008000"><?php echo($data['Annee']); ?></font></td>
    <td bgcolor="#FFFFFF"><font face="Verdana" size="1" color="#008000"><a href="<?php echo($data['url']); ?>" target="_blank"><?php echo($data['Nom']); ?></a></font></td>
    <td bgcolor="#FFFFFF"><font face="Verdana" size="1" color="#008000"><?php echo($data['Type']); ?></font></td>
    <td bgcolor="#FFFFFF"><p align="center"><font face="Verdana" size="1" color="#008000"><?php echo($data['Sexe']); ?></font></td>
    <td bgcolor="#FFFFFF"><font face="Verdana" size="1" color="#008000"><?php echo($data['Vainqueur']); ?></font></td>
    <td bgcolor="#FFFFFF"><font face="Verdana" size="1" color="#008000"><?php echo($data['Finaliste']); ?></font></td>
    <td bgcolor="#FFFFFF"><font face="Verdana" size="1" color="#008000"><?php echo($data['Score']); ?></font></td>
  </tr>
<?php
}
?>
</table>
<?php
// fin du tableau.
}
else
{
?>
<p>Pas d'enregistrements dans la catégorie sélectionnée...</p>
<?php
}
// on ferme la connexion à mysql
mysql_close();
?>

par SpcK » 01 oct. 2005, 18:11

Merci de ton aide Cyrano, ça commence à prendre forme.
J'ai néanmoins un pb de taille, certainement lié à mon faible niveau : mes menus de sélection sont initialisés à vide (option value="") et donc si je ne sélectionne rien dans la boîte je devrais obtenir tous les enregistements. Malheureusement, cela ne sort rien en résultat.
Voici mon code (désolé pour la goreterie)
/* Création des des requêtes */ 
$sql_nom = "SELECT DISTINCT(nom) from tableaux ORDER BY nom ASC";
$sql_annee = "SELECT DISTINCT(annee) from tableaux ORDER BY annee ASC";
$sql_type = "SELECT DISTINCT(type) from tableaux ORDER BY type ASC"; 
$sql_sexe = "SELECT DISTINCT(sexe) from tableaux ORDER BY sexe ASC"; 
$sql_vainqueur = "SELECT DISTINCT(vainqueur) from tableaux ORDER BY vainqueur ASC"; 
/* exécution des requêtes */ 
$resultat_nom = mysql_query($sql_nom); 
$resultat_annee = mysql_query($sql_annee);
$resultat_type = mysql_query($sql_type);
$resultat_sexe = mysql_query($sql_sexe);
$resultat_vainqueur = mysql_query($sql_vainqueur);
/* On prépare et on alimente les listes déroulantes */ 
?>
<form action="" method="post" id="tournois_form">
<input type="submit" value="Envoyer" name="B1">
  <select name="tournoi" id="tournoi"> 
  <option value="">Tournoi ?</option>
<? 
while($ligne_nom = mysql_fetch_assoc($resultat_nom)) 
{ 
?> 
    <option value="<?php echo($ligne_nom ['nom']); ?>"><?php echo($ligne_nom['nom']); ?></option> 
<? 
} 
?> 
  </select>
  <select name="annee" id="annee"> 
  <option value="">Année ?</option>
<? 
while($ligne_annee = mysql_fetch_assoc($resultat_annee)) 
{ 
?> 
    <option value="<?php echo($ligne_annee['annee']); ?>"><?php echo($ligne_annee['annee']); ?></option> 
<? 
} 
?> 
  </select>
  <select name="type" id="type"> 
  <option value="">Type ?</option>
<? 
while($ligne_type = mysql_fetch_assoc($resultat_type)) 
{ 
?> 
    <option value="<?php echo($ligne_type['type']); ?>"><?php echo($ligne_type['type']); ?></option> 
<? 
} 
?> 
  </select>
  <select name="sexe" id="sexe"> 
  <option value="">Sexe ?</option>
<? 
while($ligne_sexe = mysql_fetch_assoc($resultat_sexe)) 
{ 
?> 
    <option value="<?php echo($ligne_sexe['sexe']); ?>"><?php echo($ligne_sexe['sexe']); ?></option> 
<? 
} 
?> 
  </select>
  <select name="vainqueur" id="vainqueur"> 
  <option value="">Vainqueur ?</option>
<? 
while($ligne_vainqueur = mysql_fetch_assoc($resultat_vainqueur)) 
{ 
?> 
    <option value="<?php echo($ligne_vainqueur['vainqueur']); ?>"><?php echo($ligne_vainqueur['vainqueur']); ?></option> 
<? 
} 
?> 
  </select>
</form> 

<?
/* ~~~~~~~~~ Récupération au rechargement ~~~~~~~~~ */ 
$nom = isset($_POST['tournoi']) ? $_POST['tournoi'] : null; 
$annee = isset($_POST['annee']) ? $_POST['annee'] : null;
$sexe = isset($_POST['sexe']) ? $_POST['sexe'] : null;
$type = isset($_POST['type']) ? $_POST['type'] : null;
$vainqueur = isset($_POST['vainqueur']) ? $_POST['vainqueur'] : null;

/* Au moment de créer la requête pour l'affichage du tableau, on teste si tournoi existe pour rajouter une clause WHERE */ 

$sql = 'SELECT * FROM tableaux WHERE annee<>""'; 

if(isset($nom)) 
{ 
    $sql .= " and nom = '". $nom ."'"; 
} 

if(isset($annee)) 
{ 
    $sql .= " and annee = '". $annee ."'"; 
}

if(isset($type)) 
{ 
    $sql .= " and type = '". $type ."'"; 
}

if(isset($sexe)) 
{ 
    $sql .= " and sexe = '". $sexe ."'"; 
}

if(isset($vainqueur)) 
{ 
    $sql .= " and vainqueur = '". $vainqueur ."'"; 
}

$requete = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
$total = mysql_num_rows($requete);

// on fait une boucle qui va faire un tour pour chaque enregistrements 
while($data = mysql_fetch_array($requete)) 


// si on a récupéré un résultat on l'affiche.
if($total) {


// debut du tableau
    echo '<table bgcolor="#FFFFFF">'."\n";


        echo '<tr>';
        echo '<td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Annee</b></font></td>';
        echo '<td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Tournoi</b></font></td>';
        echo '<td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Type</b></font></td>';
        echo '<td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Catégorie</b></font></td>';
        echo '<td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Vainqueur</b></font></td>';
        echo '<td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Finaliste</b></font></td>';
        echo '<td bgcolor="#FFAD29"><p align="center"><font face="Verdana" size="1" color="#FFFFFF"><b>Score</b></font></td>';
        echo '</tr>'."\n";



// on fait une boucle qui va faire un tour pour chaque enregistrements 
while($data = mysql_fetch_array($requete)) 

{
		
        echo '<tr>';
        echo '<td bgcolor="#FFFFFF"><font face="Verdana" size="1" color="#008000">'.$data['Annee'].'</font></td>';
        echo '<td bgcolor="#FFFFFF"><font face="Verdana" size="1" color="#008000"><a href='.$data['url'].' target="_blank">'.$data['Nom'].'</a></font></td>';
        echo '<td bgcolor="#FFFFFF"><font face="Verdana" size="1" color="#008000">'.$data['Type'].'</font></td>';
        echo '<td bgcolor="#FFFFFF"><p align="center"><font face="Verdana" size="1" color="#008000">'.$data['Sexe'].'</font></td>';
        echo '<td bgcolor="#FFFFFF"><font face="Verdana" size="1" color="#008000">'.$data['Vainqueur'].'</font></td>';
        echo '<td bgcolor="#FFFFFF"><font face="Verdana" size="1" color="#008000">'.$data['Finaliste'].'</font></td>';
        echo '<td bgcolor="#FFFFFF"><font face="Verdana" size="1" color="#008000">'.$data['Score'].'</font></td>';
        echo '</tr>'."\n";
    }
    echo '</table>'."\n";
    // fin du tableau.
}

else echo 'Pas d\'enregistrements dans cette table...';

// on ferme la connexion à mysql 
mysql_close(); 
?> 
J'ai également un second petit pb : même lorsque mes sélections se déroulent correctement, je n'affiche jamais le premier enregistrement correspondant à ma requête.

Merci d'avance