Menu news

Résolu
cs_skit Messages postés 54 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 23 septembre 2009 - 15 juil. 2008 à 06:12
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 - 15 juil. 2008 à 17:05
Bonsoir à tous.

<?
$news=mysql_query("
        (SELECT Timestamp, Titre, Text FROM ".$extensionSQL."article)
        UNION
        (SELECT Timestamp, Titre, Text FROM ".$extensionSQL."communiques)
        UNION
        (SELECT Timestamp, Titre, Text FROM ".$extensionSQL."actions)
        UNION
        (SELECT Timestamp, Titre, Text FROM ".$extensionSQL."agenda)
        UNION
        (SELECT Timestamp, Titre, Text FROM ".$extensionSQL."passages)
        UNION
        (SELECT Timestamp, Titre, Text FROM ".$extensionSQL."tracts)
        ORDER BY Timestamp LIMIT 5
    ");
while($news2=mysql_fetch_array($news))
{
    echo substr(stripslashes($news2['Text']),0,30)."
";
}

?>

Voici un module de mon site qui me pose problème.
Je vous explique brièvemet; j'ai diverses sections (agenda, articles,...) et je fais un menu à gauche qui reprend tous les évènements postés dans ces sections et les classe par ordre décroissant de Timestamp (date à laquelle l'évènement est créé).
J'ai donc unifié toutes ces tables par ordre de Timestamp et j'affiche les titres et les textes des 5 premiers (d'où la limite).
Pour les textes, je souhaite afficher juste les 30 premiers caractères; j'ai donc utilisé un substr mais voila le premier problème qui se pose; mes codes sont coupés. Quand j'ai un et qu'il est coupé alors je me retrouve avec un bête <a h ou encore dans certains cas je me retrouve avec un &eacu ce qui est plutôt ridicule et je ne sais pas comment éviter ça.
C'est mon premier problème, apparemment substr n'est pas la fonction la plus appropriée pour ça.
Ensuite j'aimerai ne sélectionner que le texte car je me vois mal afficher une image ou une vidéo dans cette petite barre mais je ne connais pas de fonction php et je n'en trouve pas qui ne permet que de sélectionner le texte.

Merci de bien vouloir m'aider  ;)

10 réponses

Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
15 juil. 2008 à 14:14
Tu fais strip_tags( ), puis html_entity_decode( ), puis substr( ), puis encore  html_entities( ) si tu le souhaites.
à+
3
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
15 juil. 2008 à 11:42
Salut,

tu cherches peut-être strip_tags( )

http://fr3.php.net/strip-tags

à+
0
cs_skit Messages postés 54 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 23 septembre 2009
15 juil. 2008 à 14:04
Merci beaucoup. Seuls hic; ça ne m'aide pas pour mes caractères spéciaux. (et puis ça affichera les URLs, parfois incomplètes, des images et vidéos)
0
cs_skit Messages postés 54 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 23 septembre 2009
15 juil. 2008 à 14:54
J'ai du mal à comprendre ton raisonnement.

Bon je prends par exemple:
[test.php salut]
Bonjour &eacute;coutez tous!

Je fais un strip tags()
salut Bonjour &eacute;coutez tous!
Je fais un html_entity_decode()
salut Bonjour &eacute;coutez tous!
Je fais un substr()
salut Bonjour &eacu
Je fais un html_entities()
salut Bonjour &eacu
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
15 juil. 2008 à 15:11
Normalement :

$string =  html_entity_decode('salut Bonjour &eacute;coutez tous!');

et là on a $string == 'salut Bonjour écoutez tous!'

et du coup le substr peut marcher.

Et c'est htlmentities( ), j'ai mis un "_" en trop
0
cs_skit Messages postés 54 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 23 septembre 2009
15 juil. 2008 à 16:06
Il ne reconnait pas la fonction htmlentities() (bizarre)
Mais malgré tout le résultat est exactement ce que j'attendais; merci beaucoup pour cette réponse claire et rapide
0
cs_skit Messages postés 54 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 23 septembre 2009
15 juil. 2008 à 16:41
Bon j'ai un autre petit problème auquel je n'avais pas pensé.

Chaque évènement a un ID généré dans sa table et chaque table correspond à une page (par exemple: la table Site_agenda reprend les évènements de la page agenda.php où je peux isoler l'évènement par agenda.php?article=ID)
J'avais fait des UNION sur mes tables pour pouvoir avoir un classement par timestamp de toutes les nouveautés (ainsi j'obtiens les 5 dernières nouveautés parmis toutes les tables du site).
Petit problème; je souhaite placer un lien qui redirige vers l'article mais je dois pour ça pouvoir récupérer ensuite la table d'où provient l'article après l'UNION.
Je n'ai trouvé aucune fonction php pour ça, quelqu'un a une idée?
Merci
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
15 juil. 2008 à 16:55
Si tes événements sont si similaires, ils devraient tous être dans la même table, avec un champs supplémentaire pour dire s'ils sont relatifs à l'agenda.

Si tu veux garder ta structure, en faisant 5 requêtes c'est facile de différencier les tables d'origine, mais effectivement avec 1 seule requête ce n'est pas possible, à moins de rajouter une colonne dans chaque table qui contiendra le nom de la table, mais c'est complètement idiot.

à+
0
cs_skit Messages postés 54 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 23 septembre 2009
15 juil. 2008 à 16:59
Ils ne sont pas similaires; ils ont chacun un titre, un id, un timestamp, un text et un user (le créateur de l'évènement). Tous les autres champs varient et c'est pour ça que je n'ai pas créé une table générale.
Sinon j'aurai eu une table avec 40 champs dont la plupart sont rarement remplis et le temps de traitement de ma table aurait été horriblement long pour le serveur.
Si je fais 5 requêtes, je ne peux pas les classer par ordre de Timestamp les-unes par rapport aux autres.
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
15 juil. 2008 à 17:05
Dans l'idéal il te faut 1 table événement. Cette table comportera un champ "type d'événement" qui te permettra de faire une jointure vers les autres tables, chacune dédiée à un type d'événement.
Si tu veux persévérer avec une multitude de tables, tu peux, mais tu devras trier par date avec php, pas en sql.

à+
0
Rejoignez-nous