IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Formulaire et requête MySQL


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Points : 13
    Points
    13
    Par défaut Formulaire et requête MySQL
    Bonjour
    voici mon problème :
    J'ai une base SQL avec une table et des champs.
    Grâce à un formulaire en HTML je définie des critères avec des labels de type $t_*
    Quand j'envoie le formulaire pour la requête il me faut
    2 conditions (= et "") pour chaque label.
    Donc 2x2=4 pour 2 labels
    4x2 =8 pour 3 labels (exemple ci-dessous)
    Je voudrais 10 labels, il va me falloir
    2 puissance 10 = 1024 conditions if/or
    Comment faire autrement ?
    Merci pour la réponse
    Pierre-Yves

    extrait du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $query = "SELECT * FROM campaniles WHERE internet=1 ORDER by ville";
    $results = mysql_query($query);
    $nb=0;
    echo "<table border=0>";
    while($row = mysql_fetch_array($results))
    {
    $id=$row['primary'];
    if (
    ($t_département==$row['département'] AND $t_lieu==$row['type de lieu'] AND $t_type==$row['type'])
     OR  ($t_département=="" AND $t_lieu==$row['type de lieu'] AND $t_type==$row['type'])
     OR  ($t_département==$row['département'] AND $t_lieu=="" AND $t_type==$row['type'])
     OR ($t_département=="" AND $t_lieu=="" AND $t_type==$row['type'])
     OR ($t_département==$row['département'] AND $t_lieu==$row['type de lieu'] AND $t_type=="")
     OR  ($t_département=="" AND $t_lieu==$row['type de lieu'] AND $t_type=="")
     OR  ($t_département==$row['département'] AND $t_lieu=="" AND $t_type=="")
     OR ($t_département=="" AND $t_lieu=="" AND $t_type=="")

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut Pierre-Yves.

    Je n'ai rien compris de ce que tu essayes de faire.
    Tu te focalises trop sur ton problème !

    Je pense qu'il vaut mieux t'exprimer en bon français, sur les contraintes que tu as.
    Comment as-tu représenté tes données (département, lieu et type) dans ta table ?
    Comment veux-tu afficher tes données dans ton formulaire ?
    Et qu'est-ce que tu essayes de faire ?

    Fais moi un dessin avec ce que tu as en entré et ce que tu veux obtenir en sortie.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Points : 13
    Points
    13
    Par défaut formulaire et requête MySQL
    Bon, j'explique.
    J'ai un site internet qui répertorie les campaniles en Fer Forgé dans le Sud de la France.
    J'ai avec phpmyadmin crée une table campanile où se trouve les champs : département, lieu, type, date etc ...
    Avec un formulaire en html je demande aux visiteurs de choisir des critères (avec des <div> label) pour sélectionner dans ma base les campaniles.
    Pour l'affichage je fais une boucle while($row = mysql_fetch_array($results)) et de instructions if et or pour sélectionner les données qui correspondent aux critères.
    D'où mon problème qu'à chaque critère que je rajoute je dois multiplier les instructions or par 2 !
    Est-je était clair ?
    Voir sur mon site la page caractéristiques du campanile
    http://abegui.free.fr/campanile/
    Pierre-Yves

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut Pierre-Yves.

    Pourquoi autant d'agressivité ?

    Je vous conseille de lire le règlement de développez : http://club.developpez.com/regles/

    Mettez-vous à la place de la personne qui va lire votre message. Il n'est pas censé connaitre votre problématique.
    Soyez clair dans vos explications, ce qui n'est pas le cas !
    Mettez votre code entre les balise [ code ] & [ /code ]
    --> http://club.developpez.com/aidenouveaux/

    Le résultat de votre formulaire vous donne trois variables php :
    --> $dept
    --> $lieu
    --> $type

    Voici la ligne à modifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT * FROM campaniles WHERE internet=1 ORDER by ville";
    qui devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT * FROM campaniles WHERE internet=1 and departement = '".$dept."' and lieu = "'.$lieu."' and type = '".$type."' ORDER by ville";
    Pour la syntaxe exacte du passage d'une variable dans une requête MySql, je vous conseille de lire la documentation php.
    --> http://php.net/manual/fr/mysqli.prepare.php

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Points : 13
    Points
    13
    Par défaut formulaire et requête MySQL
    Merci pour l'aide.
    J'ai essayé ça ne marche pas.
    Je crois que j'ai présumé de mes capacités. Je pense que j'avais une bonne idée,
    mais je vais en rester là.
    Je m'excuse de paraître agressif, je ne suis que passionné
    par ma passion des Campaniles.
    Merci encore pour votre aide
    Pierre-Yves alias Abegui

  6. #6
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Points : 13
    Points
    13
    Par défaut
    Après une bonne nuit de sommeil,
    je reprends espoir.
    J'ai un peu modifié mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $query = "SELECT * FROM campaniles WHERE internet=1 ORDER by ville";
    $results = mysql_query($query);
    $nb=0;
    echo "<table border=0>";
    while($row = mysql_fetch_array($results))
    {
    $id=$row['primary'];
    if (
            ($t_département==$row['département'] AND $t_lieu==$row['typelieu'] AND $t_type==$row['type'])
     OR ($t_département=="" AND $t_lieu==$row['typelieu'] AND $t_type==$row['type'])
     OR ($t_département==$row['département'] AND $t_lieu=="" AND $t_type==$row['type'])
     OR ($t_département=="" AND $t_lieu=="" AND $t_type==$row['type'])
     OR ($t_département==$row['département'] AND $t_lieu==$row['typelieu'] AND $t_type=="")
     OR ($t_département=="" AND $t_lieu==$row['typelieu'] AND $t_type=="")
     OR ($t_département==$row['département'] AND $t_lieu=="" AND $t_type=="")
     OR ($t_département=="" AND $t_lieu=="" AND $t_type=="")
     )
    Ce code fonctionne, celui que vous m'avez proposé fonctionne que si toutes les variables du formulaire sont renseignées, ce qui n'est pas mon cas :
    Dans mon formulaire, il faut renseigner les différentes cases, aucune n'est obligatoire. Par contre, plus de cases sont renseignées, plus la recherche en sera facilitée.
    C'est cette possibilité (indispensable dans mon cas) qui induit ce casse-tête.

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut abegui.

    Et que faites-vous si vous avez 32 variables à tester ? Cela devient une usine à gaz ! C'est ingérable.
    Et je ne parle même pas des performances.

    Voici ce que je propose.

    1) les trois variables php sont les suivantes :
    --> $dept
    --> $lieu
    --> $type

    2) ces variables sont des chaînes de caractères.
    De ce fait, dans votre table, ces trois colonnes sont définies en "varchar(255)".

    3) chaque variable à que deux valeurs possibles lors de la sélection :
    --> soit la chaîne de caractères issue de la sélection
    --> soit c'est vide (aucune sélection) et dans ce cas vous mettez '%'.

    4) après avoir sélectionné votre département, vous devez tester si la variable $dept est renseignée ou pas (vide).
    A faire en php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    if (empty($dept)) {$dept = '%';}
    ?>
    --> http://php.net/manual/fr/function.empty.php

    5) Solution possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $query = "SELECT * FROM campaniles WHERE internet=1
    and (departement like '".$dept."')
    and (lieu        like '".$lieu."')
    and (type        like '".$type."')
    ORDER by ville";
    La clause "like" permet de sélectionner une sous-chaîne dans une chaîne de caractères.
    Le caractère '%' signifie n'importe quel caractère.

    --> http://dev.mysql.com/doc/refman/5.7/...-matching.html

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #8
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Points : 13
    Points
    13
    Par défaut
    Merci pour la rapidité de votre réponse.
    Je pense que c'est une usine à gaz, c'est pourquoi j'ai posé mon problème sur le forum.
    Parce que je vais avoir au moins 10 variables.
    Je pars en vacances pendant une vingtaine de jours.
    Je testerais votre suggestion à mon retour.
    Merci encore de votre aide
    Pierre-Yves alias Abegui

Discussions similaires

  1. [MySQL] requête mysql sur un formulaire
    Par brunochp dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 19/03/2009, 22h57
  2. Requête MYSQL LIKE particulière
    Par TheDarkLewis dans le forum Requêtes
    Réponses: 9
    Dernier message: 05/12/2004, 15h50
  3. Arrêt de l'exécution d'une requête MySQL dans DELPHI.
    Par joelmarc dans le forum Bases de données
    Réponses: 9
    Dernier message: 11/10/2004, 16h11
  4. surcharge de requête MySQL
    Par simoryl dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/06/2004, 10h43
  5. requête mysql sous php
    Par remi59 dans le forum Débuter
    Réponses: 9
    Dernier message: 03/07/2003, 10h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo