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 :

requete crée grace a un formulaire


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut requete crée grace a un formulaire
    Bonjour,
    J'ai ce formulaire :



    Le seul champs obligatoire est le Précision

    Grace a ce formulaire, je realise une requete 'dynamique'

    Voici le 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
    18
    19
    20
    21
    22
    23
    24
     
    if(empty($_POST['btn'])) { header("Location:recherche.php"); } 
    include ("conf.php");
    $nbpr = $_POST['nbrpersonnes'];
    $typelog = addslashes($_POST['typelog']);
    $cham = $_POST['cham'];
    if(isset($_POST['piscine'])) { $piscine = $_POST['piscine']; } else { $piscine = "0"; }
    $depvilla = $_POST['depvilla'];
    $ville = stripslashes($_POST['ville']);
    $ext = $_POST['crit'];
    $req = "SELECT * FROM annonce WHERE (";
    if($typelog == '0') { $req.= ''; } else { $req.= "typelog='".$typelog."'"; }
     
    if($nbpr == '0') { $req.= ''; } else { $req.= "nbrpersonnes <= '".$nbpr."'"; }
     
    if($cham == '0') { $req.= ''; } else  { $req.= "cham > '".$cham."'"; }
     
    if($piscine == '0') { $req.= ''; } else  { $req.= "piscine = '".$piscine."'"; }
     
    if($depvilla == '0') { $req.= ''; } else  { $req.= "depvilla='".$depvilla."'"; }
     
    if($ville == '0') { $req.= ''; } else  { $req.= "villevilla='".$ville."' "; }
    $req.=") AND activ='1'";
    $req.= " GROUP by idannonce";
    Le probleme vient des liaisons entre les differents champs (AND ou OR géré grace à $ext).
    Etant donné que tout les champs de recherche ne sont pas obligatoires, je dois afficher le $EXT ou non. J'ai un peu de mal a coordonner l'affichage de ce $ext. Voici un exemple : SELECT * FROM annonce WHERE ( OR villevilla='Ajaccio' ) AND activ='1' GROUP by idannonce en ne selectionnant que la ville.
    J'ai nettoyé le code des $ext. Si vous avez une idée....
    Merci

  2. #2
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    J'ai pas bien compris ta question avec $ext, mais il semble que tu cherches
    à faire des AND sur des critères ou éventuellement OR. Voici une technique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $filters = array();
    if(strlen($_POST['nom_champ1'])) $filters[] = "nom_champ1='".$_POST['nom_champ1']."'";
    if(strlen($_POST['nom_champ2'])) $filters[] = "nom_champ2='".$_POST['nom_champ2']."'";
    if(strlen($_POST['nom_champ3'])) $filters[] = "nom_champ3='".$_POST['nom_champ3']."'";
    $sql = 'SELECT * FROM table WHERE '.implode(' AND ', $filters);
    Ce code illustre juste l'idée... il n'est pas abouti :-)

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    je vais tenter, tu penses que cela peux fonctionner avec des données numeriques ? Je vois que l'on verifie la taille de la variable posté.

  4. #4
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    J'utilise strlen(...) parce que c'est un bon moyen de savoir si le champs
    contient quelques chose ou non.

    un simple if($_POST['toto']) peut poser problème si l'utilisateur tape '0'

    oui strlen permet de traiter des variables numériques. en fait, les nombres
    postés par un formulaire sont sous forme de chaine :-)

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut

    Derniere question :

    J'ai ce type de formulaire, j'aimerais avoir une protection contre les injections SQL, afin de le proteger
    Images attachées Images attachées  

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Par défaut
    Salut,

    c dans la FAQ

  7. #7
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Quelques info ici

    et ici

    EDIT: @billoum arg, trop tard :-) merci

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    Bonjour Marcha,
    Désolé pour cette réponse tardive, merci pour ta fonction pour ecrire la requete dynamique, cela fonctionne parfaitement.
    J'aurais une petite question.

    Avec ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function quote_smart($value)
    {
      if(get_magic_quotes_gpc()) $value = stripslashes($value);
      return mysql_real_escape_string($value);
    }
    J'ai testé mon champs de deux manieres.
    dasn mon formulaire j'ai mis : eric;>'
    Ensuite deux facons de recuperer le POST

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $prenom=($_POST['prenom']);
    $prenom=quote_smart($_POST['prenom']);
    Dans les deux cas, aucune erreur et le meme insertion dans la base de données : eric;>'

    D'ou ma question, quelle difference entre ces deux POST ?
    J'ai bien lu l'article sur l'injection SQL, il y a quelques points que je n'ai pas saisie, notament le point sur Comment éviter ces attaques.

    J'ai fais deux tests d'affichage.

    1er cas = eric;>'
    2eme cas = eric;>\'

    J'ai testé une premiere fois mais j'ai une cete erreur :

    Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in C:\Program Files\EasyPHP 2.0b1\www\site final - second with 1 table\func.php on line 5
    Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files\EasyPHP 2.0b1\www\site final - second with 1 table\func.php on line 5
    J'ai etabli une connexion avec ma base phpMyAdmin et cela a fonctionné, je ne comprend pas pourquoi cette fonctionne a besoin d'une connexion.

    Merci et bonne journée à toi

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/09/2006, 14h06
  2. requete pa rametree dans un formulaire
    Par tamerlan dans le forum Access
    Réponses: 5
    Dernier message: 24/03/2006, 15h21
  3. [MySQL] insérer image dans bdd grace a un formulaire
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 14/03/2006, 08h34
  4. Requete Action avec parametre dans formulaire
    Par marie10 dans le forum IHM
    Réponses: 2
    Dernier message: 08/02/2006, 12h02
  5. requete lié a un sous formulaire
    Par philo71 dans le forum IHM
    Réponses: 27
    Dernier message: 27/11/2005, 22h53

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