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 :

incompatibilité entre requête SQL et pagination [MySQL]


Sujet :

PHP & Base de données

  1. #21
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Pourquoi n'as tu pas essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req -> execute(array(':champs'=>intval($value)));
    De plus ta requête utilise :champs pour deux informations différentes. C'est vraiment ce que tu veux ?
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  2. #22
    Invité
    Invité(e)
    Par défaut
    Bon.

    Le principe :

    (Je passe ici la partie "récupération des données POST", fournie dans mon précédent message)
    Code php : 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
     
    $where = array();
    $params = array();
     
    if( isset($_SESSION['recherche']['ville']) ){ 
    	$where[] = " ville = :ville ";
    	$params[':ville'] = $_SESSION['recherche']['ville'];
    }
    if( isset($_SESSION['recherche']['categorie']) ){ 
    	$where[] = " categorie = :categorie ";
    	$params[':categorie'] = $_SESSION['recherche']['categorie'];
    }
    if( isset($_SESSION['recherche']['part_pro']) ){ 
    	$where[] = " part_pro = :part_pro ";
    	$params[':part_pro'] = $_SESSION['recherche']['part_pro'];
    }
    if( isset($_SESSION['recherche']['demande_offre']) ){ 
    	$where[] = " demande_offre = :demande_offre ";
    	$params[':demande_offre'] = $_SESSION['recherche']['demande_offre'];
    }
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // on construit le WHERE
    $clauseWhere = ( !empty($where) )? " WHERE " . implode(" AND ", $where) : "";
     
    // requete
    $requete = "SELECT FROM .......................... " . // ICI, PAS de WHERE !
    	$clauseWhere .
    	" LIMIT ............";
     
    $query = $pdo->prepare( $requete );
    $result = $query->execute( $params );

    Ce principe permet quelque flexibilité dans la requête.
    Rien n'empêche d'écrire, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if( isset($_SESSION['recherche']['ville'] ){ 
    	$where[] = " ville LIKE :ville ";
    	$params[':ville'] = '%' . $_SESSION['recherche']['ville'] . '%';
    }
    Dernière modification par Invité ; 21/06/2017 à 18h12.

  3. #23
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Merci à tous les deux de bien vouloir m'aider mais hélas, je ne suis pas plus avancé:
    @badaze: ce ne serait pas la bonne syntaxe d'ecrire ':champs'
    Sur le site ou j'ai appris, ils appellent cette méthode requête préparée avec marqueur nominatif .
    Et même en mettant les ' : ' ça ne fonctionne toujours pas.
    Je ne sais pas s'il y a conflit à cause du fait que j'utilise le mot champs pour mon tableau et comme marqueur... Mais bon, c'était juste pour un test.

    @jreaux62, je ne comprends pas votre script et, c'est sans doute la raison pour laquelle je n'arrive pas à corriger l'erreur "...unexpected ';' ..." à la ligne du $clauseWhere

  4. #24
    Invité
    Invité(e)
    Par défaut
    Si tu veux qu'on t'aide, il faut :

    • Montrer le message d'erreur complet
    • Montrer ton code, et surtout la ligne concernée (indiquée dans le message d'erreur !)
    • Comprendre le message d'erreur !

  5. #25
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    @Stev_k

    Regarde sur le site de php.net

    http://php.net/manual/fr/pdo.prepare.php

    il y a : devant le paramètre. Donc c'est autre chose.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  6. #26
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    include('fonction_pagination.php');
     
    $page = (isset($_GET['page']) ? (intval($_GET['page']): 1);
    if($page <= 0) {
      $page = 1;
    }
     
    $where = array();
    $params = array();
     
    if( isset($_SESSION['recherche']['ville']) ){ 
    	$where[] = " ville = :ville ";
    	$params[':ville'] = $_SESSION['recherche']['ville'];
    }
    if( isset($_SESSION['recherche']['categorie']) ){ 
    	$where[] = " categorie = :categorie ";
    	$params[':categorie'] = $_SESSION['recherche']['categorie'];
    }
    if( isset($_SESSION['recherche']['part_pro']) ){ 
    	$where[] = " part_pro = :part_pro ";
    	$params[':part_pro'] = $_SESSION['recherche']['part_pro'];
    }
    if( isset($_SESSION['recherche']['demande_offre']) ){ 
    	$where[] = " demande_offre = :demande_offre ";
    	$params[':demande_offre'] = $_SESSION['recherche']['demande_offre'];
    }
    $debut = ($page - 1) *30;
     
    $clauseWhere = (!(empty($where))? " WHERE ".implode(" AND ",$where) : "";//Parse error: syntax error, unexpected ';' in C:\wamp\www\tests\www.monsite.cm\index_tri.php on line 39 
      $requete = "SELECT * FROM ".$clauseWhere." LIMIT ".$debut.",30";
      $retour = "SELECT COUNT(*) AS total FROM ventes ".$clauseWhere."";
     
      $query = $bdd -> prepare($requete);
      $req = $query -> execute($params);
     
      $req3 = $bdd -> query($retour);
      $nombreElementsTotal = $req3 -> fetchcolumn();
    $nombreDePages = ceil($nombreElementsTotal/30);
    Thanks

  7. #27
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Tu as une parenthèse en trop ou en moins.

    -> (!(empty($where))
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  8. #28
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Bonsoir badaze
    J'avais bien compris le message d'erreur.
    J'ai d'ailleurs enlevé les parenthèses autour du empty:
    Le navigateur me signale alors une autre erreur...Ce qui me laisse penser que je fais complètement fausse route.
    Le script de jreaux62 est peut-être bon, mais je l'utilise sûrement de travers.
    Bref, je vais me contenter de la méthode avec les sessions et passer le sujet en résolu.
    Merci encore.

  9. #29
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    En informatique si on s'arrête parce qu'on bute sur un problème on ne progressera pas.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  10. #30
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par badaze Voir le message
    En informatique si on s'arrête parce qu'on bute sur un problème on ne progressera pas.
    C'est vrai aussi pour tout dans la vie de tous les jours...

  11. #31
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Dans ce cas, je vais continuer de réfléchir là dessus tout en gérant d'autres aspects de mon projet (faut bien que j'avance).
    Si je trouve une solution je reviendrai la poster ici.

    Merci pour tout.

  12. #32
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    @Stevie_k dans le dernier code que vous avez posté, vous avez une erreur là (isset($_GET['page']) ? (intval($_GET['page']): 1); mais bon sûrement un mauvais copier-coller.
    Dans la requête $requete le nom de la table a été oubliée dans le FROM.
    $req3 = $bdd -> query($retour); , $retour contient des marqueurs donc faudrait aussi la préparer..
    Activez les erreurs $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); car par défaut il est bien silencieux PDO.
    La sécurité est à prendre en compte en amont, car si vous oubliez de "préparer" ici et là , vous pourrez avoir de mauvaises surprises.

    PS: Me demande bien si cette liste de if, ne peut pas être remplacée par un foreach
    Le bienfait n'est jamais perdu

  13. #33
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Bonjour Willy_k
    Merci pour les indications. Je vais regarder tous ça.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Choix entre requête SQL ou mapping entre tables
    Par webfranc dans le forum Connectivité
    Réponses: 4
    Dernier message: 25/01/2011, 14h52
  2. Requête SQL et tableau à double entrée
    Par Invité dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/06/2007, 20h51
  3. Différence de résultats entre requêtes SQL et Criteria
    Par titoudemtl dans le forum Hibernate
    Réponses: 3
    Dernier message: 07/08/2006, 09h30
  4. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06
  5. Résultats différent entre une requête SQL, et la même en VBA
    Par thetaps dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/09/2005, 12h05

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