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

Langage PHP Discussion :

Forumlaire PHP probleme d'input [PHP 4]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2008
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 319
    Par défaut Forumlaire PHP probleme d'input
    Bonjour,

    Voila mon souci j'ai un formulaire qui comporte 5 input type text ce formulaire permet de requêter sur ma base oracle donc juste un select.

    J'ai donc 5 champs que l on peut remplir

    nom / prenom / code postal /date de naissance /dep de naissance

    si je remplis le nom avec ce select

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM matable where nom='$nom'

    il m affiche bien les lignes souhaités.

    Le problème est que si je renseigne le nom et le code postal par exemple mon select n'est plus adapté il faudrait faire un select du genre
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM matable where nom='$nom' AND cp='$cp'

    Mon souci est que j'ai 5 champs donc je vous laisse entrevoir le nombre de possibilités ...

    Y a t il un moyen de faire simplement et d'éviter de faire une quarantaine de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (($_POST["nom"])&&($_POST["prenom"])&&($_POST["cp"])){
    blablala
    }
    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Ta requête SQL n'est qu'une simple chaîne de caractère que tu peux aisément construire dynamiquement en fait.

    Un petit exemple de ce qu'il est possible de faire :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = 'SELECT id, nom FROM table';
    $where = array();
    if( isSet($_POST['value']) && $_POST['value'] == 1)
      $where[] = "unChamp = 'test'";
    if( isSet($_POST['value2']) )
      $where[] = "unAutreChamp LIKE '%".$_POST['value2']."%";
    if( !empty($where) )
    $sql .= implode(' AND ',$where);

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2008
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 319
    Par défaut
    Merci pour la réponse transgohan

    mais j'ai du mal à saisir pour cette partie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( isSet($_POST['value']) && $_POST['value'] == 1)
    aucun souci

    je mets du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( isSet($_POST['nom']) && $_POST['prenom'] == 1)
    par contre pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $where[] = "unChamp = 'test'";
    je ne vois pas


    a quoi correspond "un champ" et a quoi correspond "test" ?

    Merci

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2011
    Messages : 3
    Par défaut
    dans ton exemple :

    unchamp serait code_postal
    test serait la valeur de ton input (75001 par exemple)
    et ainsi de suite

  5. #5
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Un petit peu d'algo pour mieux comprendre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SI Value a été postée ET Value == 1 Alors
      Ajouter dans le tableau Where la valeur : "unChamp = 'test'"
    FINSI
    La valeur postée sera donc égale à 1, dans ton cas c'est une chaîne de caractère que tu recherches avec nom, donc tu devras juste faire le test d'existence. Ou bien si tu as des règles à faire respecter tu peux les ajouter dans la condition (longueur maximale, caractère spéciaux interdits, ect).

    Mon exemple était statique, c'est à dire que la condition WHERE que je concaténais était toujours la même. A savoir rechercher les n-uplets donc le champ nommé "unChamp" aurait la valeur égale à "test".

    Dans ton cas c'est bien plus le second exemple qui te sera utile vu que c'est la valeur postée que tu souhaites rechercher.

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Par défaut
    On pourrait construire la partie Where en travaillant directement sur $_POST, c'est un tableau associative comme un autre, en supprimant les entrées vides, ensuite on construit un tableau avec d'une part le nom de la colonne et de l'autre sa valeur. il suffit ensuite de joindre ce tableau avec des 'AND' entre ces elements.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $tab=array_filter($_POST);
    $cols = array();
    foreach($tab as $key=>$val) {
            $cols[] = "$key = '$val'";
        }
    $conditions=implode(' AND ',$cols);	
    if ($conditions) $conditions="WHERE $conditions";
    $sql="SELECT * FROM matable $conditions";

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Drupal] input format php
    Par mme_chelaou dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 26/03/2010, 16h42
  2. [MySQL] php probleme de requête sql
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 03/04/2006, 23h52
  3. [FLASH MX] [PHP] Probleme d'integration
    Par chocobos dans le forum Flash
    Réponses: 8
    Dernier message: 17/08/2005, 17h18
  4. [XSL][PHP] probleme de passage de parametres...
    Par jesus144 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 20/06/2005, 23h25
  5. [type MIME] css généré par php -> probleme
    Par prgasp77 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 23/09/2004, 21h13

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