Résolu Mettre plusieurs valeur dans une requete

Enzo34!

★REALITYGAMING★
Premium
Inscription
31 Janvier 2014
Messages
1 417
Réactions
329
Points
17 831
PHP:
$req = $bdd->query('SELECT * FROM membres ORDER BY date Desc LIMIT 20');

if(isset($_GET['annonce']) AND !empty($_GET['annonce'])){
    $annonce = htmlspecialchars($_GET['annonce']);
    $adresse = htmlspecialchars($_GET['adresse']);
    $req = $bdd->query('SELECT * FROM membres WHERE CONCAT(produit, description) LIKE "%'.$annonce.'%" ORDER BY date DESC');

}


Ceci sert de recherche, j'aimerais pouvoir incruster la valeur adresse dans la recherche sachant que la valeur adresse ce situe dans la même table ^^
 

Enzo34!

★REALITYGAMING★
Premium
Inscription
31 Janvier 2014
Messages
1 417
Réactions
329
Points
17 831
Screenshot_27.jpg

Les deux inputs sont dans le même form ^^
Nom du produit = annonce
Localisation = adresse
 

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
Ouuuuuuuuuuuulaaaaaa :p

Par où commencer :trollface:

Alors, premièrement, j'ose espérer que tu utilises GET à la place de POST car tu ne traites pas les données d'un formulaire ?
Ensuite, j'ose espérer que tu utilises PDO pour ta connexion base de données et pas mysqli ou pire mysql

On n'utilise JAMAIS des variables dans les requêtes ->query(), on utilise les requêtes préparées pour ça

En gros tu as le droit de faire ça
Code:
$req = $bdd->query('SELECT * FROM membres ORDER BY date Desc LIMIT 20');
mais pas ça
Code:
$req = $bdd->query('SELECT * FROM membres WHERE CONCAT(produit, description) LIKE "%'.$annonce.'%" ORDER BY date DESC');

Je suppose en lisant ton code que tu utilises mysqli car si tu utilisais PDO, query renverrait une instance de PDOStatement et pas le résultat de ta requête, tu devrais changer ça et passer à PDO si ce n'est pas le cas, je te laisse te renseigner sur internet ou si tu as vraiment besoin d'aide je te donnerai un exemple rapide mais sur Openclassrooms tu trouves ça facilement

Ensuite il faudrait que tu te poses les bonnes questions pour réfléchir en SQL et responsabilités:
- Qu'est-ce que je cherche, où, comment ?
- Qui a quel rôle ? Qu'est-ce que je gère avec mon langage de programmation ? Qu'est-ce que je gère avec ma base de données

Petit hors sujet ; quand tu inclus une variable PHP dans une string, il vaut mieux utiliser cette forme là:
Code:
$req = $bdd->query("SELECT * FROM membres WHERE CONCAT(produit, description) LIKE '%{$annonce}%' ORDER BY date DESC");
C'est tout de suite plus lisible d'avoir un {$variable} dans le code (pour ça tu dois forcément avoir ton string entourés de guillemets double - les accolades sont facultatives mais je te les recommande pour la lisibilité)

--

Soit tu n'as aucune connaissance en SQL et ton problème est plutôt simple, soit je n'ai pas compris ta demande.
Est-ce que tu cherches juste à rajouter une condition sur l'adresse également ? Si oui voilà ta requête actuelle:

Code:
SELECT * FROM membres WHERE CONCAT(produit, description) LIKE "%'.$annonce.'%" ORDER BY date DESC

Si je la décompense je vois ça:

Code:
SELECT
    *
FROM
    membres
WHERE
    CONCAT(produit, description) LIKE "%'.$annonce.'%"
ORDER BY
    date
DESC

Donc toi, si tu veux juste rajouter une condition sur l'adresse, tu dois rajouter une condition dans le where. Que ce soit un OR ou un AND, voici à quoi ça ressemblerait

Code:
SELECT
    *
FROM
    membres
WHERE
    CONCAT(produit, description) LIKE "%'.$annonce.'%"
    AND adresse LIKE "%'.$adresse.'%"
ORDER BY
    date
DESC
ou encore
Code:
SELECT * FROM membres WHERE CONCAT(produit, description) LIKE "%'.$annonce.'%" AND adresse LIKE "%'.$adresse.'%" ORDER BY date DESC

ATTENTION: C'est une très mauvaise pratique, utilise PDO pour les requêtes préparées, tu auras même plus besoin de htmlspecialchars().
Et tu es sûr de la pertinence de ta requête actuelle ? ça me paraît très enthousiaste, c'est pour quel usage ? :mmh:
 
Cette réponse a aidé l'auteur de cette discussion !

Enzo34!

★REALITYGAMING★
Premium
Inscription
31 Janvier 2014
Messages
1 417
Réactions
329
Points
17 831
Ouuuuuuuuuuuulaaaaaa :p

Par où commencer :trollface:

Alors, premièrement, j'ose espérer que tu utilises GET à la place de POST car tu ne traites pas les données d'un formulaire ?
Ensuite, j'ose espérer que tu utilises PDO pour ta connexion base de données et pas mysqli ou pire mysql

On n'utilise JAMAIS des variables dans les requêtes ->query(), on utilise les requêtes préparées pour ça

En gros tu as le droit de faire ça
Code:
$req = $bdd->query('SELECT * FROM membres ORDER BY date Desc LIMIT 20');
mais pas ça
Code:
$req = $bdd->query('SELECT * FROM membres WHERE CONCAT(produit, description) LIKE "%'.$annonce.'%" ORDER BY date DESC');

Je suppose en lisant ton code que tu utilises mysqli car si tu utilisais PDO, query renverrait une instance de PDOStatement et pas le résultat de ta requête, tu devrais changer ça et passer à PDO si ce n'est pas le cas, je te laisse te renseigner sur internet ou si tu as vraiment besoin d'aide je te donnerai un exemple rapide mais sur Openclassrooms tu trouves ça facilement

Ensuite il faudrait que tu te poses les bonnes questions pour réfléchir en SQL et responsabilités:
- Qu'est-ce que je cherche, où, comment ?
- Qui a quel rôle ? Qu'est-ce que je gère avec mon langage de programmation ? Qu'est-ce que je gère avec ma base de données

Petit hors sujet ; quand tu inclus une variable PHP dans une string, il vaut mieux utiliser cette forme là:
Code:
$req = $bdd->query("SELECT * FROM membres WHERE CONCAT(produit, description) LIKE '%{$annonce}%' ORDER BY date DESC");
C'est tout de suite plus lisible d'avoir un {$variable} dans le code (pour ça tu dois forcément avoir ton string entourés de guillemets double - les accolades sont facultatives mais je te les recommande pour la lisibilité)

--

Soit tu n'as aucune connaissance en SQL et ton problème est plutôt simple, soit je n'ai pas compris ta demande.
Est-ce que tu cherches juste à rajouter une condition sur l'adresse également ? Si oui voilà ta requête actuelle:

Code:
SELECT * FROM membres WHERE CONCAT(produit, description) LIKE "%'.$annonce.'%" ORDER BY date DESC

Si je la décompense je vois ça:

Code:
SELECT
    *
FROM
    membres
WHERE
    CONCAT(produit, description) LIKE "%'.$annonce.'%"
ORDER BY
    date
DESC

Donc toi, si tu veux juste rajouter une condition sur l'adresse, tu dois rajouter une condition dans le where. Que ce soit un OR ou un AND, voici à quoi ça ressemblerait

Code:
SELECT
    *
FROM
    membres
WHERE
    CONCAT(produit, description) LIKE "%'.$annonce.'%"
    AND adresse LIKE "%'.$adresse.'%"
ORDER BY
    date
DESC
ou encore
Code:
SELECT * FROM membres WHERE CONCAT(produit, description) LIKE "%'.$annonce.'%" AND adresse LIKE "%'.$adresse.'%" ORDER BY date DESC

ATTENTION: C'est une très mauvaise pratique, utilise PDO pour les requêtes préparées, tu auras même plus besoin de htmlspecialchars().
Et tu es sûr de la pertinence de ta requête actuelle ? ça me paraît très enthousiaste, c'est pour quel usage ? :mmh:
$bdd = new PDO('mysql:host='.$hostname.';dbname='.$dbname.';charset=utf8', ''.$user.'', ''.$password.'', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
 

Enzo34!

★REALITYGAMING★
Premium
Inscription
31 Janvier 2014
Messages
1 417
Réactions
329
Points
17 831
Ouuuuuuuuuuuulaaaaaa :p

Par où commencer :trollface:

Alors, premièrement, j'ose espérer que tu utilises GET à la place de POST car tu ne traites pas les données d'un formulaire ?
Ensuite, j'ose espérer que tu utilises PDO pour ta connexion base de données et pas mysqli ou pire mysql

On n'utilise JAMAIS des variables dans les requêtes ->query(), on utilise les requêtes préparées pour ça

En gros tu as le droit de faire ça
Code:
$req = $bdd->query('SELECT * FROM membres ORDER BY date Desc LIMIT 20');
mais pas ça
Code:
$req = $bdd->query('SELECT * FROM membres WHERE CONCAT(produit, description) LIKE "%'.$annonce.'%" ORDER BY date DESC');

Je suppose en lisant ton code que tu utilises mysqli car si tu utilisais PDO, query renverrait une instance de PDOStatement et pas le résultat de ta requête, tu devrais changer ça et passer à PDO si ce n'est pas le cas, je te laisse te renseigner sur internet ou si tu as vraiment besoin d'aide je te donnerai un exemple rapide mais sur Openclassrooms tu trouves ça facilement

Ensuite il faudrait que tu te poses les bonnes questions pour réfléchir en SQL et responsabilités:
- Qu'est-ce que je cherche, où, comment ?
- Qui a quel rôle ? Qu'est-ce que je gère avec mon langage de programmation ? Qu'est-ce que je gère avec ma base de données

Petit hors sujet ; quand tu inclus une variable PHP dans une string, il vaut mieux utiliser cette forme là:
Code:
$req = $bdd->query("SELECT * FROM membres WHERE CONCAT(produit, description) LIKE '%{$annonce}%' ORDER BY date DESC");
C'est tout de suite plus lisible d'avoir un {$variable} dans le code (pour ça tu dois forcément avoir ton string entourés de guillemets double - les accolades sont facultatives mais je te les recommande pour la lisibilité)

--

Soit tu n'as aucune connaissance en SQL et ton problème est plutôt simple, soit je n'ai pas compris ta demande.
Est-ce que tu cherches juste à rajouter une condition sur l'adresse également ? Si oui voilà ta requête actuelle:

Code:
SELECT * FROM membres WHERE CONCAT(produit, description) LIKE "%'.$annonce.'%" ORDER BY date DESC

Si je la décompense je vois ça:

Code:
SELECT
    *
FROM
    membres
WHERE
    CONCAT(produit, description) LIKE "%'.$annonce.'%"
ORDER BY
    date
DESC

Donc toi, si tu veux juste rajouter une condition sur l'adresse, tu dois rajouter une condition dans le where. Que ce soit un OR ou un AND, voici à quoi ça ressemblerait

Code:
SELECT
    *
FROM
    membres
WHERE
    CONCAT(produit, description) LIKE "%'.$annonce.'%"
    AND adresse LIKE "%'.$adresse.'%"
ORDER BY
    date
DESC
ou encore
Code:
SELECT * FROM membres WHERE CONCAT(produit, description) LIKE "%'.$annonce.'%" AND adresse LIKE "%'.$adresse.'%" ORDER BY date DESC

ATTENTION: C'est une très mauvaise pratique, utilise PDO pour les requêtes préparées, tu auras même plus besoin de htmlspecialchars().
Et tu es sûr de la pertinence de ta requête actuelle ? ça me paraît très enthousiaste, c'est pour quel usage ? :mmh:
Tu aurais discord ? J'ai beaucoup trop de question concernant les requêtes prépare ^^
 
Haut