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 :

"$query" petit probleme :-( [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de pierre987321
    Inscrit en
    Août 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 139
    Points : 62
    Points
    62
    Par défaut "$query" petit probleme :-(
    slt a tous, dons voila.
    apres de temp de recherche je ne trouve pas
    ma solution. je pense que l'un d'entre vous
    pourrrra me dir...

    voila en gros je construit un site www.vente-location.fr
    sur lequel j'ai un moteur de recherche pour les annonces
    passé.

    je tente d'utiliser $query mais pour certain truc je bloc
    je vous montre c plus parlant.




    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
     
    $departement = @$_GET['departement'];
    	if ($departement != '') 	
    	{
    	$query_search .= " AND products.departement = '$departement";
    	}
     
    et
     
     
     $departementdeux = @$_GET['departementdeux'];
                    if ($departementdeux != '')
                  {
                   $query_search .= " AND products.departement= '$departementdeux";
                  }
    quand je tente de faire une recherche sur products.departement avec les deux, sa ne trouve rien. avec une sa marche ou les deux avec la meme demande c ok.

    qui a une solution ? je pense qu'il me faut juste les regrouper.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Ne manque-t-il pas une apostrophe pour terminer l'expression SQL (après $departement et $departementdeux dans tes requêtes) ?


    Cordialement, Julp

  3. #3
    Membre du Club Avatar de pierre987321
    Inscrit en
    Août 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 139
    Points : 62
    Points
    62
    Par défaut ...
    non en faite il faut juste un truc comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     $departement = @$_GET['departement'];
     $departementdeux = @$_GET['departementdeux'];
    	if ($departement != '') 
    	if ($departementdeux != '')
    	{
    		$query_search .= " AND products.departement LIKE" .$departement ."OR" .$departementdeux; 
    	}
    mais la si je rempli les deux, sa marche nikel !
    dep : 07 et 69 recherche ok. sa me donne bien
    les annonces des deux departement.

    mais ci je rentre qu'un seul sa me donne rien !

  4. #4
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut Re: ...
    essaies ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $departement = @$_GET['departement'];
    $departementdeux = @$_GET['departementdeux'];
    if(!empty($departement)) $query_search .= " AND products.departement LIKE " .$departement;
    if(!empty($departementdeux) && !empty($departement)) $query_search .= " OR products.departement LIKE ".$departementdeux;

  5. #5
    Membre du Club Avatar de pierre987321
    Inscrit en
    Août 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 139
    Points : 62
    Points
    62
    Par défaut ...
    pour deux sa marche, a condition qu'il y a pas un "0" ex : 01,02,03.... dans la requête.

    mais pour un tjr off, enfin sa fonctionne comme ci on demande rien.



    c un casse tete pour moi la

  6. #6
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    pour le "0" devant ça peut se traiter avec une regexp, par contre pour la requete il faudrait que tu nous montres le début de cette requête pour que l'on puisse comprendre et t'aider...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // pour les "0"
    $departement = preg_replace("`^0`", "",  $_GET['departement']);
    $departementdeux = preg_replace("`^0`", "", $_GET['departementdeux'];

  7. #7
    Membre du Club Avatar de pierre987321
    Inscrit en
    Août 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 139
    Points : 62
    Points
    62
    Par défaut ...
    donc voila une partie du script :


    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    <?php
    mysql_select_db($database_classifieds, $classifieds);
    function inradius($zip,$radius)
        {
            $query="SELECT * FROM zip_codes WHERE zip='$zip'";
    		//echo $query."<br>";
            $result = mysql_query($query);
     
            if(mysql_num_rows($result) > 0) {
                $row = mysql_fetch_array($result, MYSQL_ASSOC);
                $lat=$row["latitude"];
                $lon=$row["longitude"];
                $query="SELECT zip FROM zip_codes WHERE (POW((69.1*(longitude-\"$lon\")*cos($lat/57.3)),\"2\")+POW((69.1*(latitude-\"$lat\")),\"2\"))<($radius*$radius) ";
    			//echo $query;
                $result = mysql_query($query);
    if(mysql_num_rows($result) > 0) {
                    while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
                        $zipArray[]=$row;
                    }
    			return $zipArray;
                }
            } else {
                return "Zip Code not found";
            }
    } // end func
     
    	$currentPage = $_SERVER["PHP_SELF"];
    	$maxRows_search = $main['maxRows_search'] ;
    	$pageNum_search = 0;
    if (isset($_GET['pageNum_search'])) {
      $pageNum_search = $_GET['pageNum_search'];
    }
    $startRow_search = $pageNum_search * $maxRows_search;
     
    mysql_select_db($database_classifieds, $classifieds); 
    //handle the options//
    $inSQL="";
    $count=0;
    foreach(@$_GET as $objItem => $objValue){
    	if(substr($objItem,0,3)=="opt" && $objValue<>""){
    		$inSQL .= "'". $objValue ."',";
    		$count++;
    	}
    }
    $inSQL.="''";
    if($count>0){
    $addSQL="INNER JOIN products_fields ON products.id = products_fields.pID AND sValue IN (".$inSQL.") ";
    }
    if(isset($_GET['zipCode']) && $_GET['zipCode']<>""){
    	$zipCode = trim(@$_REQUEST["zipCode"]);
    	if(isset($_REQUEST['miles']) && $_REQUEST['miles']<>""){
    	$radius = $_REQUEST["miles"];
    	}else{
    	$radius = 2500;
    	}
    	$zipArray = inRadius($zipCode,$radius);
    	print "<h2>There are ".count($zipArray)." Zip codes within $radius Miles of $zipCode</h2>";
    	$i=1;
    	foreach($zipArray as $row) {
    	   if(count($zipArray)==$i)
    	   $zipSQL.="'".$row[zip]."'";
    	   else
    	   $zipSQL.="'".$row[zip]."',";
    	   $i++;
    	}
     
     $query_search="SELECT products.id,products.owner,products.title,products.featured,products.section,products.description,products.price,products.dateadded,products.expiration, products.annonceur,products.descriptionlongue, products.departement, products.codepostal, products.ville FROM products LEFT JOIN users ON products.owner=users.id WHERE products.expiration > NOW() AND products.display='Y' AND users.zip IN (".$zipSQL.")";
    //echo $sql;
    } else {
    $query_search="SELECT products.id,products.owner,products.title,products.featured,products.section,products.description,products.price,products.dateadded,products.expiration, products.annonceur, products.ville, products.departement, products.codepostal, products.descriptionlongue FROM products LEFT JOIN users ON products.owner=users.id WHERE products.expiration > NOW() AND products.display='Y'";
    }
    $query_search="SELECT products.id, products.hitcount, products.prodID, products.owner, products.title, products.featured, products.section, products.description, products.price,products.dateadded, products.expiration, products.annonceur, products.codepostal, products.ville, products.caution, products.departement, products.descriptionlongue, users.city, users.address, users.zip, users.email, users.extra, users.firstname, users.lastname, users.phone FROM products ".$addSQL." LEFT JOIN users ON products.owner=users.id WHERE products.expiration > NOW() AND products.display = 'Y'";
     
     
     
    // mon probleme se pose ici ******************************************************
     
     
    $departement = preg_replace("`^0`", "",  $_GET['departement']); 
    $departementdeux = preg_replace("`^0`", "", $_GET['departementdeux']); 
    if(!empty($departement) && !empty($departementdeux)) $query_search .= " AND products.departement LIKE $departement"; 
    if(!empty($departementdeux) && !empty($departement)) $query_search .= " OR products.departement LIKE $departementdeux";
     
     
    // mon probleme se pose ici ******************************************************
     
     
     
     $codepostal = @$_GET['codepostal'];
    	if ($codepostal != '') 
    	{
    		$query_search .= " AND products.codepostal = '$codepostal'";
    	}
     
     $descriptionlongue = @$_GET['descriptionlongue'];
    	if ($descriptionlongue != '') 
    	{
    		$query_search .= " AND products.descriptionlongue = '$descriptionlongue'";
    	}
     $ville = @$_GET['ville'];
    	if ($ville != '') 
    	{
    		$query_search .= " AND products.ville = '$ville'";
    	}
     $annonceur = @$_GET['annonceur'];
    	if ($annonceur != '') 
    	{
    		$query_search .= " AND products.annonceur = '$annonceur'";
    	}
    //fin de la modif 
     
    	$type = @$_GET['type'];
    	if ($type != '') 
    	{
    		$query_search .= " AND products.section = '$type'";
    	}
    	$state=@$_GET['state'];
    	if($state != ''){
    		$query_search .= " AND users.state = '$state'";
    	}
    	$city=@$_GET['city'];
    	if($city != ''){
    		$query_search .= " AND users.city LIKE '%". $city ."%'";
    	}
    	//search price//
    	$minprice=trim(@$_GET['minprice']);
    	$maxprice=trim(@$_GET['maxprice']);
    	if($minprice == "")
    		$minprice=0;
    	if($maxprice == "")
    		$maxprice=9999999;
     
    	$query_search .= " AND products.price BETWEEN ". $minprice ." AND ". $maxprice;
    	//end search price
     
    	$owner = @$_GET['owner'];
    	if ($owner != '') 
    		{
    			$query_search .= " AND products.owner = '".$owner."'";
    		}
    	$searchtext = @$_GET['searchtext'];
    	if ($searchtext != '') 
    		{ // Some search text was specified
    		  $query_search .= " AND (products.title LIKE '%".$searchtext."%' OR products.description LIKE '%".$searchtext."%')";
    		}
    $query_search .= " GROUP BY products.id, products.owner, products.title, products.featured, products.section, products.description, products.price, products.annonceur, products.ville, products.descriptionlongue, products.departement, products.codepostal, products.dateadded, products.expiration";
    if($count>0){
    	$query_search.=" HAVING count(sValue) = ".$count;
    }
    $query_search .= " ORDER BY ".$config['mainProductSort']." ".$config['mainProductSortOption']."";
     
    #echo $query_search."<br>";
     
    $query_limit_search = sprintf("%s LIMIT %d, %d", $query_search, $startRow_search, $maxRows_search);
    $search = mysql_query($query_limit_search, $classifieds) or die(mysql_error());
    $row_search = mysql_fetch_assoc($search);
     
     
     
    		if (isset($_GET['totalRows_search'])) {
    		  $totalRows_search = $_GET['totalRows_search'];
    		} else {
    		  $all_search = mysql_query($query_search);
    		  $totalRows_search = mysql_num_rows($all_search);
    		}
     
    		$totalPages_search = ceil($totalRows_search/$maxRows_search)-1;
    		$queryString_search = "";
    				if (!empty($HTTP_SERVER_VARS['QUERY_STRING'])) {
    				  $params = explode("&", $HTTP_SERVER_VARS['QUERY_STRING']);
    				  $newParams = array();
    				  foreach ($params as $param) {
    					if (stristr($param, "pageNum_search") == false && 
    						stristr($param, "totalRows_search") == false) {
    					  array_push($newParams, $param);
    					}
    				  }
    				  if (count($newParams) != 0) {
    					$queryString_search = "&" . implode("&", $newParams);
    				  }
    				}
    $queryString_search = sprintf("&totalRows_search=%d%s", $totalRows_search, $queryString_search);
    $maxRows_search = 10;
    $pageNum_search = 0;
    if (isset($_GET['pageNum_search'])) {
      $pageNum_search = $_GET['pageNum_search'];
    }
    $startRow_search = $pageNum_search * $maxRows_search;
    ?>

    avez vous des questions ? ou remarque ?

  8. #8
    Membre du Club Avatar de pierre987321
    Inscrit en
    Août 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 139
    Points : 62
    Points
    62
    Par défaut
    en faite avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	 $departement = @$_GET['departement'];
    	if ($departement != '') 
    	{
    		$query_search .= " AND products.departement = '$departement'";
    	}
     
    	 $departementdeux = @$_GET['departementdeux'];
    	if ($departementdeux != '') 
    	{
    		$query_search .= " AND products.departement = '$departementdeux'";
    	}

    quand je renseigne 1 champ : sa marche, OK "l'un ou l'autre"

    quand je renseugne 2 champ : sa ne marche pas "juste, rien trouvé"

    quand je renseigne 2 champ a l'identique : sa marche, OK

  9. #9
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    tu ne peux pas avoir deux fois AND !

    imagines ce que tu lui demandes : retournes moi les reponses ou le département est égal à un chiffre et le departement est égal à un autre chiffre. pas possible !

    si tu mets OR que se passe-t-il ?

  10. #10
    Membre du Club Avatar de pierre987321
    Inscrit en
    Août 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 139
    Points : 62
    Points
    62
    Par défaut ...
    avec :


    $departement = @$_GET['departement'];
    if ($departement != '')
    {
    $query_search .= " AND products.departement = '$departement'";
    }

    $departementdeux = @$_GET['departementdeux'];
    if ($departementdeux != '')
    {
    $query_search .= " OR products.departement = '$departementdeux'";
    }




    je f une recherche avec :

    departement : OK
    departement + departementdeux : OK
    departementdeux : réagi comme un champ vide...

    quesque tu en pense ?

  11. #11
    Membre du Club Avatar de pierre987321
    Inscrit en
    Août 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 139
    Points : 62
    Points
    62
    Par défaut ...
    j'ai trouvé



    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
     
    $departement = @$_GET['departement'];
    $departementdeux = @$_GET['departementdeux'];
     
    if ($departement != '' && $departementdeux != '') 
    {
    $query_search .= " AND (products.departement = '$departement' OR products.departement = '$departementdeux')";
    }
    elseif($departement != '' && $departementdeux == '') 
    {
    $query_search .= " AND products.departement = '$departement'";
    }
    elseif($departement == '' && $departementdeux != '') 
    {
    $query_search .= " AND products.departement = '$departementdeux'";
    }

    ya rien la !

+ Répondre à la discussion
Cette discussion est résolue.

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