formulaire, requete, différentes possibilitées

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 : formulaire, requete, différentes possibilitées

Re: formulaire, requete, différentes possibilitées

par sbomb » 06 déc. 2011, 12:49

Merci de ta réponse complète, je regarde un peu tout ca! :)

@+

Re: formulaire, requete, différentes possibilitées

par moogli » 06 déc. 2011, 12:28

hum déjà coté SQL faudrait ce mettre à jour :) => http://sqlpro.developpez.com/cours/sqlaz/jointures/

ensuite une double condition sur la jointure c'est assez étonnant, ensiute si ça fonctionne ^^
je pencherais pour un problème de modélisation :?:

A tu testé tes requêtes directement sur mysql ? (avec phpmyadmin par exemple) ? juste histoire d'être certain qu'elles fonctionnent en dehors de toute considération de valeur ;)

ensuite ça $_SESSION['selectType'] && $_SESSION['prix1'] && $_SESSION['prix2'] && $_SESSION['capacite'] non, compare à quelque chose, parce que bon la on ne sais pas ce que tu veux.

si ces valeurs existent pas en session tu va avoir une myriade d'erreur.
donc utilisation de http://www.php.net/isset]isset ou http://www.php.net/empty]empty ;)

if (($nb_total = $nb_total[0]) == 0) mauvaise recopie ?

parce que la tu affecte $nb_total[0] à $nb_total et tu compare le tout à zéro (ou false).
donc if ($nb_total[0] == 0)

en règle général on ne fait pas d'affectation dans un if, c'est source d'emmerde :) (surtout que tu ne réutilise pas $nb_total après).

tu peux utilise http://www.php.net/mysql_free_result() pour libérer la ressource de ta requête SQL histoire qu'il n'y ai pas de mélange avec celle du dessous :)

($liste_hebergement=mysql_fetch_array($req))!=NULL pas null mais false ;)
Retourne un tableau de chaînes qui correspond à la ligne récupérée ou FALSE s'il n'y a plus de lignes. Le type de tableau retourné dépend de la définition du paramètre result_type. En utilisant MYSQL_BOTH (défaut), vous récupérerez un tableau contenant des indices associatifs et numériques. En utilisant MYSQL_ASSOC, vous ne récupérerez que les indices associatifs (comme le fonctionnement de la fonction mysql_fetch_assoc()), en utilisant MYSQL_NUM, vous ne récupérerez que les indices numériques (comme le fonctionnement de la fonctionmysql_fetch_row()).
mysql_query("SET NAMES 'utf8'"); pas besoin des ' => mysql_query("SET NAMES utf8");

Je te conseil de vérifier aussi que $_GET['debut'] soit bien un chiffre car si l'on modifie l'url avec debut=azerty comment ça se comporte ?
=> is_numeric ou ctype_digit

histoire de sécuriser un peux tes requetes => [url=http://www.php.net/mysql_real_escape_string]mysql_real_escape_string[/ur] sur toute les valeurs issue de get ou post (donc celle qui viennent de ta session la pour la coup).

pour être certain de ce que tu a en session un simple
<?php
echo '<pre>';
var_dump($_SESSION);
echo '</pre>';
?>
voila j'ai fait un peu tout le tour ;)

@+

Re: formulaire, requete, différentes possibilitées

par sbomb » 06 déc. 2011, 11:47

Autant pour moi, voici mon traitement (qui utilise une pagination):
<?php
require_once("connect.php");
 
 	$lien=connect_bdd();
        if(($_SESSION['selectType'] && $_SESSION['prix1'] && $_SESSION['prix2'] && $_SESSION['capacite'] && $_SESSION['localisation'])=="--Choix--"){
	    $select='SELECT count(id_residence) FROM RESIDENCE r, TYPE t, PROPRIETAIRE p WHERE t.id_type = r.id_type AND p.id_proprietaire = r.id_proprietaire ';
        }
        if(($_SESSION['selectType'])!="--Choix--"){
	    $select='SELECT count(id_residence) FROM RESIDENCE r, TYPE t, PROPRIETAIRE p WHERE t.id_type = r.id_type AND p.id_proprietaire = r.id_proprietaire AND r.prix >= '.$_SESSION['prix1'].' AND r.prix <= '.$_SESSION['prix2'].' AND r.capacite >= '.$_SESSION['capacite'].' AND r.localisation <= '.$_SESSION['localisation'].' 	';
        }
$resultat = mysql_query($select);

$nb_total = mysql_fetch_array($resultat);

if (($nb_total = $nb_total[0]) == 0) {
   echo "Aucun r&eacute;sultat ne correspond &acirc votre recherche!"; 
}
else {

echo "<table>";
        echo "<caption>Liste des h&eacute;bergements</caption>";
	echo "<thead>";
        echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"http://bainslesbains-tourisme.fr/stage/css/styleResult.css\" />"; 
        echo"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";        

        echo '</thead><tbody>';
	if (!isset($_GET['debut'])) $_GET['debut'] = 0;
                    $nb_affichage_par_page = 6;   
                    if(($_SESSION['selectType'] && $_SESSION['prix1'] && $_SESSION['prix2'] && $_SESSION['capacite'] && $_SESSION['localisation'])=="--Choix--"){                    
                        $requete='SELECT r.nom_residence, r.ville_residence, r.capacite, r.prix, r.nblogement, r.url_photo1, p.nom_proprietaire, r.code_classement, r.gite, r.id_type, r.id_proprietaire FROM RESIDENCE r, TYPE t, PROPRIETAIRE p WHERE t.id_type = r.id_type AND p.id_proprietaire = r.id_proprietaire ORDER BY code_classement DESC, r.prix DESC, r.nom_residence ASC limit '.$_GET['debut'].','.$nb_affichage_par_page.' ';
                    }
                    if(($_SESSION['selectType'])=="--Choix--"){
	                 $requete='SELECT r.nom_residence, r.ville_residence, r.capacite, r.prix, r.nblogement, r.url_photo1, p.nom_proprietaire, r.code_classement, r.gite, r.id_type, r.id_proprietaire FROM RESIDENCE r, TYPE t, PROPRIETAIRE p WHERE t.id_type = r.id_type AND p.id_proprietaire = r.id_proprietaire AND r.prix >= '.$_SESSION['prix1'].' AND r.prix <= '.$_SESSION['prix2'].' AND r.capacite >= '.$_SESSION['capacite'].' AND r.localisation <= '.$_SESSION['localisation'].' ORDER BY code_classement DESC, r.prix DESC, r.nom_residence ASC limit '.$_GET['debut'].','.$nb_affichage_par_page.' ';
                    }
                    mysql_query("SET NAMES 'utf8'");
                    $req=mysql_query($requete);
                    
                    
	            
                        while(($liste_hebergement=mysql_fetch_array($req))!=NULL){

                                  .....

                      }


edit: Les 2 requetes, ne fonctionne pas, je pense que je dois mal utiliser mes $_SESSION et leur égalité avec la valeur "--Choix--"

edit2: Le $_SESSIOn sont bien recupere dans un session start en debut de code, mais que je n'ai pas "citer"

Re: formulaire, requete, différentes possibilitées

par moogli » 06 déc. 2011, 11:29

salut,

comme y a pas d'exemple du traitement c'est du pif.

il faut gérer la construction de la requête.
par exemple
<?php
$sql = 'select truc, bidulle from machin where ';
$nbchamp = 0;
if ($champ1 != 'valeur par défaut) {
$sql .= ' champ1=/like '.$champ1);
$nbchamp ++;
}
if ($champ2 != 'valeur par défaut) {
$sql .= ' champ2=/like '.$champ1);
$nbchamp ++;
}
// etc etc
if ($nbchamp === 0) {
$sql = str_replace (' where ','',$sql);
}
mysql_query($sql);
?>
bon c'est un exemple rapide mais le principe est la.


@+

formulaire, requete, différentes possibilitées

par sbomb » 06 déc. 2011, 11:12

Bonjour,

J'ai actuellement un formulaire qui présente différentes listes déroutantes et qui à l'envoi effectue une recherche selon les critères demandés.
Auparavant lorsqu'un champ n'étais pas renseigné, un script JavaScript me l'indiquait.
Or sur demande de mon chef de projet, il serait bien que les requêtes s'effectuent en fonction des champs remplis.
Exemple, si aucun champ n'est renseigné, tous les logements apparaissent.
Exemple2, si seul le prix mini est renseigné, alors s'affiche les logements correspondant.

Pour le résultat des 2 exemples, ce sont évidemment 2 requêtes différentes.
Sachant que j'ai 5 listes déroulantes dans ce formulaire, j'ai 5⁵ possibilités de choix que l'utilisateur peux effectuer si je me trompe pas, alors je voudrais savoir si la seule possibilité est de traiter tous les cas possible auquel cas, ça risque de me prendre énormément de temps et me donner énormément de conditions dans ma page de traitements des résultats, ou alors y à t-il une solution à laquelle je n'ai pas pensée?

Voici mon formulaire si sa peut aider:
echo "<form onsubmit=\"return valider()\" method=\"POST\" action=\"resultat.php\" name=\"formulaire\" >";
echo "<div id=\"legend\"><fieldset>";
echo "<legend>H&eacute;bergement</legend>";
 
 
$lien=connect_bdd();
$requete="SELECT libelle_type from TYPE;";
$resultat=mysql_query($requete,$lien);
echo "<label for=\"champ\"></br>Type: </label><select id=\"selectType\" name=\"selectType\" size=\"1\"><OPTION value = \"--Choix--\">--Choix--</OPTION>";
while (($libelle_type = mysql_fetch_row ($resultat))!=NULL) {
echo "<OPTION>".$libelle_type[0]."</OPTION>";
}
echo "</select></br></br>";
 
 
 
 
echo "<label for=\"champ\">Prix: compris entre </label>";
echo "<select id=\"prix1\" name=\"prix1\" size=\"1\"><OPTION value=\"--Choix--\">--Choix--</OPTION>";
 
echo "<OPTION>".$prix[0]."</OPTION>";
echo "<OPTION>".$prix[1]."</OPTION>";
echo "<OPTION>".$prix[2]."</OPTION>";
echo "<OPTION>".$prix[3]."</OPTION>";
echo "<OPTION>".$prix[4]."</OPTION>";
echo "<OPTION>".$prix[5]."</OPTION>";
echo "<OPTION>".$prix[6]."</OPTION>";
echo "<OPTION>".$prix[7]."</OPTION>";
echo "<OPTION>".$prix[8]."</OPTION>";
echo "<OPTION>".$prix[9]."</OPTION>";
echo "<OPTION>".$prix[10]."</OPTION>";
echo "<OPTION>".$prix[11]."</OPTION>";
 
echo "</select>";
echo "<label for=\"champ\"> et </label>";
 
echo "<select id=\"prix2\" name=\"prix2\" size=\"1\"><OPTION value = \"--Choix--\">--Choix--</OPTION>";
 
echo "<OPTION>".$prix[0]."</OPTION>";
echo "<OPTION>".$prix[1]."</OPTION>";
echo "<OPTION>".$prix[2]."</OPTION>";
echo "<OPTION>".$prix[3]."</OPTION>";
echo "<OPTION>".$prix[4]."</OPTION>";
echo "<OPTION>".$prix[5]."</OPTION>";
echo "<OPTION>".$prix[6]."</OPTION>";
echo "<OPTION>".$prix[7]."</OPTION>";
echo "<OPTION>".$prix[8]."</OPTION>";
echo "<OPTION>".$prix[9]."</OPTION>";
echo "<OPTION>".$prix[10]."</OPTION>";
echo "<OPTION>".$prix[11]."</OPTION>";
 
 
echo "</select>";
echo "<label for=\"champ\"> &#8364</label></br></br>";
 
echo "<label for=\"champ\"> Capacit&eacute: mini </label>";
echo "<select id=\"capacite\" name=\"capacite\" size=\"1\"><OPTION value = \"--Choix--\">--Choix--</OPTION>";
 
echo "<option>".$capacite[0]."</option>";
echo "<option>".$capacite[1]."</option>";
echo "<option>".$capacite[2]."</option>";
echo "<option>".$capacite[3]."</option>";
echo "<option>".$capacite[4]."</option>";
echo "</select>";
 
echo "<label for=\"champ\"> personnes(s)</label></br></br>";
 
echo "<label for=\"champ\"> Localit&eacute: inf&eacute;rieur &agrave </label>";
echo "<select id=\"localisation\" name=\"localisation\" size=\"1\"><OPTION value = \"--Choix--\">--Choix--</OPTION>";
echo "<option>".$localisation[0]."</option>";
echo "<option>".$localisation[1]."</option>";
echo "<option>".$localisation[2]."</option>";
echo "</select>";
echo "<label for=\"champ\"> km de Bains</label></br></br>";
 
 
echo "</fieldset></div></br>";
 
echo "<input type=\"reset\" value=\"Reinitialiser\">";
echo "<input type=\"submit\" id=\"valeur\" name=\"valeur\" value=\"Valider\">";
echo "</form>";
echo "</div>";
sbomb;

@+