IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

affichage partiel et par ordre


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club Avatar de tania.du
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Points : 38
    Points
    38
    Par défaut affichage partiel et par ordre
    Bonjour,

    J'ai un problème dont je ne sais pas de quelle côté de m'approcher. J'ai des enregistrements des différents périodes dans ma base.

    Mais j'ai besoin d'afficher seulement les 3 derniers enregistrements partiellement (quelques phrases) tout les autres enregistrements doivent apparaitre juste comme les titres.


    Est-ce que c'est possible?

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 194
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 194
    Points : 8 409
    Points
    8 409
    Billets dans le blog
    17
    Par défaut
    Oui. Qu'est-ce qui te gêne ? C'est le "partiellement" ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    FoxLeRenard
    Invité(e)
    Par défaut
    En gros, la demarche est la suivante,

    Tu attaques ta base de données en triant par date,

    a chaque boucle de ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
     while ($row=mysql_fetch_array($result)) 
             {
     
              }
    tu va faire des "echo" avec un truc genre lire la suite contenant ton titre, et en troquant par exemple les 150 premiers caractéres de l'article.

    avec un conteur, quand tu dépasse 3 tu ne mets plus que les titres

  4. #4
    Nouveau membre du Club Avatar de tania.du
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    @ FoxLe Renard

    Merci FoxLeRenard. C'est ce que j'ai imaginé à peu près mais où je peux trouver le syntaxe? des exemples comment faire au iveau du script? Car je ne sais pas comment je pourrai l'ecrire.

  5. #5
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par tania.du Voir le message
    @ FoxLe Renard

    Merci FoxLeRenard. C'est ce que j'ai imaginé à peu près mais où je peux trouver le syntaxe? des exemples comment faire au iveau du script? Car je ne sais pas comment je pourrai l'ecrire.
    Dis moi si c' est du MYSQL, et surtout donnes moi ta structure
    de table comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    DROP TABLE IF EXISTS `photo`;
    CREATE TABLE IF NOT EXISTS `photo` (
      `IndexPhoto` smallint(5) unsigned NOT NULL auto_increment,
      `Active_O_N` char(2) NOT NULL default 'O',
      `LeCheminNom` varchar(80) NOT NULL default '',
      `Categorie` varchar(20) NOT NULL default '',
      `Nature0` varchar(20) NOT NULL default '',
      `Nature1` varchar(20) NOT NULL default '',
      `Nature2` varchar(20) NOT NULL default '',
      `Nature3` varchar(20) NOT NULL default '',
      `Libelle` varchar(140) NOT NULL default '',
      PRIMARY KEY  (`IndexPhoto`),
      UNIQUE KEY `LeCheminNom` (`LeCheminNom`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=59 ;

  6. #6
    Nouveau membre du Club Avatar de tania.du
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    la base MySQL. je n'ai q'un seul champ. La voici:

    -- Structure de la table `actualite`
    --

    CREATE TABLE `actualite` (
    `numero` tinyint(3) unsigned NOT NULL auto_increment,
    `elm1` text NOT NULL,
    PRIMARY KEY (`numero`)
    ) ENGINE=MyISAM DEFAULT CHARSET=ucs2 AUTO_INCREMENT=1 ;

    --
    -- Contenu de la table `actualite`

  7. #7
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par tania.du Voir le message
    la base MySQL. je n'ai q'un seul champ. La voici:
    Ok il n' y a pas de date ce qui veux dire je suposes qu'il faut lire a l'envers,
    le numero l plus eleve étant le plus récent

    Je réédites car il manque par rapport a ton souhait, un champ "titre" ??

  8. #8
    Nouveau membre du Club Avatar de tania.du
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    Je n'ai qu'un seule champ car je rentre le texte en entier avec un seul formulaire par le moyen TinyMCE (j'ai un titre et le texte dans le même champ). Je pense qu'il faut limiter la quantité de mots à afficher.

    Pour les dates , je voudrais que les actualités que je rentre en dernier ils d'affichent en premiere position. Par exemple, si j'ai 21 actualités, je voudrais que l'actualité 21 s'affiche en 1 , la actualité 20 s'affiche en 2, l'actu 19 s'affiche en 3 etc.

  9. #9
    FoxLeRenard
    Invité(e)
    Par défaut
    Bon je te mets un PHP complet il te suffit d' y rajouter tes variables de connection a MYSQL

    C' est un exemple mais aprés tu fais comme tu veux , a toi d'adapter
    donc on lit de XXX a 1 et les trois premiers tu vois que je prends 150 caractéres les autres 15 !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'  'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
    <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
    <head>
    <title>xxxxxxxxx</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <meta name="robots" content="all" />
    <meta http-equiv="content-language" content="fr, en" />
    <meta name="expires" content="never" />
    </head><body>
     
    <form method='post' action='0test01.php'>
      <br /><br />
    <?PHP
    $i=1;
    // ========== ICI charge param de la MYSQL pour connection ======
    // ================= on va lister les articles ==================
       $Flag1=mysql_connect($Serveur,$User,$Mdp);
       $Flag2=mysql_select_db($MaBase);
       $result=mysql_query("select * from actualite
         ORDER BY DESC numero ");
       while ($row=mysql_fetch_array($result)) 
         {
          $numero= stripslashes($row['numero']);
          $elm1= stripslashes($row['elm1']);
          if ($i<4) $elm1=substr($elm1, 0,150) ;
          if ($i>3) $elm1=substr($elm1, 0,15) ;
          echo "<input type='radio' name='larticle'  value='".$numero."'> ".$elm1."<br />";
         }
       mysql_close();
     
    ?>
      <br /><input type='submit' value='ok'></form>
     
    </body></html>

  10. #10
    Nouveau membre du Club Avatar de tania.du
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    Merci FoxLeRenard! ça reviens un peu DESC c'est l'ordre decroisant? Oui! merci encore je vais integrer le code et le tester!

  11. #11
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par tania.du Voir le message
    Merci FoxLeRenard! ça reviens un peu DESC c'est l'ordre decroisant? Oui! merci encore je vais integrer le code et le tester!
    Houla tu fais bien d'en parler c' est
    ORDER BY numero DESC
    et pas l'inverse !!

  12. #12
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 37
    Points : 40
    Points
    40
    Par défaut
    le raisonnement parait juste...

    Mais juste comme ca dans ton code Fox il manque 1 ou 2 trucs...
    $i est initialise, mais jamais incremente donc je sais pas a quoi sert les tests suivants... meme si je comprend bien que le truc est de prendre les 3 premiers elements du tableau et les autres apres ;-) car sauf erreur de ma part ton $i reste toujours a 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          if ($i<4) $elm1=substr($elm1, 0,150) ;
          if ($i>3) $elm1=substr($elm1, 0,15) ;
    Donc il manque un truc du style $i++ dans la boucle;-)

    Ensuite admettons que tu incrementes $i.
    A priori i ne peut pas etre a la fois strictement superieur a 3 et (en meme temps) strictement inferieur a 4. A quoi cela sert-il de faire 2 tests?
    Un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (..) {
    ...}
    else{
    ...
    }
    c'est pas mal non?

    J'ai mis $i a 0 car en php les tableaux commencant a 0 c'est plus courant mais bon ca change pas grand chose.
    J'ai incremente $i que tant qu'il est <3 apres il sert plus a rien donc pas la peine de continuer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'  'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
    <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
    <head>
    <title>xxxxxxxxx</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <meta name="robots" content="all" />
    <meta http-equiv="content-language" content="fr, en" />
    <meta name="expires" content="never" />
    </head><body>
     
    <form method='post' action='0test01.php'>
      <br /><br />
    <?PHP
    $i=0;
    // ========== ICI charge param de la MYSQL pour connection ======
    // ================= on va lister les articles ==================
       $Flag1=mysql_connect($Serveur,$User,$Mdp);
       $Flag2=mysql_select_db($MaBase);
       $result=mysql_query("select * from actualite
         ORDER BY numero DESC");
       while ($row=mysql_fetch_array($result)) 
         {
          $numero= stripslashes($row['numero']);
          $elm1= stripslashes($row['elm1']);
     
          if ($i < 3){
          	 $elm1=substr($elm1, 0,15);
          	 $i++;
          }
          else {
          	$elm1=substr($elm1, 0,150) ;
          }
          echo "<input type='radio' name='larticle'  value='".$numero."'> ".$elm1."<br />";
         }
       mysql_close();
     
    ?>
      <br /><input type='submit' value='ok'></form>
     
    </body></html>

    Bon apres pourquoi tu mets cela dans des input radio etc... et dans un form si c'est juste pour de l'affichage mais bon. Le principe est la c'est ce qui compte ;-)

  13. #13
    Nouveau membre du Club Avatar de tania.du
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    MERCI A TOUS !!!! J'ai adapté un peu par rapport à mon script. Et tout marche. MAIS... J'ai 2 soucis:

    1. Quand on affiche par caractères très souvent le mot est coupé au milieux , ce n'ai pas très sympa.
    2. Comme dans la base le texte est intégré avec le code HTML parfois j'ai des surprises de genre ; j'ai un lien qui se propage sur tous les textes est-ce qu'il y a le remede de ces problèmes?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
    $i=0;
    $Bdd = new MySQL();
     
    if(!$link = $Bdd -> connect($MySQL_Host, $MySQL_User, $MySQL_Passwd, $MySQL_Base))
    die( $Bdd -> return_error() );
     
    $Query = ' SELECT * FROM actualite ORDER BY num DESC';
     
    if( !$Result = $Bdd -> Send_Query($Query, $link) ) 
    die( $Bdd -> return_error());
     
    while($annonce = $Bdd -> get_array($Result)) {
     
    ?>
     
    <!-- CODE HTML -->
     
    	<span class="global_text">
    	<span class="text_bleu_left"></span> 
    	<?php
    	 $num= stripslashes($annonce['num']);
    	 $elm1= stripslashes($annonce['elm1']);
         if ($i < 3){
          	 $elm1=substr($elm1, 0,700);
          	 $i++;
          }
          else {
          	$elm1=substr($elm1, 0,160) ;
          }
    	echo stripslashes($elm1);?>
    </span>
    <br/>
     
      <!-- CODE HTML -->
     
    <?php
    } 
     
    $Bdd -> free_result($Result);
     
     
    $Bdd -> close($link);
     
    ?>

  14. #14
    FoxLeRenard
    Invité(e)
    Par défaut
    Super !! et merci garrath pour mon oubli d'incrémentation

    Bon selon to cas, tu va déterminer au mot pret comme ceci
    donc si tu es par exemple dans le cas de 700

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $pos = strpos($newstring, ' ', 700);  // premier vide a partir de 700
    // et alors
     $elm1=substr($elm1, 0,$pos);

  15. #15
    FoxLeRenard
    Invité(e)
    Par défaut
    C'est un peut tordu, mais quand tu as extrait ton morceau d'article,
    il te faut par recherche controler que toute balise est fermée ...
    faut surement se creuser pour trouver un truc astucieux !

Discussions similaires

  1. [CSV] Affichage par ordre alphabétique
    Par ptitelolo dans le forum Langage
    Réponses: 4
    Dernier message: 05/09/2011, 18h53
  2. affichage aléatoire des produits par ordre croissant.
    Par marcandre dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/11/2008, 16h40
  3. [SQL] Classement sql et affichage par ordre croissant
    Par Overstone dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/08/2007, 00h18
  4. [MySQL] Affichage des dates par ordre décroissant
    Par ash_rmy dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/03/2007, 13h01
  5. Affichage par ordre alphabétique
    Par masseur dans le forum Langage
    Réponses: 8
    Dernier message: 08/12/2005, 11h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo