Page 1 sur 1

Problème d'exécution et d'affichage de requête

Posté : 30 mars 2006, 10:58
par gabyloux
Bonjour,

je souhaiterais savoir ce qui ne va pas dans mon code !
j'ai mis en place un formulaire de recherche à plusieurs critères.
j'arrive à récupérer les données choisies mais j'ai l'impression que la requête ne s'exécute pas et ne s'affiche pas !

Code de la requête
$requete = "SELECT id_ads, id_catg, id_subcatg, id_localisation, title, cdesc, prize, submitter, email, website, dateposted "; 
$requete .= " FROM ".$prefix."_ads_ads WHERE "; 
$requete .= " catgforprocess = '".$_POST['catgforprocess']."'"; 
$requete .= " AND (id_localisation = '".$_POST['id_localisation1']."' OR  id_localisation = '".$_POST['id_localisation2']."' OR  
id_localisation = '".$_POST['id_localisation3']."')"; 
if (empty($dateposted1) OR empty($dateposted2)) 
{ return false; 
} else {$requete .= " AND (dateposted BETWEEN '".$_POST['dateposted1']."' AND '".$_POST['dateposted2']."')"; 
}$requete .= " ORDER BY id_ads DESC ";  
Code de l'exécution et de l'affichage de la requête
$resultads = $db->sql_query($requete); 
    $totalads = $db->sql_numrows($resultads); 
    if ($totalads == 0) { 
        echo "<BR><center><b>"._NOADSAVAIL."</b><BR><BR><a href="javascript:history.go(-1);">Retour</a></center>"; 
    } else {$j = 0; 
    while (list($id_ads,$title,$cdesc,$prize,$submitter,$email,$website,$dateposted) = $db->sql_fetchrow($resultads)) 
    $j++; }                
echo "".$id_ads.""; 
echo "".$title.""; 
echo "".$cdesc.""; 
echo "".$prize.""; 
echo "".$submitter.""; 
echo "".$email.""; 
echo "".$website.""; 
echo "".$dateposted."";  


Merci à tous ceux qui pourront m'aider !!

Posté : 30 mars 2006, 11:17
par Truc
Salut,

Affiche la requete générée avec un simple echo puis exécute la dans phpmyadmin par exemple pour vérifier le retour.
echo $requete;
après la construction complète biensur :wink:

Posté : 30 mars 2006, 11:21
par ouckileou
Les balises
 c'est mieux que [code] pour du PHP ;)

Posté : 30 mars 2006, 11:31
par gabyloux
un echo sur ma requete récupère bien les données choisies dans le formulaire
j'obtiens ceci
SELECT id_ads, id_catg, id_subcatg, id_localisation, title, cdesc, prize, submitter, email, website, dateposted FROM nuke_ads_ads WHERE catgforprocess = '3_3' AND (id_localisation = '91' OR id_localisation = '92' OR id_localisation = '71') AND (dateposted BETWEEN '2006-01-02' AND '2006-03-28') ORDER BY id_ads DESC
je me suis rendue compte qu'il ne reconnait pas "catgforprocess" car ce n'est pas un champ mais une variable qui fait la concaténation entre "id_catg" et "id_subcatg", c'est pour celà que j'ai "3_3".

comment puis je contourner ce problème pour qu'il puisse faire correctement la requete?

Posté : 30 mars 2006, 11:49
par Truc
je me suis rendue compte qu'il ne reconnait pas "catgforprocess" car ce n'est pas un champ mais une variable qui fait la concaténation entre "id_catg" et "id_subcatg", c'est pour celà que j'ai "3_3".

comment puis je contourner ce problème pour qu'il puisse faire correctement la requete?
Et bien faudrait savoir ce que tu attends vraiment, tu nous dis que ce n'est pas correct mais on ne sait pas ce qui l'est :wink:

En passant pour éviter des tests avec un instruction vide on retourne les conditions (avec la négation => ! ):
if (!empty($dateposted1) AND !empty($dateposted2))
{
   $requete .= " AND (dateposted BETWEEN '".$_POST['dateposted1']."' AND '".$_POST['dateposted2']."')";
}

Posté : 30 mars 2006, 12:30
par gabyloux
donc pas besoin de mettre le return false ?
if (!empty($dateposted1) AND !empty($dateposted2))
{
$requete .= " AND (dateposted BETWEEN '".$_POST['dateposted1']."' AND '".$_POST['dateposted2']."')";
}

Posté : 30 mars 2006, 13:21
par Truc
Apparemment il s'agit d'une classe qui doit renvoyer une valeur.

Il faut donc renvoyer "faux" dans le cas ou ces deux varaibles ne sont pas renseignées. Par contre le test n'est peut être pas forcément à la bonne place pour faciliter la compréhension c'est pour cela que j'ai confondu d'ailleurs (si si c'est vrai :^o )

Plus dans ce style:
if (!empty($dateposted1) AND !empty($dateposted2))
{
   $requete = "SELECT id_ads, id_catg, ... AND '".$_POST['dateposted2']."') ORDER BY id_ads DESC ";
}
else 
   return false;
mais bon c'est pas le problème pour l'instant. Tu n'as pas répondu à la question (remarque):
faudrait savoir ce que tu attends vraiment, tu nous dis que ce n'est pas correct mais on ne sait pas ce qui l'est

Posté : 30 mars 2006, 13:31
par gabyloux
mon problème se trouve au niveau de "catgforprocess" (ce n'est pas un champ) qui est la concaténation de mes champs id_catg et id_subcatg

donc il faut que je trouve un moyen de lui faire comprendre qu'il s'agit des deux champs précédents et de prendre en compte en même temps le choix fait dans la liste déroulante qui a pour nom "catgforprocess" dans le formulaire

je crois que j'ai trouvé une piste mais ça ne me renvoie aucune information
j'ai l'impression qu'il n'arrive pas à comprendre la concaténation !
avez vous des idées ?
$requete = "SELECT id_ads, id_catg, id_subcatg, id_localisation, title, cdesc, prize, submitter, email, website, dateposted ";

$requete .= " FROM ".$prefix."_ads_ads WHERE ";
$requete .= " ((id_catg +'_'+ id_subcatg) = '".$_POST['catgforprocess']."')";
$requete .= " AND (id_localisation = '".$_POST['id_localisation1']."' OR  id_localisation = '".$_POST['id_localisation2']."' OR id_localisation = '".$_POST['id_localisation3']."')";
if (empty($dateposted1) OR empty($dateposted2))
{ return false;
} else {
$requete .= " AND (dateposted BETWEEN '".$_POST['dateposted1']."' AND '".$_POST['dateposted2']."')";
}
$requete .= " ORDER BY id_ads DESC ";
j'obtiens ça comme echo de ma requete
SELECT id_ads, id_catg, id_subcatg, id_localisation, title, cdesc, prize, submitter, email, website, dateposted FROM nuke_ads_ads WHERE ((id_catg +'_'+ id_subcatg) = '3_3') AND (id_localisation = '91' OR id_localisation = '92' OR id_localisation = '71') AND (dateposted BETWEEN '2006-01-02' AND '2006-03-28') ORDER BY id_ads DESC

Posté : 30 mars 2006, 20:05
par Cyrano
Essaye avec CONCAT :
<?php
$requete = "SELECT id_ads, id_catg, id_subcatg, id_localisation, title, cdesc, prize, submitter, email, website, dateposted ";

$requete .= " FROM ".$prefix."_ads_ads WHERE ";
$requete .= " (CONCAT(id_catg,'_', id_subcatg) = '".$_POST['catgforprocess']."')";
$requete .= " AND (id_localisation = '".$_POST['id_localisation1']."' OR  id_localisation = '".$_POST['id_localisation2']."' OR id_localisation = '".$_POST['id_localisation3']."')";
if (empty($dateposted1) OR empty($dateposted2))
{
    return false;
}
else
{
    $requete .= " AND (dateposted BETWEEN '".$_POST['dateposted1']."' AND '".$_POST['dateposted2']."')";
}
$requete .= " ORDER BY id_ads DESC ";
?>