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 :

requete dynamique à partir d'un menu déroulant


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Par défaut requete dynamique à partir d'un menu déroulant
    Bonjour à toutes et à tous,
    Après de tres tres longues heures d'apprentissage, j'arrive à remplir ma base de données à l'aide de champs de formulaire et à consulter ma table
    .
    J'arrive aussi à remplir mes champs déroulants à partir des valeurs indiquées dans la base


    Par contre, je ne comprends pas comment à l'aide de ce champs déroulant, je peux effectuer une requete "dynamique".

    La finalité de ma requete c'est ca par exemple:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM soumission
    WHERE dsite = 1
    LIMIT 0, 30
    Qui fonctionne tres bien sous phpmyadmin.

    Ce que je ne comprends pas, c'est comment faire pour indiquer dynamiquement à mon fichier traitement.php par le biais d'un champs déroulant que idsite =celui choisis par le champs déroulant

    Dois je mettre une variable dans le select du fichier traitement ?

    PS : si je remplace traitement.php par mail.php par exemple, je recupere bien le contenu du champs sélectionné et me l'envoi par mail, par exemple nomsite : site1.com

    Par contre, comment récuperer cette valeur pour faire un tri des infos contenues dans la table "soumission" concernant site1.com ?

    Pouvez vous m'éclairez svp ?

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonjour,

    la construction de ta requête dynamique se fera du coté php et non base de données, il te suffit de récupérer la valeur du choix de ta liste déroulante de ton formulaire dans ta page traitement.php quand ton formulaire sera envoyé, avec les tableaux :

    $_GET[''] ou $_POST[''] selon comment tu a définit ton formulaire,

    puis de concaténer ta requête avec cette valeur.

    exemple :

    champs id dans ton formulaire avec la method POST :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT * FROM maTable where id=' . $_POST['idFormulaire'] . ' LIMIT 0, 30';
    il te suffit après de faire un mysql_query($sql), ou de l'éxécuter avec PDO selon ton choix.

    ! Attention si ton appli est utilisée par d'autres personnes que toi tu doit impérativement tester ce que les variables de ton formulaire vont contenir pour éviter que les utilisateurs fassent n'importe quoi avec ta base de données.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Par défaut
    Merci beaucoup pour ta réponse, vraiment sympa ton coup de main.

    En faite ce que je ne comprends pas, c'est que pour afficher mes données, j'utilise aussi cette requete pour faire les jointures avec les autres tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $requete="SELECT * FROM site AS w, soumission AS s, annuaire AS a, statut AS e
    WHERE w.idsite = s.idsite
    AND a.idannuaire = s.idannuaire
    AND e.idstatut = s.idstatut";
    Comment effectuer 2 requetes d'un coup ?
    J'ai essayer de mettre les 2 requetes à la suite et d'ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     $_POST['nomsite'];
    $sql = "SELECT * FROM soumission where id=' . $_POST['idsite'] . ' ";
    $requete="SELECT * FROM site AS w, soumission AS s, annuaire AS a, statut AS e
    WHERE w.idsite = s.idsite
    AND a.idannuaire = s.idannuaire
    AND e.idstatut = s.idstatut"; 
    $resultat = mysql_query($requete, $sql,$bd)
    or die ("impossible d executer la requete");
    ?>
    Mais j'ai une erreur 500 Erreur HTTP 500 (Internal Server Error) : Une situation inattendue s'est produite tandis que le serveur tentait de traiter la demande.

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Tu ne peux pas envoyer deux requêtes en même temps,

    il faut que tu fasse deux appels.

    Fait attention avec la requête que tu a passé la concaténation ne se fera pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM soumission where id=' . $_POST['idsite'] . ' ";
    comme écrit ci-dessu avec $_POST['idsite'] = 1 $sql vaudra :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM soummission where id='.1.'
    alors que le but recherché serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM soummission where id=1
    pour ça soit tu utilise les "..." soit les '...',

    si tu utilise les "...",
    si $_POST['idsite'] est un nombre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM soumission where id=$_POST['idsite']";
    si $_POST['idsite'] est une chaine de caratère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM soumission where id='$_POST['idsite']'";
    les "..." inspecte la chaîne de caractère que tu lui fourni puis va remplacer toutes les variables connu ( $_POST['idsite'] en l'occurence ) par ce qu'il a dans sa "réserve".

    Si par contre tu utilise les '...',
    si $_POST['idsite'] est un nombre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT * FROM soumission where id=' . $_POST['idsite'] . ' ';
    si $_POST['idsite'] est une chaine de caratère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT * FROM soumission where id="' . $_POST['idsite'] '"';
    ! attention pour les chaînes de caractères à bien fermer les "..." qui entoure la chaîne de caractère.

    les '...' eux ne se soucis pas de ce que contient t'a chaîne de caractère global, si tu écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT * FROM soumission where id=$_POST[\'idsite\']'
    alors la requête qui sera envoyée sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM soumission where id=$_POST['idsite']
    sans que le $_POST['idsite'] ne soit remplacé par sa valeur.
    ! attention si tu écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT * FROM soumission where id=$_POST['idsite']'
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM soumission where nom="nomUtilisateur""
    sans échapper les caractères '' ou "" alors php va interpréter une fin de chaîne qui n'en ait pas une et tu aura des caractères qui se balade dans ton code et t'afficher pleins d'erreur.

    Pour échapper les caractères '' et "" il te suffit de mettre un \ devant, php ne l'interprétera pas et continuera jusqu'à trouver le caractère de fin de chaîne.

    tu peux aussi concaténer avec les "..." comme si tu utilisait les '...' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM soumission where id=" . $_POST['idsite'] . " ";
    pareil pour les chaîne de caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM soumission where id='" . $_POST['idsite'] "'";
    pour tes deux requête il te faudra passer par deux variables qui recevront le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql = 'SELECT * FROM soumission where id=' . $_POST['idsite'] . '';
    $requete='SELECT * FROM site AS w, soumission AS s, annuaire AS a, statut AS e
    WHERE w.idsite = s.idsite
    AND a.idannuaire = s.idannuaire
    AND e.idstatut = s.idstatut'; 
    $resultat1 = mysql_query($sql,$bd)
    or die ("impossible d executer la requete 1");
    $resultat2 = mysql_query($requete, $bd)
    or die ("impossible d executer la requete 2");
    et ensuite traiter chaque résultat.
    T'image si le résultat des deux requêtes était stocké dans une seul variable

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Par défaut
    Un grand grand merci pour toutes ses explications.
    En effet je ne faisais pas la différence entre " et '.
    Tout est plus clair.

    La ou je me trompe peut etre, c'est que je ne sais pas si mon champs déroulant doit envoyé l'id ou la valeur (idsite ou nomsite)

    J'ai acheté un gros bouquin sur le PHP.
    Juste pour que ce soit plus clair par rapport au bouquin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat1 = mysql_query($sql,$bd)
    Est une fonction ? une instruction ?

    Merci encore !
    Mickael

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonjour,

    Citation Envoyé par mikl86 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat1 = mysql_query($sql,$bd)
    Est une fonction ? une instruction ?
    Ceci est un instruction php, cette instruction va "déposer" le résultat de la fonction qui prend deux paramètres, ces deux paramètre sont :
    • La requête SQL
    • La variable qui contient la connexion à la BDD

    dans la variable $resultat1.


    Pour t'aider à apprendre le php lis les cours dispo sur developpez.com

Discussions similaires

  1. Valeur NULL affectée à une BD à partir d'un menu déroulant
    Par martinn dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 09/05/2009, 21h11
  2. Selection a partir d'un menu déroulant vers un champs
    Par pony99 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/12/2008, 17h36
  3. Réponses: 4
    Dernier message: 24/10/2008, 12h00
  4. Réponses: 1
    Dernier message: 01/11/2005, 03h24
  5. [mise à jour d'une iframe à partir d'un menu déroulant]
    Par Lady_jade dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/10/2005, 11h50

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