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 :

Analyse d'une chaine de caratére


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Par défaut Analyse d'une chaine de caratére
    Salut a tous,
    voila ce qui m’amène.
    je travaille avec une bdd contenant un champ "typelot".
    ce dernier est rempli de la façon suivante : T2-T4-T5.

    Ensuite, je récupère des checkbox d'un formulaire via ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for ($i=0;$i<count($_POST['letype']);$i++)
    {
    $biencheck = $_POST['letype'][$i];
    echo $biencheck;
    }
    ce qui me donne par exemple : T2T5 (en fonction de ce qui a été coché)

    je dois ensuite faire une recherche dans ma bdd sur le champs "typelot" pour sortir les lignes correspondante a la demande.

    Donc question, quel est le meilleurs moyen pour faire cela ?
    tout en sachant que la recherche doit se faire sur les logement T2 ou T5 dans l'exemple et non pas sur la chaine T2T5.

    Merci d'avance de votre aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ton code date de PHP 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($_POST['letype'] as $value) {
    echo $value;
    }

    Pour ta requête tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $types = array_map ('intval', $_POST['letype']);
    $sql = 'SELECT FROM tatable WHERE tacolonne IN ('  . implode(',' , $types) . ')'
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Par défaut
    re,
    j'ai fais cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    foreach ($_POST['letype'] as $value) {
    echo $value;
    }
     
    $types = array_map ('intval', $_POST['letype']);
    echo $types;
    $sql = 'SELECT * FROM programme WHERE type IN ('  . implode(',' , $types) . ')';
    while($data = mysql_fetch_array($sql)) 
    		{
    		echo $data[nom];
    		}
    mais j'ai une erreur :
    Array Warning: mysql_fetch_array() expects parameter 1 to be resource, string given in /.../resu.php

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    il est toujours bon de savoir lire/traduire/comprendre les messages d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req = 'SELECT * FROM programme WHERE type IN ('  . implode(',' , $types) . ')';
    $sql = mysql_query($req);
    Cela dit, pourquoi faire intval() si les valeurs sont "T1", T2",... ?

    N.B. Quel rapport avec le titre : "Analyse d'une chaine de caractère" ?

  5. #5
    Membre éclairé Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Par défaut
    re,
    c'est encore moi
    le rapport avec le titre, c'est qu'a la base je pensais qu'il fallait analyser la chaine afin de pouvoir faire une requête.

    Après, j'ai du mal a répondre a ta question car je ne comprends pas bien le code de Sabotage

  6. #6
    Membre éclairé Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Par défaut
    re, je m'étais trompé dans un champs,
    re voici le code mais qui ne fonctionne toujours pas.

    pas de message d'erreur, mais la requete n'est visiblement pas bonne car il m'affiche systématique toute la bdd, alors que cela doit afficher uniquement les lignes ou les "types de logement" correspondent aux cases cochée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $types = array_map ('intval', $_POST['letype']);
     
    $req = 'SELECT * FROM programme WHERE typelot IN ('  . implode(',' , $types) . ')';
    $sql = mysql_query($req);
    while($data = mysql_fetch_array($sql)) 
    		{
    		echo $data[nom];
    		}
    Quelqu’un pour m'aider ???

  7. #7
    Invité
    Invité(e)
    Par défaut
    Peux-tu nous montrer le résultat de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($_POST['letype']);
    ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $types = array_map ('intval', $_POST['letype']);
    Ici, comme je le disais, les valeurs sont converties en numérique (intval).

    Or, les valeurs sont "T1", "T2",...

    Remplace donc cette ligne par (en ajoutant une PROTECTION SQL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $types = array_map ('mysql_real_escape_string', $_POST['letype']);
    Ou en la supprimant purement et simplement.

  8. #8
    Membre éclairé Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Par défaut
    re,
    alors le resultat de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($_POST['letype']);
    en ayant selection en case a coché T2 T3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(2) { [0]=> string(2) "T2" [1]=> string(2) "T3" }
    le code modifié comme tu as dis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $types = array_map ('mysql_real_escape_string', $_POST['letype']);
     
    $req = 'SELECT * FROM programme WHERE typelot IN ('  . implode(',' , $types) . ')';
    $sql = mysql_query($req);
    while($data = mysql_fetch_array($sql)) 
    		{
    		echo "".$data[nom]."<br />";
    		}
    Le problème du résultat c'est que visiblement il n'affiche que les lignes ayant T3 seul en valeur du champ "typelot"

    une ligne ayant T2-T3 dans le champ "typelot" devrait apparaitre egalement

  9. #9
    Invité
    Invité(e)
    Par défaut
    Tu fais un SELECT. Ca va chercher ce qui est DEJA enregistré (les anciennes valeurs, donc).

    As-tu fais un INSERT/UPDATE pour enregistrer les nouvelles valeurs?

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    avec des chaines de caractères il faut en plus gérer les guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $types = array_map ('mysql_real_escape_string', $_POST['letype']);
    $req = "SELECT * FROM programme WHERE typelot IN ('"  . implode("','" , $types) . "')";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre éclairé Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Tu fais un SELECT. Ca va chercher ce qui est DEJA enregistré (les anciennes valeurs, donc).

    As-tu fais un INSERT/UPDATE pour enregistrer les nouvelles valeurs?
    Je ne veut pas insérer de nouvelle donnée je veux que cela me sorte les bonne lignes en fonction des case cochées.
    c'est une recherche sur le champ "typelot"


    regarde bien le 1er post je pense avoir bien expliqué ce que je voulais...

  12. #12
    Invité
    Invité(e)
    Par défaut
    Exact.
    Quand on suis plusieurs discussions en même temps, il arrive qu'on perde le fil, ou qu'on s'emmele les pinceaux...

    Du coup, la correction donnée par sabotage devrait régler le problème, non ?

    Que donne : var_dump($types); ?
    et echo $req; ?

  13. #13
    Membre éclairé Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Par défaut
    Pas de blem
    je me doute que la fonction de Modo ne doit pas être de tous repos

Discussions similaires

  1. Compter une chaine de caratère dans une cellule.
    Par natcre dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/10/2007, 15h56
  2. Analyse d'une chaine de caracteres
    Par Stage2006 dans le forum C++
    Réponses: 5
    Dernier message: 24/05/2007, 01h46
  3. Choix à faire pour analyse d'une chaine
    Par Joe005 dans le forum C
    Réponses: 15
    Dernier message: 26/03/2007, 14h43
  4. [Tableaux] Décomposer une chaine de caratères
    Par bianconeri dans le forum Langage
    Réponses: 8
    Dernier message: 06/03/2006, 15h43
  5. Réponses: 1
    Dernier message: 08/03/2004, 11h35

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