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 :

Générer une chaine sql via un tableau associatif [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Générer une chaine sql via un tableau associatif
    Bonjour tout le monde,

    Je voudrais créer une chaine sql en PHP par rapport à des clés/valeurs se trouvant dans un tableau associatif.

    J'ai donc ce tableau associatif :

    array(2) { ["NOM_ANNEE"]=> string(2) "ba" ["Nom_complet"]=> string(2) "er" }
    J'ai donc cette chaine SQL au départ :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM ".$_POST['table']." WHERE ".$_POST['champ']." LIKE '".$_POST['valeur']."%'";
    Je voudrais en fait remplacer la partie WHERE et utiliser les clés/valeurs de mon tableau associatif.

    Cela donnerait dans cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM ".$_POST['table']." WHERE ".$_POST['NOM_ANNEE']." LIKE '"ba"%' AND "Nom_complet" = 'er'";
    Le nombre de clé/valeurs varie selon la table que l'on choisit.

    Je devrais donc obtenir une chaine SQL générique.

    Merci d'avance pour votre aide.

    beegees

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Si tu veux faire des recherche sur plusieurs champs avec des valeurs différentes de manière dynamique, il faudrait retourner un tableau à 2 dimensions, ce qui me semblerais plus pratique.

    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $_POST['criteres']['champA'] (la valeur -> ba)
    $_POST['criteres']['champb'] (la valeur -> er)
    Ensuite, construire cette partie de requête grâce à une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $sql = "SELECT * FROM ".$_POST['table']." WHERE ";
    foreach ($_POST['criteres'] as $champ => $valeur) {
    	$sql .= $champ." LIKE '".$valeur."%' AND ";
    }
    Il faudra alors construire le formulaire afin d'obtenir un tel résultat.
    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <form ... etc ...>
    <input type="text" name="criteres[champA]" value="ba" />
    <input type="text" name="criteres[champB]" value="er" />
    </form>
    Avec un tableau à 1 dimension, c'est possible, mais ça relève plus de la ruse qu'autre chose, ça demandera de décortiquer un peu les choses, alors que là, comme tu peux voir, ça se décortique tout seul, si on peu dire.

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Salut,

    Merci pour ta réponse.

    J'ai bossé toute la journée et j'ai finalement trouvé une solution.

    Vu que je pouvais avoir 5 ou 6 critères, la solution du tableau multi dimensions aurait été difficile à mettre en œuvre.

    Voici ma solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $where = array();
    //parcours de mon tableau associatif nomme $ligne
    foreach($ligne as $field => $value) {
    	if($value != '') $where[] = "$field LIKE '$value%'";
    }
    //quand le tableau est cree, je l'implose, je le transforme en chaine de caracteres
    $where = implode (' AND ', $where);
    //je peux ensuite utiliser le resultat pour ma chaine sql finale
    $sql = "SELECT * FROM " .$_POST['table']." WHERE $where";
    $ligne vaut l'équivalent d'une chaine au format json.

    Encore merci pour ton aide.

    beegees

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Ok, pas de problème

    Du coup, si c'est pas abuser ... le format json en Php, je m'y suis jamais frotté jusqu'à lors (jamais eu besoin en faite), donc comme je vois que tu boucle sur un foreach(), ceci veut il dire qu'une boucle foreach fonctionne aussi bien sur un tableau Php qu'une chaine au format json ?
    Est ce réellement une chaine, c'est surtout ce point.

    Bon fin d'week end

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Ok, pas de problème

    Du coup, si c'est pas abuser ... le format json en Php, je m'y suis jamais frotté jusqu'à lors (jamais eu besoin en faite), donc comme je vois que tu boucle sur un foreach(), ceci veut il dire qu'une boucle foreach fonctionne aussi bien sur un tableau Php qu'une chaine au format json ?
    Est ce réellement une chaine, c'est surtout ce point.

    Bon fin d'week end
    Très bonne remarque/question.

    Je reçois de javascript un chaine de caractères au format json (la méthode send de xhr n'accepte que des chaines de caractères).

    J'utilise ensuite une fonction php nommée json_decode en mettant le second paramètre à TRUE, ce qui me permet d'obtenir non pas une chaine de caractère mais un tableau associatif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ligne = json_decode($_POST['to_send'],true);
    J'espère avoir répondu à ta question.

    Bonne fin de WE à toi aussi.

    beegees

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    J'espère avoir répondu à ta question.
    Totalement

    J'me disais bien qu'il y avait un truc par là.
    C'est donc aussi simple que ça un : json_decode().
    Comme ça, je dirait que ça ressemble beaucoup à de la sérialisation/dé-sérialisation.
    Trop d'la balle Php n'empêche, on en apprend tous les jours.

    Merci pour les précisons.

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

Discussions similaires

  1. Générer une chaine aléatoire
    Par java_fun dans le forum Général Java
    Réponses: 24
    Dernier message: 07/11/2018, 23h03
  2. Supprimer la valeur d'un champs access via une chaine SQL
    Par beegees dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/10/2006, 15h20
  3. Besoin de générer une chaine aléatoire
    Par warsky dans le forum Langage
    Réponses: 7
    Dernier message: 01/12/2005, 19h34
  4. Générer une requête SQL depuis un model physique
    Par Ryan Sheckler dans le forum Requêtes
    Réponses: 4
    Dernier message: 01/12/2005, 12h11
  5. résultat d'une requete SQL dans un tableau en JSP
    Par Paradoxys dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 06/04/2005, 16h17

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