Page 1 sur 1

Afficher dernière entrée d'une BDD

Posté : 24 juil. 2010, 20:11
par SkaraB
Bonjour à tous,

Totalement inculte en programmation, je récupère les fichiers de mon site web et j'ai besoin d'aide pour 2 petites modifs.

La page est constituée de 2 colonnes.
- à gauche une liste verticale de clients ("client" dans la base de données) avec sous chacun le détail des prestations effectuées (que j'ai appelé "produit" dans la base de données).
- à droite, quand on clique sur un des produits de la liste, le descriptif apparaît.

Voilà ce que je voudrais faire :

- par défaut, que le dernier produit (le dernier ID de ma base) s'affiche directement sans que j'ai à cliquer sur le titre (sinon j'ai un écran vide à droite)

- à chaque fois que je clique sur le titre d'une prestation, j'aimerai qu'il se souligne (comme dans les menus), pour que le visiteur repère où il en est

Je vous joins mon code ci-après.

Un grand GRAND merci pour votre aide !!!

----
<?php 
include('action.php'); 

$Query = 'SELECT distinct client FROM 'references' ORDER BY ID DESC'; 
$dbResult = mysql_query($Query, $connexion); 

while ($voir = mysql_fetch_array($dbResult)) 
{ 

echo '<ul>'.utf8_encode($voir['client']).'<br />'; 

$Query_c = 'SELECT * FROM 'references' where client = "'.$voir['client'].'"'; 
$dbResult_c = mysql_query($Query_c, $connexion); 

while ($voir_c = mysql_fetch_array($dbResult_c)) { 

echo '<li><a href="index.php?p=6&c='.$voir_c['ID'].'">'.utf8_encode($voir_c['produit']).'</a></li>'; 

} 

echo '</ul><br />'; 

} 

mysql_close(); 
?> 
---

Re: Afficher dernière entrée d'une BDD

Posté : 24 juil. 2010, 20:56
par loboblahz
Pour ce qui concerne de voir ton dernier produit / prestation tu peux faire cette requête qui trie par décroissant sur l'ID (donc le premier est ton dernier ID)
et limité le résultat à un :
$Query = 'SELECT * FROM 'references' ORDER BY ID DESC LIMIT 0,1';
$resultPrestation = mysql_query($Query,$connexion));
Pour ce qui est de souligné dans le menu la prestation actuelle :
- Il faut créer une classe dans ton CSS
<style>
.courante{
  text-decoration:underline;
}
</style>
ensuite lorsque tu crée ta liste en PHP, tu compare si l'ID que tu affiche est l'ID passé en paramètre dans $_GET['c']
if ($voir_c['ID']==$_GET['c']){ $class = ' class="courante"'; }
echo '<li'.$class.'><a href="index.php?p=6&c='.$voir_c['ID'].'">'.utf8_encode($voir_c['produit']).'</a></li>'; 

Re: Afficher dernière entrée d'une BDD

Posté : 26 juil. 2010, 13:06
par macgawel
Pour ce qui concerne de voir ton dernier produit / prestation tu peux faire cette requête qui trie par décroissant sur l'ID (donc le premier est ton dernier ID)
et limité le résultat à un
Attention, quand même :
Si l'ID est généré par la BDD (autoincrement), ce n'est pas 100% fiable.
En effet, il peut y avoir des suppressions, et donc un nouveau produit peut avoir un ID inférieur à un produit plus ancien.

Le mieux, à mon avis, c'est de regarder par rapport à une date d'insertion.

Re: Afficher dernière entrée d'une BDD

Posté : 26 juil. 2010, 13:50
par loboblahz
Si l'ID est généré par la BDD (autoincrement), ce n'est pas 100% fiable.
En effet, il peut y avoir des suppressions, et donc un nouveau produit peut avoir un ID inférieur à un produit plus ancien.
Il n'y a pas de remplissage automatique des ID libres avec l'autoincrement, c'est simplement le numéro de l'enregistrement précédent +1.
Tu peux avoir un problème mais si tu changes manuellement l'autoincrement d'une table.
Jusqu'ici cela ne m'est arrivé que lorsque j'exportais la structure d'une table vers une autre base de données, sans les données elles même.
Dans ce cas je remet l'autoincrement de la table à 1.

Donc la méthode reste valable.

Si tu utilises la méthode d'avoir un timestamp dans un champ, tu peux avoir le fait que deux utilisateurs crée un enregistrement à la même seconde.
Quand tu n'as qu'une dizaine d'utilisateur dont ce n'est pas l'outil principal, cela est rare. Mais dès que tu as plusieurs dizaines d'utilisateurs ou que c'est
l'outil de travail principal d'une équipe (on image une hotline par exemple), là ça devient problématique pour obtenir vraiment le tout dernier au moment du chargement.

Skarab : ce serait bien, si tu pouvais redire si c'est résolu pour toi.

Re: Afficher dernière entrée d'une BDD

Posté : 26 juil. 2010, 18:29
par SkaraB
Bonjour à tous et merci pour votre participation !

Alors, concernant le point 1 : l'affichage par défaut de la dernière entrée de la base

Effectivement le dernier ID de ma base s'affiche, mais pas les autres !
J'ai donc ma liste de "clients" et seul celui du haut de la liste s'affiche.
Je me suis peut-être mal expliquée dans ma demande : la liste je veux qu'elle s'affiche entière, par contre le résultat du clic sur le nom, je voudrais que le dernier s'affiche par défaut.

Je vous propose d'aller voir directement sur le site : http://nelacomm.com/index.php?p=6

On y voit bien une liste de clients et d'actions menées pour chacun d'eux.
Quand on clique dans une prestation (par exemple pour Ludivine "création d'un blog"), le détail apparaît à droite.

J'aimerai en fait que par défaut, le détail du dernier client saisi dans la base s'affiche.
Plutôt que d'avoir cette page vide à droite.

Concernant le point 2 : le fait que la prestation qui est choisie par l'internaute soit soulignée
Ça ne fonctionne pas non plus...
Je n'ai pas de chance...

J'ai bien saisi les infos dans le fichier css, puis dans le php.
Mais il ne se passe rien...
Je voudrai que le nom de la prestation se souligne quand elle apparaît à droite.

Peut-être que dans le css je l'ai mis au mauvais endroit... Je l'ai mis tout en bas.

Je vous laisse regarder.

Encore merci pour tout !

----

@charset "utf-8";

* {
margin : 0px;
padding : 0px;
}

img {
border:none;
}

body {
font-family:Arial;
text-align: left;
background: #111011 url(images/css/background.jpg) repeat-y top left;
font-size:1em;
line-height: 1.25 !important;
}

#global {
width: 100%;
height: 100%;
/*
margin-left: auto;
margin-right: auto;
*/
}

#affichage {
width: 1004px;
height: 700px;

/*margin-left: auto;
margin-right: auto;

text-align: left;*/ /* pour corriger le bug de centrage IE */
background: #111011 url(images/css/fond.jpg) no-repeat top left;
}

h1 {
font-size:14px;
font-weight:bold;
}
h2 {
font-size:12px;
font-weight:normal;
}
h3 {
font-size:13px;
font-weight:normal;
}
h4 {
font-size:12px;
font-weight:normal;
}
h5 {
font-size:11px;
font-weight:normal;
}

h3 a:active{font-size:12px; color:#000000; text-decoration:none;}
h3 a:visited{font-size:12px; color:#000000; text-decoration:none;} /*lien visité*/
h3 a:hover{font-size:12px; color:#000000; text-decoration:none;} /*le curseur de l'internaute passe sur le lien */
h3 a:link{font-size:12px; color:#000000; text-decoration:none;} /*lien normal, non visité*/

li a:active{font-size:12px; color:#000000; text-decoration:none;}
li a:visited{font-size:12px; color:#000000; text-decoration:none;} /*lien visité*/
li a:hover{font-size:12px; color:#000000; text-decoration:none;} /*le curseur de l'internaute passe sur le lien */
li a:link{font-size:12px; color:#000000; text-decoration:none;} /*lien normal, non visité*/

li {
font-size: 100%;
color: white;
list-style-type: none;
background-image: url(images/css/puce.png);
background-repeat: no-repeat;
background-position: 0 0.32em;
padding-left: 15px;
}

<style>
.courante{
text-decoration:underline;
}
</style>

----

Re: Afficher dernière entrée d'une BDD

Posté : 26 juil. 2010, 21:42
par loboblahz
Concernant ton css
1 - Enlève les balises <style> et </style> je les avaient mise au cas ou tu n'aurais pas de fichier css
2 - plutôt que de mettre ".courante {" met plutôt ".courante a{"

Cela devrait corrigé ton problème de souligné.

Maintenant si tu veux voir toutes les prestations pour un client mais dans l'ordre décroissant, enlève dans ta requête LIMIT 0,1
C'est cette partie qui limite la recherche à te renvoyer un seul enregistrement dans la base.

pour l'affichage de la dernière prestation pour le dernier client lorsque aucun client n'est sélectionné :

$clientId  = mysql_real_escape_string($_GET['c']);
if (!isset($_GET['c'])){
  $Query = "SELECT * FROM references ORDER BY ID DESC LIMIT 0,1"; // Dernière prestation sans prendre en considération le client
}else{
   $Query = "SELECT * FROM references WHERE client='$clientId' ORDER BY ID DESC"; // Prestations pour le client choisi
}

$resultPrestation = mysql_query($Query_c, $connexion); 

Re: Afficher dernière entrée d'une BDD

Posté : 27 juil. 2010, 11:02
par SkaraB
Encore merci pour ton aide !

J'ai essayé les manips pour le souligné, et il se passe un truc très bizarre !

J'ai corrigé le code dans le css comme tu me le dis, en enlevant style et en rajoutant un a.
Avec ces modifs il ne se passait rien.

Ensuite dans le fichier .php, j'ai également rajouté un a après courante dans le "if....".
Il ne se passait toujours rien.

Du coup, j'ai enlevé les a des deux côtés et là, TOUS les liens sont soulignés par défaut (en blanc, je ne sais pas pourquoi) !
Et le truc c'est que ceux qui ont déjà été cliqué ne sont plus soulignés...

Je te renvoie le php et le css pour que tu vois.
J'essaye l'autre manip concernant l'affichage.

LE PHP :

<?php
include('action.php');

$Query = 'SELECT distinct client FROM `references` ORDER BY ID DESC';
$dbResult = mysql_query($Query, $connexion);

while ($voir = mysql_fetch_array($dbResult))
{

echo '<ul>'.utf8_encode($voir['client']).'<br />';

$Query_c = 'SELECT * FROM `references` where client = "'.$voir['client'].'"';
$dbResult_c = mysql_query($Query_c, $connexion);

while ($voir_c = mysql_fetch_array($dbResult_c)) {

if ($voir_c['ID']==$_GET['c']){ $class = ' class="courante"'; }
echo '<li'.$class.'><a href="index.php?p=6&c='.$voir_c['ID'].'">'.utf8_encode($voir_c['produit']).'</a></li>';
}
echo '</ul><br />';
}

mysql_close();
?>


LE CSS :


@charset "utf-8";

* {
margin : 0px;
padding : 0px;
}

img {
border:none;
}

body {
font-family:Arial;
text-align: left;
background: #111011 url(images/css/background.jpg) repeat-y top left;
font-size:1em;
line-height: 1.25 !important;
}

#global {
width: 100%;
height: 100%;
/*
margin-left: auto;
margin-right: auto;
*/
}

#affichage {
width: 1004px;
height: 700px;

/*margin-left: auto;
margin-right: auto;

text-align: left;*/ /* pour corriger le bug de centrage IE */
background: #111011 url(images/css/fond.jpg) no-repeat top left;
}

h1 {
font-size:14px;
font-weight:bold;
}
h2 {
font-size:12px;
font-weight:normal;
}
h3 {
font-size:13px;
font-weight:normal;
}
h4 {
font-size:12px;
font-weight:normal;
}
h5 {
font-size:11px;
font-weight:normal;
}

h3 a:active{font-size:12px; color:#000000; text-decoration:none;}
h3 a:visited{font-size:12px; color:#000000; text-decoration:none;} /*lien visité*/
h3 a:hover{font-size:12px; color:#000000; text-decoration:none;} /*le curseur de l'internaute passe sur le lien */
h3 a:link{font-size:12px; color:#000000; text-decoration:none;} /*lien normal, non visité*/

li a:active{font-size:12px; color:#000000; text-decoration:none;}
li a:visited{font-size:12px; color:#000000; text-decoration:none;} /*lien visité*/
li a:hover{font-size:12px; color:#000000; text-decoration:none;} /*le curseur de l'internaute passe sur le lien */
li a:link{font-size:12px; color:#000000; text-decoration:none;} /*lien normal, non visité*/

li {
font-size: 100%;
color: white;
list-style-type: none;
background-image: url(images/css/puce.png);
background-repeat: no-repeat;
background-position: 0 0.32em;
padding-left: 15px;
}

.courante{
text-decoration:underline;
}

Re: Afficher dernière entrée d'une BDD

Posté : 27 juil. 2010, 11:17
par SkaraB
Bon bah je pense que c'est juste impossible...
Le nouveau php ne fonctionne pas non plus...

C'est le descriptif de mon dernier ID que je voudrais voir apparaître à droite tant que l'on a rien sélectionné.
Du coup, à chaque fois que je rajouterai un nouvel ID ce sera lui qui s'affichera.

Peut-être qu'il y a une confusion dans les noms des colonnes de la BDD ?
Voici dans ma base comment c'est foutu :
- Colonne 1 : ID (n'apparaît pas sur le site)
- Colonne 2 : client (il y a un tri pour que le client n'apparaisse qu'une seule fois même s'il a plusieurs prestations), les noms apparaissent sous forme de liste
- Colonne 3 : produit (ça c'est le nom de la prestation qui apparaît aussi sous forme de liste sous chaque client)
- Colonne 4 : descriptif (c'est le résultat de la requête lorsque je clique sur un produit)

C'est le descriptif que je voudrais voir s'afficher par défaut.
Donc le descriptif du dernier ID.

Mais du coup, avec cette histoire de souligné, il faudra que le produit rattaché à ce descriptif soit souligné également par défaut.

Je te joins à nouveau le PHP dans lequel j'ai inclus tes modifs.

Merci encore !!!


<?php
include('action.php');

$Query = 'SELECT distinct client FROM `references` ORDER BY ID DESC';
$dbResult = mysql_query($Query, $connexion);

while ($voir = mysql_fetch_array($dbResult))
{

echo '<ul>'.utf8_encode($voir['client']).'<br />';


$Query_c = 'SELECT * FROM `references` where client = "'.$voir['client'].'"';
$dbResult_c = mysql_query($Query_c, $connexion);

$clientId = mysql_real_escape_string($_GET['c']);
if (!isset($_GET['c'])){
$Query = "SELECT * FROM references ORDER BY ID DESC LIMIT 0,1"; // Dernière prestation sans prendre en considération le client
}else{
$Query = "SELECT * FROM references WHERE client='$clientId' ORDER BY ID DESC"; // Prestations pour le client choisi
}

$resultPrestation = mysql_query($Query_c, $connexion);

while ($voir_c = mysql_fetch_array($dbResult_c)) {

if ($voir_c['ID']==$_GET['c']){ $class = ' class="courante"'; }
echo '<li'.$class.'><a href="index.php?p=6&c='.$voir_c['ID'].'">'.utf8_encode($voir_c['produit']).'</a></li>';
}

echo '</ul><br />';
}

mysql_close();
?>