HELP CODAGE / Affichage différent selon résultats requête

[Résolu]
Signaler
Messages postés
24
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2005
-
Messages postés
24
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2005
-
Bonjour à tous,

Et une galère de plus

J'ai une base de données plutôt simple avec les champs classiques (Nom, Prénom, Rue, ...., Premium).
J'aimerais lorsque je lance une requête s/un département par exemple que l'affichage des résultats de la requête commence par les données dont le champs "premium" = 1 avec un format tableau comme ci-dessous et que les autres données soit affichées en liste classique... tout en conservant mon affichage page par page.

Ci-joint mon codage actuel qui me donne les résultats avec un affichage sous forme de tableau spécifique mais je n'arrive pas à faire à ce que les données "premium"= 0 ne s'affichent pas de la même façon.

Pour faire simple, je veux que les résultats "premium" s'affichent dans un tableau avec couleur et que les autres "non premium" s'affichent en liste normale.

Merci d'avance pour toutes vos pistes car je commence à m'exciter grâve

Wynelle.

Ps : Désolé si ce n'est pas super bien codé, je n'ai aucun mérite car je m'inspire à gauche à droite ;-)

<?php
//partie de connexion a la bdd
$serveur = "localhost";
$login = "root";
$pass = "";
$connexion = mysql_connect( $serveur, $login, $pass );
mysql_select_db( "portail-bnb", $connexion );


$nb_results_p_page = 10; // nombre de résultats par page
$nb_avant = 3; // nombre de page avant la page courante
$nb_apres = 3; // nombre de page après la page courante
$premiere = 1; // aficher le lien "première page" (1 ou 0)
$derniere = 0; // afficher le lien "dernière page" (1 ou 0)
$courant = empty($_GET['page']) ? 1 : $_GET['page']; // page
$start = ($courant - 1) * $nb_results_p_page; // start (requete mysql)


// comptage du nombre de lignes de la base
$result = mysql_query("SELECT count(ID) FROM bnb_inscrits WHERE CP>=29000 AND CP<30000 AND TYPE!='G');
if(!$result)
{
// redirection erreur
header("location: erreur.php");
exit;
}
$ret = mysql_fetch_array($result);
// nombre de lignes
$nb_results = $ret[0];


// exemple de requete
$result = mysql_query("SELECT ID,INTITULE,CP,VILLE,TEL,URL,DESCRIPTIF_LISTE,AFFILIATION,CLASSIFICATION,REPAS, PREMIUM FROM bnb_inscrits WHERE CP>=29000 AND CP<30000 AND TYPE!='G' ORDER BY `CP` ASC,`INTITULE` ASC LIMIT $start, $nb_results_p_page");


//=========================================
// si on a récupéré un resultat on l'affiche.
//=========================================
if($nb_results) {
// debut du tableau


echo ''."\n";

// lecture et affichage des résultats sur 2 colonnes

while($row = mysql_fetch_array($result)) {

echo '<table bordercolor="#FFFFFF" border="0" cellpadding="1" width="495">';
echo '----
';
echo ', [' . $_SERVER['SCRIPT_NAME'] . ' Première]&nbsp;&nbsp;';

// page précédente
if($courant > 1)
echo '[' . $_SERVER['SCRIPT_NAME'] . '?page=' . ($courant - 1) . ' Précédente]&nbsp;&nbsp;';


// affichage des numéros de page
for($i = $courant - $avant; $i <= $courant + $apres; $i++)
{
// page courante
if($i == $courant)
echo '' . $i . '&nbsp;&nbsp;';
else
echo '[' . $_SERVER['SCRIPT_NAME'] . '?page=' . $i . ' ' . $i . ']&nbsp;&nbsp;';
}


// page suivante
if($courant < $nb_pages)
echo '[' . $_SERVER['SCRIPT_NAME'] . '?page=' . ($courant + 1) . ' Suivante]&nbsp;&nbsp;';

if($derniere && $courant + $apres < $nb_pages)
echo '[' . $_SERVER['SCRIPT_NAME'] . '?page=' . $nb_pages . ' Dernière]&nbsp;&nbsp;';


?>

2 réponses

Messages postés
64
Date d'inscription
mardi 14 janvier 2003
Statut
Membre
Dernière intervention
5 août 2005

Je n'ai pas bien
compris si tu souhaites avoir des tableaux différents selon la valeur
du champ "premium" ou si il s'agit simplement des lignes d'un seul et
même tableau qui doivent être présentées différemment.



Dans le premier cas, la solution la plus facile est de lancer deux requêtes SQL successives. Une première avec la clause WHERE premium=1 et la seconde avec la clause WHERE premium NOT = 1.
Tu auras donc deux jeux d'enregistrements que tu pourras afficher comme
tu le souhaites. Afin de garder ta présentation par page, lance d'abord
la requête SELECT COUNT(*) sur ta table afin de connaitre le nombre total d'enregistrements.



Dans le second cas, il te suffit d'ajouter un test dans ta boucle "while"

Ce qui en substance donnera



echo "\";

while($row = mysql_fetch_array($result))

{

if ($row[\"PREMIUM\"]==1)

{

echo \";

}

else

{

echo \";

}

echo\"----
";

echo $row["VILLE"];

echo ", \";

}

Voici une fonction
qui peut t'être utile. Elle lance une requête sur une base de données
et renvoi une matrice. Il suffit alors de la parcourir par deux boucles
for imbriqués afin de faire varier les indices de ligne et de colonne.

function Select($champs,$tables,$conditions,$group,$order,$nbrec,$liminf)

/* Effectue une requête SELECT sur la table choisie

RETOUR: une matrice (nbre de records X nbre de champs)

false en cas d'échec ou 0 enregistrement



$champs = une liste des champs séparés par ,

$tables = une liste des tables séparées par , avec alias si nécessaire

$conditions = liste des conditions séparés par des opérateurs logiques

$group = champ(s) sur le(s)quel(s) sera effectué un regroupement

$order = champ(s) sur le(s)quel(s) seront triés les enregistrements

(+ ASC pour croissant et DESC pour décroissant)

$liminf = index du premier enregistrement de l'intervalle à retourner

$nbrec = nombre d'enregistrements à retourner

*/

{

//Connexion à localhost

$id_connect = mysql_connect( $serveur, $login, $pass );
mysql_select_db( \"portail-bnb\", $connexion );

//Création de la requête

$query=\"SELECT $champs

FROM $tables\";

if(!empty($conditions))

{

$query=$query.\" WHERE $conditions\";

}

if(!empty($group))

{

$query=$query.\" GROUP BY $group\";

}

if(!empty($order))

{

$query=$query.\" ORDER BY $order\";

}

if(!empty($nbrec))

{

if(!empty($liminf))

{

$query=$query.\" LIMIT $liminf, $nbrec\";

}

else

{

$query=$query.\" LIMIT $nbrec\";

}

}

//Exécution de la requête

if(id_connect != false)

{

$res=@mysql_query($query, $id_connect);

if (empty($res))

{

return false;

}

else

{

$nbRows=@mysql_num_rows($res);

if ($nbRows==0)

{

return false;

}

else

{

for($i=0;$i<$nbRows;$i++)

{

$enregs[$i]=@mysql_fetch_array($res,MYSQL_NUM);

}

return $enregs;

}

}

}

else

{

return false;

}

}

Parcours de la matrice

$res=Select($champs,$tables,$conditions)

echo \"<table>\";

for($i=0;$i<count($res);$i++)

{

echo \"----
\";

for($j=0;$j<count($res[$i]);$j++)

{

echo \"".$res[$i][$j].", \";

}

echo \"\";

}

echo "
";



Rien ne t'empêche alors de placer le nombre d'enregistrement par page dans la condition : $i=0;$i<$limite_par_page;$j++



Bon courage


Jean Poldeux



Petit conseil : Essaye d'utiliser les feuilles de
styles (CSS). Ta mise ne page est alors totalement indépendante de ton
code PHP et tu n'as plus qu'à utiliser les attributs "class" ou "id"
dans tes balises HTML.
Messages postés
24
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2005

Merci JeanPoldeux,

Cela semble si simple quand on maîtrise son sujet.

Finalement, c'est la toute première suggestion qui a été retenue... et qui fonctionne.

Un grand merci.

Wynelle.