Pourquoi n'as tu pas essayé
De plus ta requête utilise :champs pour deux informations différentes. C'est vraiment ce que tu veux ?Code:
1
2 $req -> execute(array(':champs'=>intval($value)));
Version imprimable
Pourquoi n'as tu pas essayé
De plus ta requête utilise :champs pour deux informations différentes. C'est vraiment ce que tu veux ?Code:
1
2 $req -> execute(array(':champs'=>intval($value)));
Bon.
Le principe :
(Je passe ici la partie "récupération des données POST", fournie dans mon précédent message)
Code:
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:
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:
1
2
3
4 if( isset($_SESSION['recherche']['ville'] ){ $where[] = " ville LIKE :ville "; $params[':ville'] = '%' . $_SESSION['recherche']['ville'] . '%'; }
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
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 !
@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.
Voici le code:
ThanksCode:
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);
Tu as une parenthèse en trop ou en moins.
-> (!(empty($where))
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.Code:
1
2 !empty($where)?
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.
En informatique si on s'arrête parce qu'on bute sur un problème on ne progressera pas.
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.
@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.
là $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
Bonjour Willy_k
Merci pour les indications. Je vais regarder tous ça.