Géré plusieur condition

DuR0_
Invité n'ayant pas de compte PHPfrance

10 févr. 2005, 17:43

Bonjour,
Voici mon formulaire :

Code : Tout sélectionner

<form name="form2"> <p><font face="Verdana" size="2">Pays&nbsp;:<br><select class=select name="pays"> <option selected> <option value="France">France</option> <option value="Belgique">Belgique</option> <option value="Canada">Canada</option> </select><br>Sexe :<br><select name="sexe" size="1"> <option selected></option> <option value="homme">homme</option> <option value="femme">femme</option> </select>&nbsp;<br>Cheveux :<br><SELECT name=cheveux_c> <option></option> <option>blonds</option> <option>bruns</option> <option>châtains</option> <option>noirs</option> <option>roux</option> </SELECT> et <SELECT name=cheveux_t> <option></option> <option>courts</option> <option>mi-longs</option> <option>longs</option> </SELECT><br>Yeux :<br><SELECT name=yeux size=1> <option></option> <option value="marrons">marrons</option> <option value="bleus">bleus</option> <option value="verts">verts</option> </SELECT><br>Pour :<br><select class=select name="pour"> <option selected><OPTION value="pour correspondre">pour correspondre<OPTION value="pour amitié">pour amitié<OPTION value="pour amour">pour amour<OPTION value="pour mariage">pour mariage<OPTION value="pour autre...">pour autre...</select><br>Sexualité :<br><SELECT name=sexualite size=1> <option></option> <option value="hetero">Hetero</option> <option value="bi">Bi</option> <option value="gay">Gay</option> </SELECT><br>Age : <br>De <select class=sinput name=agefrom> <option> <OPTION value="14">14<OPTION value="16">16<OPTION value="18">18<OPTION value="20">20<OPTION value="22">22<OPTION value="24">24<OPTION value="26">26<OPTION value="28">28<OPTION value="30">30<OPTION value="32">32<OPTION value="34">34<OPTION value="36">36<OPTION value="38">38<OPTION value="40">40<OPTION value="42">42<OPTION value="44">44<OPTION value="46">46<OPTION value="48">48<OPTION value="50">50<OPTION value="52">52<OPTION value="54">54<OPTION value="56">56<OPTION value="58">58<OPTION value="60">60</select> à <select class=sinput name=ageto> <option> <OPTION value="14">14<OPTION value="16">16<OPTION value="18">18<OPTION value="20">20<OPTION value="22">22<OPTION value="24">24<OPTION value="26">26<OPTION value="28">28<OPTION value="30">30<OPTION value="32">32<OPTION value="34">34<OPTION value="36">36<OPTION value="38">38<OPTION value="40">40<OPTION value="42">42<OPTION value="44">44<OPTION value="46">46<OPTION value="48">48<OPTION value="50">50<OPTION value="52">52<OPTION value="54">54<OPTION value="56">56<OPTION value="58">58<OPTION value="60">60</select> </form>
Je n'ai pas mis tout ! J'aimerai pouvoir exercé une recherche dans une base avec les critères qu'on aurait choisi dans ce formulaire mais que si on laisse vite une des selection, celle-ci ne soit pas prise en compte !

Merci d'avance !

Eléphanteau du PHP | 23 Messages

10 févr. 2005, 18:40

Y a quelques points qui ne vont pas dans ce HTML :
- Pays&nbsp;: => Pays :
- <select class=select => class="select"
- <option selected> => Pas compris là :x
- size="1" => Pourquoi ?
- <option selected></option> => Là je comprends
- name=cheveux_c => Mets des guillemets
- <option></option> => Pas de selected ? (x3)
- <option selected> => Pas de fermeture o_O
- <OPTION value="pour correspondre">pour correspondre<OPTION value="pour amitié">pour amitié<OPTION value="pour amour">pour amour<OPTION value="pour mariage">pour mariage<OPTION value="pour autre...">pour autre...
=> Calme-toi, faut la fermer là... (l'<option>)
- <SELECT name=sexualite size=1> => Guillemets
- <option></option> => Pas de selected
Je n'ai pas mis tout !
Moi non plus ^^

Sinon, si tu veux une réponse à ta question, précise un peu (donne un bout de code PHP, ou indique quelle genre de base tu utilises).
Image

DuR0
Invité n'ayant pas de compte PHPfrance

10 févr. 2005, 21:45

Par exemple si la variable pays est non null alors il y aura WHERE pays = $variable

Si il y a deux variable qui sont selectionner :

WHERE 1varible=$1variable AND 2variable=2variable...

Mammouth du PHP | 1885 Messages

11 févr. 2005, 02:08

Ensuite, ya quelques points qui ne vont pas dans ce HTML :
- Pays&nbsp;: => Pays :
Je crois qu'il faudrait conserver le &nbsp; puisque cela évite d'obtenir, dans certaines circonstances, le mot "Pays" sur une ligne et le ":" sur l'autre.

;)
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

DuR0
Invité n'ayant pas de compte PHPfrance

11 févr. 2005, 12:06

Mais sinon pour ma question première...

Eléphanteau du PHP | 23 Messages

11 févr. 2005, 16:04

$requete="SELECT ....";
if(isset($_POST['pays']))
{
$requete.="WHERE pays='".$_POST['pays']."'"; // Là ya " ' " (guillemet-apostrophe-guillemet)
}
Image

Mammouth du PHP | 1885 Messages

11 févr. 2005, 16:18

Non, car la personne désire créer une requête à partir de tous les champs. Donc il faut prévoir plusieurs conditions et par le fait même, éliminer l'inclusion du WHERE à chacun des champs.

Voici un exemple:
<?php
$sql = 'SELECT * FROM your_table';

$where = array();
$fields = array('pays', 'sexe', 'cheveux_c', 'cheveux_t', 'pour', 'sexualite');

foreach ($fields as $field) {

    if (isset($_POST[$field]) && !empty($_POST[$field])) {
        $where[] = "`" . $field . "`='" . mysql_escape_string($_POST[$field]) . "'";
    }
}

if (isset($_POST['agefrom']) && !empty($_POST['agefrom'])) {
    $where = "`agefrom` >= " . mysql_escape_string($_POST['agefrom']);
}

if (isset($_POST['ageto']) && !empty($_POST['ageto'])) {
    $where = "`ageto` <= " . mysql_escape_string($_POST['ageto']);
}

if (count($where) > 0){
    $sql .= " WHERE " . implode(' AND ', $where);
}

$res = mysql_query($sql);
// etc
?>
;)
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Petit nouveau ! | 5 Messages

11 févr. 2005, 21:17

Il y a une erreur :
Voici mon code :
<?php
$sql = 'SELECT * FROM rencontre';

$where = array();
$fields = array('pays', 'sexe', 'cheveux_c', 'cheveux_t', 'pour', 'sexualite');

foreach ($fields as $field) {

    if (isset($_POST[$field]) && !empty($_POST[$field])) {
        $where[] = "`" . $field . "`='" . mysql_escape_string($_POST[$field]) . "'";
    }
}

if (isset($_POST['agefrom']) && !empty($_POST['agefrom'])) {
    $where = "`agefrom` >= " . mysql_escape_string($_POST['agefrom']);
}

if (isset($_POST['ageto']) && !empty($_POST['ageto'])) {
    $where = "`ageto` <= " . mysql_escape_string($_POST['ageto']);
}

if (isset($_POST['taillefrom']) && !empty($_POST['taillefrom'])) {
    $where = "`taillefrom` >= " . mysql_escape_string($_POST['taillefrom']);
}

if (isset($_POST['tailleto']) && !empty($_POST['tailleto'])) {
    $where = "`tailleeto` <= " . mysql_escape_string($_POST['tailleto']);
}

if (isset($_POST['poidfrom']) && !empty($_POST['poidfrom'])) {
    $where = "`poidfrom` >= " . mysql_escape_string($_POST['poidfrom']);
}

if (isset($_POST['poidto']) && !empty($_POST['poidto'])) {
    $where = "`poidto` <= " . mysql_escape_string($_POST['poidto']);
}

if (count($where) > 0){
    $sql .= " WHERE " . implode(' AND ', $where);
}
$limit_par_page = 10;

if(isset($_GET['page']))
{
$page = $_GET['page'];
$page = $page - 1;
}
else
{
$page = 0;
}
$from = $page * $limit_par_page;
$res = mysql_query($sql);
while($resultr = mysql_fetch_array($res))
{
?>
Et voici l'erreur :
Warning: implode(): Bad arguments. in /home/a/adozbe/www/france/list_renc.php on line 60

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/a/adozbe/www/france/list_renc.php on line 75

ViPHP
ViPHP | 60 Messages

11 févr. 2005, 21:30

Hello,

Je trouve cela dommage de faire un mix une fois avec foreach(), l'autre fois sans même si à chaque fois ce sont des variables de types différents que l'on manipule... Mais bon pas grave ;)
En tout cas, n'oublie pas que tu manipules un tableau avec ton $where
=>

Code : Tout sélectionner

if (isset($_POST['agefrom']) && !empty($_POST['agefrom'])) { $where = "`agefrom` >= " . mysql_escape_string($_POST['agefrom']); }
devrait être

Code : Tout sélectionner

if (isset($_POST['agefrom']) && !empty($_POST['agefrom'])) { $where[] = 'agefrom >= ' . mysql_escape_string($_POST['agefrom']); }
Donc pense au []...

/Flood

Petit nouveau ! | 5 Messages

11 févr. 2005, 21:45

Il me reste encore l'erreur suivante :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/a/adozbe/www/france/list_renc.php on line 75

ViPHP
ViPHP | 60 Messages

11 févr. 2005, 23:10

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/a/adozbe/www/france/list_renc.php on line 75
La requête SQL générée est fausse. Affiche-là et teste là à part pour identifier l'erreur...

Essaie sans les ` autour des noms de champs pour voir ?

/Flood

Mammouth du PHP | 1885 Messages

11 févr. 2005, 23:11

Bien vu Flood!

DuR0 > Essaie de récupérer l'erreur retournée par mysql_query en faisant ceci lors de ta requête:
<?php
$res = mysql_query($sql) or die(mysql_error());
?>
;)
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Petit nouveau ! | 5 Messages

12 févr. 2005, 12:17

Donc voila le nouveau code :
<?php
$sql = 'SELECT * FROM rencontre';

$where = array();
$fields = array('pays', 'sexe', 'cheveux_c', 'cheveux_t', 'pour', 'sexualite');

foreach ($fields as $field) {

    if (isset($_POST[$field]) && !empty($_POST[$field])) {
        $where[] = "`" . $field . "`='" . mysql_escape_string($_POST[$field]) . "'";
    }
}

if (isset($_POST['agefrom']) && !empty($_POST['agefrom'])) {
    $where[] = "`age` >= " . mysql_escape_string($_POST['agefrom']);
}

if (isset($_POST['ageto']) && !empty($_POST['ageto'])) {
    $where[] = "`age` <= " . mysql_escape_string($_POST['ageto']);
}

if (isset($_POST['taillefrom']) && !empty($_POST['taillefrom'])) {
    $where[] = "`taille` >= " . mysql_escape_string($_POST['taillefrom']);
}

if (isset($_POST['tailleto']) && !empty($_POST['tailleto'])) {
    $where[] = "`taille` <= " . mysql_escape_string($_POST['tailleto']);
}

if (isset($_POST['poidfrom']) && !empty($_POST['poidfrom'])) {
    $where[] = "`poid` >= " . mysql_escape_string($_POST['poidfrom']);
}

if (isset($_POST['poidto']) && !empty($_POST['poidto'])) {
    $where[] = "`poid` <= " . mysql_escape_string($_POST['poidto']);
}

if (count($where) > 0){
    $sql .= " WHERE " . implode(' AND ', $where);
}
$limit_par_page = 10;

if(isset($_GET['page']))
{
$page = $_GET['page'];
$page = $page - 1;
}
else
{
$page = 0;
}
$from = $page * $limit_par_page;
$res = mysql_query($sql) or die(mysql_error()); 
while($resultr = mysql_fetch_array($sql))
{
?>
Et l'erreur est toujours la même :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/a/adozbe/www/france/list_renc.php on line 75
Donc déjà il faut remplacer
while($resultr = mysql_fetch_array($sql))

-> while($resultr = mysql_fetch_array($res))

Mais alors j'ai l'impression que la recherche marche mal... Déjà il affiche 13 pages alors qu'il y a une seule donné dans la base et ensuite il affiche rien alors que les critère sont les même dans la base...

Car l'age est en time()