8791 sujets

Développement web côté serveur, CMS

Pages :
Bonsoir, je cherche a faire une recherche sur un mot clé
je suis comme ça pour faire une recherche général et ça fonctionne
if ($text_search <> "") {
$search .= " AND (a.ad_headline LIKE '%$text_search%' OR a.ad_text LIKE '%$text_search%') ";
}

ensuite je fait une recherche sur un prix et la aussi ça fonctionne
 //MODIFICATION
if (!empty($_GET['Prixmini']) && !empty($_GET['Prixmaxi'])) { 
$search .= " AND (a.ad_price BETWEEN '" . $_GET['Prixmini']. "' AND '" . $_GET['Prixmaxi'] . "')";
}

Maintenant je fait une recherche sur un mot clé mais avec la méthode qui suit ça ne trouve pas
if (!empty($_GET['Motcle'])) { 
$search .= " AND (a.ad_text '". $_GET['Motcle']. "')";
 }

J'ai essayé de remplacer GET par POST ça me liste tout donc pas bon
Avez vous une idée pour qu'il trouve mon mot clé ?
Salut

La variable $search c'est bien la partie de ta requête après WHERE ?
Il ne manquerai pas un "="

if (!empty($_GET['Motcle'])) { 
$search .= " AND (a.ad_text [#red]=[/#] '". $_GET['Motcle']. "')";
 }
Et moi je te propose de faire ceci :

Si ton lien est de type : http://xxx/yyy.php?Motcle=blabla, alors :

if (isset($_GET['Motcle'])) { 

$search .= sprintf(" AND (a.ad_text='%s')", mysql_real_escape_string($_GET['Motcle']));

 }


Sinon, s'il s'agit d'un formulaire de method="post", alors remplace ton test par : if (!empty($_POST['Motcle'])) ...

Tiens nous au courant ...
Modifié par M3hdi (19 Mar 2009 - 06:15)
Merci pour votre aide Smiley cligne
a écrit :
La variable $search c'est bien la partie de ta requête après WHERE ?
Il ne manquerai pas un "="

La réponse est oui sinon j'ai rajouté le "=" c'est pas mieux Smiley decu
Avec le code de M3hdi
if (isset($_GET['Motcle'])) { 
$search .= sprintf(" AND (a.ad_text='%s')", mysql_real_escape_string($_GET['Motcle']));
}

En mettant Get rien ne s'affiche et en rele remplaçant pas POST il affiche tout Smiley decu
Pour info mon input
<input name="Motcle" type="text" size="20" maxlength="20" class="inputbox"/>
Give us ton $search complet, et je vais essayer de resoudre le problème.

Utilisation de $_GET, ou $_POST :

S'il s'agit d'un formulaire càd :
<form action="traitement.php" method="post">
<input type="xxx" name="machin" />
</form>
Alors pour recuperer les informations du champ, on utilise $_POST['machin'].
et generalement si l'input est de type text ou textarea ou password, on le controle avec !empty($_POST['machin']). pour les autres isset($_POST['machin']).

S'il s'agit de recuprer une info à partir de l'URL, alors on utilise $_GET. par exemple :
pour cet url : http://www.nomdomaine.com/islam=peace , la valeur de $_GET['islam'] sera peace .

Et si t'as encore un problème, alors il reside dans ton $search.

M3hdi
Modifié par M3hdi (19 Mar 2009 - 11:00)
<form action="index.php" method="get">
<input type="hidden" name="option" value="<?php echo $option; ?>" />
<input type="hidden" name="page" value="show_result" />

ensuite il y a une tartine dis moi si il manque des éléments
après il y a mon
<input name="Motcle" type="text" size="20" maxlength="20" class="inputbox"/>

Et dans un autre fichier qui est en relation il a les codes que j'ai montré plus haut bien sûr avec encore une tartine de code pareil si il manque des éléments pour ton aide dis le moi
utilises plutot <form action="index.php" method="post">

Et donc tu va recuperer le Motcle avec un $_POST['Motcle'] apres l'envoi du formulaire !

pour le controle tu utiliseras un :


if ( !empty($_POST['Motcle']) ) { 
       // traitement si champ rempli
}
else {
     // traitement si champ vide !
}

Modifié par M3hdi (19 Mar 2009 - 12:22)
Merci c'est sympa je crois que j'ai la solution !
par contre j'ai juste un petit bug je ne sais pas si c'est possible de corriger ça ?
Si je rentre dans Mini le chiffre 0 et dans Maxi 1000 il me liste tout même les supérieur à 1000

sur
if (!empty($_GET['Prixmini']) && !empty($_GET['Prixmaxi'])) { 
$search .= " AND (a.ad_price BETWEEN '" . $_GET['Prixmini']. "' AND '" . $_GET['Prixmaxi'] . "')";
}
Et concernant la recherche j'ai eu une réponse
 if (!empty($_GET['Motcle'])) {
$search .= " AND a.ad_text LIKE '%".$_GET['Motcle']."%'";
}
marquito a écrit :
Merci c'est sympa je crois que j'ai la solution !
par contre j'ai juste un petit bug je ne sais pas si c'est possible de corriger ça ?
Si je rentre dans Mini le chiffre 0 et dans Maxi 1000 il me liste tout même les supérieur à 1000

sur
if (!empty($_GET['Prixmini']) && !empty($_GET['Prixmaxi'])) { 
$search .= " AND (a.ad_price BETWEEN '" . $_GET['Prixmini']. "' AND '" . $_GET['Prixmaxi'] . "')";
}


Je précise juste que c'est le zéro qui est en cause sinon en mettant un autre chiffre ça fonctionne très bien
Comme ce fait il que je n'ai pas de réponses sur ce sujet? Je fais fausse route c'est un code bidon ?
Salut,

marquito a écrit :
Comme ce fait il que je n'ai pas de réponses sur ce sujet? Je fais fausse route c'est un code bidon ?
C'est surtout que ton sujet est devenu un peu laborieux à lire. Smiley langue

Sinon, en me référant à ça :
marquito a écrit :
Je précise juste que c'est le zéro qui est en cause sinon en mettant un autre chiffre ça fonctionne très bien
Je dirais que c'est normal puisque lorsqu'une variable contient 0 elle est considérée comme vide (empty). Tu pourrais faire :
if (isset($_GET['Prixmini']) && isset($_GET['Prixmaxi'])) { 
	$search .= " AND (a.ad_price BETWEEN '" . intval($_GET['Prixmini']). "' AND '" . intval($_GET['Prixmaxi']) . "')";
}
Merci Heyoan ils sont doué et sympa ces Bretons Smiley cligne
Juste un truc comme j'adapte un script en améliorant la recherche par des champs que je rajoute (du style que tu as vu) et un autre qui est une recherche de mot clé comme ça

 if (!empty($_GET['Motcle'])) {
$search .= " AND a.ad_text LIKE '%".$_GET['Motcle']."%'";
}

Je risque des injections SQL ?
j'ai lu ce truc sur ce script
a écrit :
Question: il y a mysql_real_escape_string dans le script ?
Réponse: non le mysql_query() envoie une question unique (des questions multiples ne sont pas soutenues)
C'est peut être suffisant ou il y a peut être une solution pour vérifier si j'ai des risques ?
marquito a écrit :
Je risque des injections SQL ?
Oui. Il faut toujours utiliser mysql_real_escape_string lorsque la variable n'a pas été remaniée avant l'exécution de la requête.

Par exemple :
<?php
require_once('connexion.php'); // il faut être connecté avant d'utiliser mysql_real_escape_string
$numerique = intval($_GET['un_nombre']); // mysql_real_escape_string est inutile
$texte = mysql_real_escape_string($_GET['un_texte']);
$sql = "Select monchamp From matable Where numerique = $numerique And Texte = '$texte'";
...
?>
Tu as remarqué que je ne suis pas doué en programmation Smiley ohwell
Je peux adapter mysql_real_escape_string sur un script déjà construit ?
Parce que le script en question c'est déjà une sacré tartine de code Smiley biggol
Avec du mysql_query() et du if (get_magic_quotes_gpc() == true)
J'ai aussi lu que magic_quotes ne serait plus valable
marquito a écrit :
Tu as remarqué que je ne suis pas doué en programmation Smiley ohwell
Tous les développeurs ont bien débuté un jour. Smiley cligne

marquito a écrit :
Je peux adapter mysql_real_escape_string sur un script déjà construit ?
Le plus simple au vu du code est de faire quelque chose du genre
$search .= " AND a.ad_text LIKE '%".[#blue][b]mysql_real_escape_string([/b][/#]$_GET['Motcle'][#blue][b])[/b][/#]."%'";
Bref, rien de bien compliqué.
Modifié par Heyoan (21 Mar 2009 - 15:38)
merci pour ton indulgence Smiley smile

$search .= " AND a.ad_text LIKE '%".mysql_real_escape_string($_GET['Motcle'])."%'";
ah ouai c'est tout ?
Et il faut que je le fasse aussi pour
if (isset($_GET['Prixmini']) && isset($_GET['Prixmaxi'])) { 
$search .= " AND (a.ad_price BETWEEN '" . intval($_GET['Prixmini']). "' AND '" . intval($_GET['Prixmaxi']) . "')";
}

Et concernant le reste du script déjà écrit il faut aussi que je l'adapte ?
Je te pose bcp de questions mais tes réponses sont intéressantes Smiley eek
Par contre je viens de m'apercevoir que mon
 if (!empty($_GET['Motcle'])) {
$search .= " AND a.ad_text LIKE '%".$_GET['Motcle']."%'";
}
ne fonctionne plus depuis que j'ai fais la modif des !empty en isset Smiley confus
J'ai tenté de le changer aussi en isset mais non c'était trop facile Smiley lol
J'ai recherché et ne trouve pas et surtout je ne comprend pas pourquoi depuis que j'ai fait les modifications que tu m'as fourni et qui fonctionnent très bien ma recherche par mot clé ne fonctionne plus ? tu peux me mettre sur la voie
Smiley cligne
Pages :