[PHP] Limiter le nombre de mots

digival Messages postés 209 Statut Membre -  
avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, mon script provenant de ce topic ne marche pas :
https://www.webmaster-hub.com/topic/27383-limiter-le-nombre-de-caractere-du-resultat-dune-requete/

<?php 
$retour = mysql_query('SELECT * FROM actualitees ORDER BY id DESC LIMIT 0,1') or die( mysql_error() );
$actu = mysql_fetch_array($retour) or die( mysql_error() );
?>

<?php
$nbCaracteres = 50;
if( strlen($actu) > $nbCaracteres ) 
{
 $extrait_actu = ereg_replace("(.{".$nbCaracteres."})( .*)$","\\1 ...", $actu);
}
else 
{
 $extrait_actu = $actu;
}
?>

<div id="actualites" >
<h3> <?php echo (html_entity_decode(stripslashes($extrait_actu['titre']))); ?> </h3> 
<p> <?php echo nl2br(html_entity_decode(stripslashes($extrait_actu['contenu']))); ?> </p>
</div>


Où est le problème svp ?

8 réponses

  1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Tu veux limiter le nombre de mots ou de caractères ?
    1
  2. vlmath Messages postés 833 Statut Contributeur 160
     
    Salut,

    Ce code à l'air de limiter le nombre de caractères.

    Au lieu d'utiliser la fonction ereg_replace, utilise plutôt la fonction qui sert à prendre des portions de strings :

    $extrait_actu =  substr($actu, 0, $nbCaracteres);


    Manuel complet : https://www.php.net/manual/fr/function.substr.php

    @Bientôt et bonne prog
    1
  3. digival Messages postés 209 Statut Membre 1
     
    Merci beaucoup de vos réponses, mais je n'y arrive toujours pas...
    (honte à moi :s)

    Voici mon script:

    <?php
    $nbCaracteres = 5000;
    if( strlen($actu) > $nbCaracteres ) 
    {
     $extrait_actu = substr($actu, 0, $nbCaracteres);
    }
    else 
    {
     $extrait_actu = $actu;
    }
    ?>
    
    <div id="actualites" >
    <h3> <?php echo (html_entity_decode(stripslashes($extrait_actu['titre']))); ?> </h3> 
    <p> <?php echo nl2br(html_entity_decode(stripslashes($extrait_actu['contenu']))); ?> </p>
    </div>
    


    P.S:Je préfère limiter le nombre de caractères
    0
  4. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    $actu est un array ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    D'abord tu ne peux pas faire un substr dessus !
    Il faut que tu le fasses sur chacune de ses entrées.
    0
  7. digival Messages postés 209 Statut Membre 1
     
    Désolé mais j'y arrive toujours pas :s

    Mon nouveau script:

    <?php 
    $retour = mysql_query('SELECT * FROM actualitees ORDER BY id DESC LIMIT 0,1') or die( mysql_error() );
    $actu = mysql_fetch_array($retour) or die( mysql_error() );
    ?>
    
    <?php
    $nbCaracteres = 5000;
    if( strlen($actu['contenu']) > $nbCaracteres ) 
    {
     $extrait_actu['contenu'] = substr($actu['contenu'], 0, $nbCaracteres);
    }
    else 
    {
     $extrait_actu['contenu'] = $actu['contenu'];
    }
    ?>
    
    <div id="actualites" >
    <h3> <?php echo (html_entity_decode(stripslashes($actu['titre']))); ?> </h3> 
    <p> <?php echo nl2br(html_entity_decode(stripslashes($extrait_actu['contenu']))); ?> </p>
    </div>
    


    P.S: Je veux juste effectuer la limite sur le contenu et non le titre
    0
    1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      Qu'est-ce qui ne fonctionne pas ?
      Tu ne vois rien du tout ?
      Ou le texte n'est pas coupé ?
      Essaye en déclarant l'array avant la condition
      $extrait_actu = array();
      0
  8. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Si tu veux limiter le nombre de mots, utilises la fonction explode.
    -1
  9. digival Messages postés 209 Statut Membre 1
     
    oui
    -1