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

Petit nouveau ! | 4 Messages

30 mars 2006, 10:58

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 !!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 mars 2006, 11:17

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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

30 mars 2006, 11:21

Les balises
 c'est mieux que [code] pour du PHP ;)

Petit nouveau ! | 4 Messages

30 mars 2006, 11:31

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?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 mars 2006, 11:49

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']."')";
}

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Petit nouveau ! | 4 Messages

30 mars 2006, 12:30

donc pas besoin de mettre le return false ?
if (!empty($dateposted1) AND !empty($dateposted2))
{
$requete .= " AND (dateposted BETWEEN '".$_POST['dateposted1']."' AND '".$_POST['dateposted2']."')";
}

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 mars 2006, 13:21

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Petit nouveau ! | 4 Messages

30 mars 2006, 13:31

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

Mammouth du PHP | 19672 Messages

30 mars 2006, 20:05

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 ";
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: