Page 1 sur 1
Besoin d'aide for()
Posté : 24 oct. 2011, 00:09
par VisualDev
Bonjour à tous, je me présent, dimitri54g !
Je suis le créateur de Visual Development :
http://www.visualdevelopment.fr
Je ne sais pas comment expliquer mais je veux faire un code, j'espère que vous comprendrez
http://pastebin.com/7BMNmdtg
Re: Besoin d'aide for()
Posté : 24 oct. 2011, 07:33
par xTG
Un boucle for sert à parcourir un ensemble d'éléments en général, or là tu n'en as aucun.
Tes variables $ID_db et $Titre sont écrasées à chaque itération de ta boucle while.
Mais pourquoi avoir fait une boucle for alors que tu pouvais faire ce traitement dans ta boucle while ??
Re: Besoin d'aide for()
Posté : 24 oct. 2011, 11:23
par VisualDev
Je sais pas si je te l'ai dit mais je suis débutant
Je veux faire que si le lien correspond à l'id de l'article, que l'on ne mette pas de lien correspondant à cet article et que les autres, le soivent.
Re: Besoin d'aide for()
Posté : 24 oct. 2011, 12:09
par Mazarini
Bonjour,
Pourrais tu nous mettre un morceau du code à modifier (je n'ai pas accès aux images de ton post)
Il faut que tu trouve un moyen d'identifier l'article en cours. Tu peux utiliser l'url complète (voir la variable $_SERVEUR) ou le numéro de l'article (voir variable $_POST ou $_GET). Ensuite un simple if dans la boucle d'affichage devrait suffire.
Re: Besoin d'aide for()
Posté : 24 oct. 2011, 12:40
par VisualDev
$articleData = null;
if (isset($_GET['id']) && is_numeric($_GET['id']))
{
$id = intval($_GET['id']); // On choisis un article selon le paramètre $_GET
$getNews = dbquery("SELECT * FROM site_news WHERE id = '" . $id . "' LIMIT 1");
if (mysql_num_rows($getNews) > 0)
{
$articleData = mysql_fetch_assoc($getNews);
}
}
else
{
$getNews = dbquery("SELECT * FROM site_news ORDER BY timestamp DESC LIMIT 1");
if (mysql_num_rows($getNews) > 0)
{
$articleData = mysql_fetch_assoc($getNews);
}
}
$tpl->Init(); // Initiation de la page
$tpl->AddGeneric('head-init');
$tpl->AddIncludeFile(new IncludeFile('text/css', WWW . '/style.css', 'stylesheet'));
$tpl->WriteIncludeFiles();
$tpl->AddGeneric('head-bottom');
$tpl->AddGeneric('barre'); // Menu + Login
$newslist = new Template('comp-newlist'); // Liste des articles
$article = new Template('comp-newsarticle');
$newslist->SetParam('mode', 'recent');
if ($articleData != null)
{
$newslist->SetParam('name', $articleData['title']);
$newslist->SetParam('id_article', $articleData['id']);
ça suffira ?
J'ai encore le code de mon TPL
/*for ($i = 1; $i <= $value; $i++){
if ($i != $id_article) {
echo'<a href="' . WWW . '/article.php?id=' . $ID_db . '">' . $Titre . '</a> ';
}
else { echo"<li class='new'>" . $name . "</li>"; }
}*/
if ($mode == 'recent')
{
for ($i = 0; $i < 6; $i++)
{
$sectionName = '';
$sectionCutoffMax = 0;
$sectionCutoffMin = 0;
switch ($i)
{
case 0:
$sectionName = 'Aujourd\'hui';
$sectionCutoffMax = time();
$sectionCutoffMin = time() - 86400;
break;
case 1:
$sectionName = 'Hier';
$sectionCutoffMax = time() - 86400;
$sectionCutoffMin = time() - 172800;
break;
case 2:
$sectionName = 'Ce week-end';
$sectionCutoffMax = time() - 172800;
$sectionCutoffMin = time() - 604800;
break;
case 3:
$sectionName = 'La semaine dernière';
$sectionCutoffMax = time() - 604800;
$sectionCutoffMin = time() - 1209600;
break;
case 4:
$sectionName = 'Ce mois-ci';
$sectionCutoffMax = time() - 1209600;
$sectionCutoffMin = time() - 2592000;
break;
case 5:
$sectionName = 'Le mois dernièr';
$sectionCutoffMax = time() - 2592000;
$sectionCutoffMin = time() - 5184000;
break;
}
$q = "SELECT * FROM site_news WHERE timestamp >= " . $sectionCutoffMin . " AND timestamp <= " . $sectionCutoffMax . " ORDER BY timestamp DESC";
$getArticles = dbquery($q);
if (mysql_num_rows($getArticles) > 0)
{
echo '<h2>' . $sectionName . '</h2>
<ul>';
while ($a = mysql_fetch_assoc($getArticles))
{
echo '<li class="new">
<a href="%www%/article.php?id=' . $a['id'] . '" class="article-' . $a['id'] . '">' . clean(decode($a['title'])) . ' »</a>
</li>';
}
echo '</ul>';
}
}
}
Re: Besoin d'aide for()
Posté : 24 oct. 2011, 13:43
par moogli
salut,
tu veux supprimer l'article en cours dans la liste en bas du fichier tpl ?
Si oui autant l'exclure du jeux de résultat que retourne le SGBD en l'indiquant dans la clause where ( id<> ideresultat)
d'ailleurs tu pourrais utiliser l'opérateur
between dans ta requête SQL.
ce qui donnerais (par exemple) :
<?php
sql = 'SELECT * FROM site_news WHERE timestamp >= " . $sectionCutoffMin . " AND timestamp <= " . $sectionCutoffMax . " and id<> '.$_GET['id'].'ORDER BY timestamp DESC';
// ou
sql = 'SELECT * FROM site_news WHERE timestamp between ' . $sectionCutoffMin . ' AND ' . $sectionCutoffMax . " and id<> '.$_GET['id'].'ORDER BY timestamp DESC';
?>
si bien entendu tu a dans l'url id=456 où 456 est la clef primaire de la table en question (que j'ai appelé ici "id" mais c'est seulement par "habitude" et abut de langage).
@+
Re: Besoin d'aide for()
Posté : 24 oct. 2011, 14:33
par Mazarini
echo '<li class="new">
<a href="%www%/article.php?id=' . $a['id'] . '" class="article-' . $a['id'] . '">' . clean(decode($a['title'])) . ' »</a>
</li>';
A mon avis, c'est dans cette partie qu'il faut intervenir pour faire un affichage sans le lien dans le cas ou $a['id'] correspond à l'article en cours
Ca donne quelque chose comme :
if (isset($GLOBALS["id_article"])
{
$id = $GLOBALS["id_article"];
}
else
{
$id = 0;
}
while ($a = mysql_fetch_assoc($getArticles))
{
if ($a['id']==$id)
{
echo '<li class="new">' . clean(decode($a['title'])) . ' »</li>';
}
else
{
echo '<li class="new">
<a href="%www%/article.php?id=' . $a['id'] . '" class="article-' . $a['id'] . '">' . clean(decode($a['title'])) . ' »</a>
</li>';
}
}
echo '</ul>';
Il faut cependant définir $GLOBALS["id_article"] dans la page qui affiche l'article.
Re: Besoin d'aide for()
Posté : 24 oct. 2011, 22:48
par VisualDev
Merci de ton aide, j'ai simplifier les $GLOBALS par $article_id
if ($id_article > 0)
{
$id = $id_article;
}
while ($a = mysql_fetch_assoc($getArticles))
{
if ($a['id']==$id)
{
echo '<li class="article">' . clean(decode($a['title'])) . ' »</li>';
}
else
{
echo '<li class="new">
<a href="%www%/article.php?id=' . $a['id'] . '" class="article-' . $a['id'] . '">' . clean(decode($a['title'])) . ' »</a>
</li>';
}
}