enregistrer les rech. des visiteurs ?

ya du tonus
Invité n'ayant pas de compte PHPfrance

30 déc. 2010, 21:38

Bonjour,
J'ai développé (en grande partie grâce à vos conseils judicieux) un moteur de recherche qui permet aux visiteurs d'entrer un ou plusieurs mots dans un formulaire, et qui sélectionne dans une table les livres qui correspondent.
J'aimerais que la variable $mot_rechercher puisse aussi s'enregistrer dans une autre table pour que je puisse connaitre les recherches de mes visiteurs. Évidement si le mot clef existe déjà j'aimerais savoir le nombre de fois qu'il a été demandé.
Je sèche vraiment, merci de vos conseils toujours judicieux !

ViPHP
xTG
ViPHP | 7331 Messages

30 déc. 2010, 23:20

Un simple insert conditionnel sur le résultat d'une requête select recherchant si le mot clé est déjà dans la table ? Qu'est ce qui te pose problème ?
Bien qu'il doit être possible de faire cela en une seule instruction mysql_query() mais j'avoue ne pas être assez doué en SQL pour faire du conditionnel.

On peut même mettre un système de nombre de recherche en ajoutant un champs de type entier et en l'incrémentant à chaque fois qu'on trouve le mot.

yadutnous
Invité n'ayant pas de compte PHPfrance

01 janv. 2011, 19:02

Bon alors j'ai touvé une solution pour le décompte. Qu'en pensez vous ?
Mais il subsiste un problème, j'utilise un affichage par page des résultats, et évidement lorsque je change de page, la table se met à jour +1 alors qu'il s'agit de la même recherche ! Comment faire ? faut il utiliser une session sachant que les utilisateur ne s'identifient pas ?
Merci de votre aide a venir.
//fonction de count des keywods
$search = $_GET['search'];
 if($search !="")
{
$r ="SELECT count(*) FROM search where keywords='".$search."'";
                $q = mysql_query($r);  
                $count = mysql_result($q,0,0);
               
               
                        if($count == 0) {
                                   $sql ="INSERT INTO search (count,keywords)
                                   VALUES (1,'$search')";
                                   $query2 = mysql_query($sql);
                                }
								
								if($count != 0) {
									
									
                                   $sql ="UPDATE search SET count = count+1 where keywords='".$search."'";

                                   $query2 = mysql_query($sql);
                                }
								}
								//

ViPHP
xTG
ViPHP | 7331 Messages

01 janv. 2011, 22:24

Attention la session n'implique en rien une authentification quelconque !
C'est juste une forme de stockage propre au visiteur. :)

Donc le mieux serait de stocker dans une variable de session le champs recherché.
Si au chargement de la page le champs recherché est différent de la variable de session dans ce cas c'est une nouvelle recherche et on incrémente.
Sinon c'est un changement de page et aucune incrémentation.

ya du tonus
Invité n'ayant pas de compte PHPfrance

01 janv. 2011, 22:46

Merci pour ton aide mais là je sèche vraiment pourrais tu m'indiquer quel type de code je devrais utiliser ?

ViPHP
xTG
ViPHP | 7331 Messages

02 janv. 2011, 12:46

session_start(); // première instruction du script
//....
if($search !="")
{
  //...                                                               
  if($count != 0) 
  {
    if( isSet($_SESSION['search']) && $_SESSION['search'] != $search) || !isSet($_SESSION['search']) ) // la recherche est différente de la précédente OU c'est la première recherche de l'utilisateur
    {
      $sql ="UPDATE search SET count = count+1 where keywords='".$search."'";
      $query2 = mysql_query($sql);
    }
  }
  $_SESSION['search'] = $search;
}
//....

yadutonus
Invité n'ayant pas de compte PHPfrance

02 janv. 2011, 12:59

Alors je pense avoir réussi. Je vous poste le code pour info mais aussi pour vérifications. Par contre je n'ai pas placé session destroy car jene sais pas ou le mettre ?
session_start();

//fonction de count des keywods
$search = $_GET['search'];
 if( $_SESSION['rech'] !=$search and  $search !="")
{
$r ="SELECT count(*) FROM search where keywords='".$search."'";
                $q = mysql_query($r);  
                $count = mysql_result($q,0,0);
               
               
                        if($count == 0) {
                                   $sql ="INSERT INTO search (count,keywords)
                                   VALUES (1,'$search')";
                                   $query2 = mysql_query($sql);
                                }
								
								if($count != 0) {
									
									
                                   $sql ="UPDATE search SET count = count+1 where keywords='".$search."'";

                                   $query2 = mysql_query($sql);
                                }
								
								$_SESSION['rech'] =$search;
								}
								//

yadutonus
Invité n'ayant pas de compte PHPfrance

02 janv. 2011, 13:09

LOL nous avons presque fait le post au même moment !! Que penses-tu de ma solution ? Quelle est le différence avec la tienne ? merci

ViPHP
xTG
ViPHP | 7331 Messages

02 janv. 2011, 14:33

La tienne évite des traitements inutiles, elle est mieux.
Mais il faudrait rajouter une vérification sur l'existence de la variable de session afin de ne pas se prendre un warning. ;)

Eléphanteau du PHP | 18 Messages

10 janv. 2011, 22:28

session_destroy est à utiliser au moment où l'utilisateur est supposé avoir quitté l'application ou lorsqu'il "revient au départ" (enfin ça dépend de ce que tu veux faire de l'appli).

Dans ton cas, j'ai l'impression que tu n'utilises qu'une seule variable de session ($_SESSION['rech']), alors pourquoi ne pas mettre un session_destroy lorsque l'utilisateur termine une recherche pour en commencer une autre ? (genre s'il quitte la page de résultats)
Néanmoins je ne pense pas que ça soit primordial pour ce code.

Sinon de toute manière le serveur termine de lui-même les sessions, par défaut au bout d'un certain temps d'inactivité ou à la fermeture du navigateur du visiteur.
contact[@]camille-hodoul.com
http://camille-hodoul.com/