[PHP] Requête PDO à modifier

  • Auteur de la discussion Auteur de la discussion salva
  • Date de début Date de début
WRInaute accro
Bonjour,

Je souhaiterais afficher les entrées de la requête ci-dessous uniquement quand
la valeur des champs "category" est égale à la catégorie de la page courante
Code:
//numéro de catégorie récuperé  sur la page courante
$num_cat = $row->category;

// la requête PDO à modifier qui affiche les entrées (quelle que soit la catégorie de la page courante)
$reponse = $bdd->query('SELECT * FROM ma_table WHERE date_creation BETWEEN date(now() - INTERVAL 12 month) AND now() ORDER BY RAND() LIMIT 3');
while ($row = $reponse->fetch())
{
 ?>
    <?php
// je récupère les différents champs de la requête initiale ($reponse) sous cette forme
$cat_ad = $row['category'];
Je patauge depuis un moment et un petit coup de main serait le bien venu.
Merci.
 
WRInaute accro
if ($cat_ad == $num_cat) {blabla}
non ?

Cela dit ça serait sans doute plus simple avec while ($row1= $reponse->fetch)
$cat_ad = $row1['category']
 
WRInaute accro
Déjà tenté, la solution se situe au niveau du while (ou avant dans la requête même).

Avec la réponse, j'affiche une sélection aléatoire de 3 annonces (titre, description, images ,...) et je reconstruis les urls adéquates, après le while.
Avec ta proposition, les urls reconstruites de la sélection comporteront bien la bonne catégorie mais elles ne corresponderont pas à la bonne url.

Je ne suis pas sûr d'être clair :)

Merci quand même.
 
WRInaute accro
Comme ceci
Code:
        <?php
        $num_ad = $row['id'];
        $cat_ad = $row['category'];
        $titre_ad = $row['title'];
          if(file_exists($_SERVER{'DOCUMENT_ROOT'}."/images/".$num_ad."a_t.jpg"))
             {
               echo "<a href='http://example.com/adid,$num_ad/catid,".$cat_ad."/'>";
               echo '<img src="http://example.com/ads/'.$num_ad.'a_t.jpg" border="0" alt="" /></a><br />';
             }
          else
             {
               echo "<a href='example.com/adid,$num_ad/catid,".$cat_ad."/'>";
               echo '<img src="http://example.com/images/nopic.gif" border="0" alt="" /></a><br />';
             }
           ?>
 
WRInaute accro
Amha le problème vient de la non différenciation des $row, essaye de faire comme je t'ai dit en différenciation $row1 et $row ?
 
WRInaute accro
Un peu HS:
- Pourquoi ne pas passer par le couple fetchAll() + foreach() ? Perso je trouve ça plus "propre" que while / fetchRow
- Tu devrais te faire une fonction pour construire tes URLs ;)
 
WRInaute accro
Marie-Aude a dit:
différenciation $row1 et $row ?
En appliquant la différenciation, l'affichage réagit comme si la seconde condition n'existait pas.
Code:
if((file_exists($_SERVER{'DOCUMENT_ROOT'}."/images/".$num_ad."a_t.jpg"))&&($cat_ad == $num_cat))
Tu y vois une erreur de syntaxe ?
 
WRInaute accro
Le voici :)
Code:
<?php
try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=xxxxxx', 'xxxxxxx', '', $pdo_options);
    $num_cat = $row->category;

    $reponse = $bdd->query('SELECT * FROM ma_table WHERE date_creation BETWEEN date(now() - INTERVAL 12 month) AND now() ORDER BY RAND() LIMIT 3');

    while ($row1 = $reponse->fetch())
    {
    ?>
        <div>
        <?php
        $num_ad1 = $row1['id'];
        $cat_ad1 = $row1['category'];
        $titre_ad1 = $row1['title'];
        $prix_ad = $row1['price'];
          if((file_exists($_SERVER{'DOCUMENT_ROOT'}."/images/".$num_ad1."a_t.jpg"))&&($cat_ad1 == $num_cat))
             {
               echo "<a href='http://www.example.com/$num_ad1/catid,".$cat_ad1."/'>";
               echo '<img src="http://www.example.com/images/'.$num_ad1.'a_t.jpg" border="0" alt="" /></a>';
             }
          else
             {
               echo "<a href='http://www.example.com/$num_ad1/catid,".$cat_ad1."/'>";
               echo '<img src="http://www.example.com//images/nopic.gif" border="0" alt="" /></a>';
             }
           ?>
        <a href="http://www.example.com/,<? echo $num_ad1; ?>/catid,<? echo $cat_ad1; ?>/" title="<? echo $titre_ad1; ?>"><? echo $titre_ad1; ?></a>
        <span style="font-weight: bold;"><? echo $prix_ad; ?> €</span>
        </div>
    <?php
    }
    $reponse->closeCursor(); // Termine le traitement de la requête
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
?>
Basez-vous sur ce dernier code (qui est nettoyé).
 
WRInaute accro
et il vient d'où le $row qui est utilisé en haut pour $num_cat ?

Parce que ça devrait marcher non ?
<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=xxxxxx', 'xxxxxxx', '', $pdo_options);
$num_cat = $row->category;

$reponse = $bdd->query('SELECT * FROM ma_table WHERE date_creation BETWEEN date(now() - INTERVAL 12 month) AND now() ORDER BY RAND() LIMIT 3');

while ($row1 = $reponse->fetch())
{
?>
<div>
<?php
if ( $row1['category'] == $num_cat {
$num_ad1 = $row1['id'];
$cat_ad1 = $row1['category'];
$titre_ad1 = $row1['title'];
$prix_ad = $row1['price'];
if((file_exists($_SERVER{'DOCUMENT_ROOT'}."/images/".$num_ad1."a_t.jpg"))&&($cat_ad1 == $num_cat))
{
echo "<a href='http://www.example.com/$num_ad1/catid,".$cat_ad1."/'>";
echo '<img src="http://www.example.com/images/'.$num_ad1.'a_t.jpg" border="0" alt="" /></a>';
}
else
{
echo "<a href='http://www.example.com/$num_ad1/catid,".$cat_ad1."/'>";
echo '<img src="http://www.example.com//images/nopic.gif" border="0" alt="" /></a>';
}
?>
<a href="http://www.example.com/,<? echo $num_ad1; ?>/catid,<? echo $cat_ad1; ?>/" title="<? echo $titre_ad1; ?>"><? echo $titre_ad1; ?></a>
<span style="font-weight: bold;"><? echo $prix_ad; ?> €</span>
</div>
<?php
}
}
$reponse->closeCursor(); // Termine le traitement de la requête
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
 
WRInaute accro
Marie-Aude a dit:
et il vient d'où le $row qui est utilisé en haut pour $num_cat ?
Il s'agit de la catégorie récupérée sur la page courante. C'est elle qui doit me servir pour effectuer la condition.

Sinon idem, l'affichage réagit normalement comme si la condition n'existait pas. C'est-à-dire, mes 3 annonces s'affichent bien mais ne sont pas issues de la même catégorie que l'annonce de la page courante (la page courante où les 3 annonces s'affichent).

spout a dit:
Regarde Exemple #1: http://www.php.net/manual/fr/pdostatement.fetchall.php
Ensuite il faut faire foreach($result as $row) {....}
Merci, je vais y jeter un oeil.
 
WRInaute accro
J'ai résolu en partie mon problème en modifiant la requête comme ci-dessous
Code:
$reponse = $bdd->query("SELECT * FROM ma_table WHERE category=".$num_cat." ORDER BY RAND() LIMIT 3");
Pas plus mal finalement si le where sur la date de création est absent.

Merci Marie-Aude et merci spout :wink:
 
Discussions similaires
Haut