2 requètes

ViPHP
AB
ViPHP | 5818 Messages

14 janv. 2008, 04:37

Ou tu pourrais également utiliser la clause WHERE... IN

Dans ce cas tes requêtes pourraient ressembler à
if (empty($_POST['mot']))  
$sql= "SELECT texte FROM annonce WHERE categorie = '" . $quoi . "' AND departement = '" . $endroit . "'";  
else  
{
$sql = "SELECT texte FROM annonce WHERE categorie= '" . $quoi . "' AND departement = '" . $endroit . "' AND motcle1 IN (";  

$tab = explode(' ', $_POST['mot']);
foreach ($tab as $key => $value) {
if ($key == 0) $sql .= '\'' . mysql_real_escape_string(stripgpc($value)) . '\'';
else
$sql .= ',\'' . mysql_real_escape_string(stripgpc($value)) . '\'';
}
$sql .= ")";
} 
et en optimisant un peu :
$sql = "SELECT texte FROM annonce WHERE categorie = '" . $quoi . "' AND departement = '" . $endroit . "'";

if (!empty($_POST['mot']))  {
$sql .= " AND motcle1 IN (";
$tab = explode(' ', $_POST['mot']);
foreach ($tab as $key => $value) {
if ($key == 0) $sql .= '\'' . mysql_real_escape_string(stripgpc($value)) . '\'';
else
$sql .= ',\'' . mysql_real_escape_string(stripgpc($value)) . '\'';
}
$sql .= ")";
}
Modifié en dernier par AB le 14 janv. 2008, 05:00, modifié 2 fois.

Mammouth du PHP | 1885 Messages

14 janv. 2008, 04:53

Ou encore plus court:
$sql = "SELECT texte FROM annonce WHERE categorie = '$quoi' AND departement = '$endroit'";

if (empty($_POST['mot']) === FALSE) {
    
  $tab = explode(' ', $_POST['mot']);
  array_walk($tab, create_function('&$v,$k', '$v = mysql_real_escape_string(stripgpc($v));'));
  $IN = implode("','", $tab);

  $sql .=  " AND motcle1 IN ('$IN')";
}
:)
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

ViPHP
AB
ViPHP | 5818 Messages

14 janv. 2008, 05:54

C'est vrai que c'est beaucoup plus élégant.

Et l'on peut encore simplifier pour l'ensemble
<?php

$liendb = mysql_connect("nomduserveur","identifiant","pass");
mysql_select_db ("nomdelabase");

function protection(&$value) {
$value = (get_magic_quotes_gpc())? mysql_real_escape_string(stripslashes(trim($value))) : mysql_real_escape_string(trim($value));
return $value;
}

$quoi = !empty($_POST['quoi'])? protection($_POST['quoi']) : '';
$endroit = !empty($_POST['endroit'])? protection($_POST['endroit']) : '';

$sql= "SELECT texte FROM annonce WHERE categorie = '" . $quoi . "' AND departement = '" . $endroit . "'"; 

if (empty($_POST['mot']) === FALSE) {
    
  $tab = explode(' ', $_POST['mot']);
  array_walk($tab, 'protection');
  $IN = implode("','", $tab);

  $sql .=  " AND motcle1 IN ('$IN')";
}


$resultat =mysql_query($sql) or die (mysql_error());
$nb_lignes = mysql_num_rows($resultat);
$nb_colonnes = mysql_num_fields($resultat); ?>
Modifié en dernier par AB le 14 janv. 2008, 08:09, modifié 3 fois.

Mammouth du PHP | 1885 Messages

14 janv. 2008, 05:57

$sql= "SELECT texte FROM annonce WHERE categorie = '" . $quoi . "' AND departement = '" . $endroit . "'";
Pourquoi utiliser la concaténation alors que la chaîne interprète déjà les variables? :)
$sql= "SELECT texte FROM annonce WHERE categorie = '$quoi' AND departement = '$endroit'";
Je trouve personnellement que c'est beaucoup plus lisible et tout aussi valable. :P
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphant du PHP | 83 Messages

14 janv. 2008, 14:47

salut

Merci à tous ça marche
grace à vous tous :
petit à petit je deviens moins petite :wink:

BYE!!

ViPHP
AB
ViPHP | 5818 Messages

14 janv. 2008, 21:36

Et bien tant mieux :)

Un plus indispensable pour grandir plus vite est de connaitre les bonnes méthodes pour débugguer le code. Il doit y avoir déjà quelques sujets à ce propos sur le forum. Jettes-y un oeil (ou même les deux), tu ne perdras pas ton temps.

Je dis ça aussi parce que tu as bien de la chance que le code fonctionne tel quel puisqu'il à été écrit sans être testé. Souvent il faut faire quelques corrections ou ajustements ici et là :wink: