fonction substr

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : fonction substr

par ayiore » 08 janv. 2006, 14:18

ah merci!

effectivement ça ne pouvait pas marcher!

maintenant c'est bon!

par Cyrano » 08 janv. 2006, 14:13

Sauf erreur de ma part, ta recherche de chaine vide ne peut pas fonctionner:
Il faudrait remplacer ceci:
$deresp  = strrpos($contenu2, "");  // on récupère la position du dernier espace dans $contenu2 
Par ceci:
$deresp  = strrpos($contenu2, " ");  // on récupère la position du dernier espace dans $contenu2 
Notes-tu bien la différence ?

par ayiore » 08 janv. 2006, 13:36

bonjour à tous!

bon j'ai presque tout résolu!

maintenant je m'attaque à la récupèration de la position du dernier espace dans la chaine dont j'ai préalablement récupéré les 30 premiers caractères.

mais ça ne fonctionne pas! je me contente d'afficher les 30 caractères sans m'arreter au dernier espace! une idée?
<? require "aguanews/config.php";

$db = mysql_connect("$dbserver", "$dbuser", "$dbpass");  
mysql_select_db("$dbbase",$db);
$req1 = mysql_query("SELECT * FROM todoonews order by date desc, heure desc");
$res1 = mysql_numrows($req1);
mysql_close($db);
$nbmnews=3;
if ($res1 <= $nbmnews) {$nbmnews = $res1-1;} else {echo "";}

for ($i1 = 0; $i1 <= $nbmnews ; $i1++) 
	
		{$titre1    = mysql_result($req1,$i1,"titre");
	  	 $contenu1  = mysql_result($req1,$i1,"contenu");
	  	 $contenu2  = substr($contenu1,0,30); //  on récupère les 30 premiers caractères de $contenu1
		 $deresp  = strrpos($contenu2, "");  // on récupère la position du dernier espace dans $contenu2
		 $mininews  = substr($contenu2,0,$deresp); 
		 ?>
		<table class="mintbl">
		  <tr>
		    <th>> <? echo $titre1?></th>
		  </tr>
		  <tr>
		    <td><? echo $mininews?> <a href="index.php?page=gazette" title="aguanews">&nbsp;suite...</a></td>
		  </tr>
		</table><? }
	  					
?>

par Cyrano » 06 janv. 2006, 22:24

Il faut que tu isoles le problème: se farcir 300 lignes de code mal indenté pour trouver une erreur, ce n'est pas précisément un cadeau :?

par ayiore » 06 janv. 2006, 20:36

j'ai commencé a essayer de faire ce qu'on a dit mais j'ai un problème de conflit je crois entre ma page avec mes "mininews" et ma page avec mes news complètes!

au début j'ai cru que c'était du à l'utilisation de la même variable dans les deux pages $i alors j'ai mis sur une $i1 mais ça ne change rien!

dès que j'ajoute le code dans la partie gauche l'ajout de news les modifs de news etc... ne fonctionnent plus

page avec mininews:
for ($i1 = 1; ; $i1++) 
	
	{ if ($i1 <= 3)
		{$titre1    = mysql_result($req,$i1,"titre");
	  	 $contenu1  = mysql_result($req,$i1,"contenu");
	  	 $mininews  = substr($contenu1,0,30);
		echo"
		<table cellpadding=2 cellspacing=0 border=0 width=130>
		  <tr>
		    <td align='left'>> $titre</td>
		  </tr>
		  <tr>
		    <td align='left'>$mininews <a href=\"index.php?page=gazette\" title='aguanews'>suite...</a></td>
		  </tr>
		</table>";}
	  else 
		{echo"";}
		}	

par Cyrano » 05 janv. 2006, 21:57

Ok, je crois que je commence à te voir venir: dans ce cas, tu dois sélectionner une portion de chaine dans une longueur maximale, par exemple 100 caractères avec substr().

Ensuite, il te faut repérer la position du dernier espace dans la portion de texte récupérer pour être sûr de pas couper un mot en deux: ça, tu peux le faire avec strrpos() Et quand tu as cette position, tu refais un coup de substr() et tu disposes du bon paramètre de longueur pour couper ta phrase.

par ayiore » 05 janv. 2006, 21:49

ça implique de connaitre le contenu de ma chaine de caractère non?
puisqu'après tu indiques le nombre de caractère de chaque mot!

moi mon but, tu dois t'en douter vu mes derniers posts, c'est de récupérer des extraits de news saisis au préalable pour les afficher en version reduite sur ma page d'accueil! ensuite je cliquerai sur lire la suite et j'arriverai à ma page de news!

par Cyrano » 05 janv. 2006, 21:39

Tu peux récupérer les différents mots d'une phrase par exemple avec explode:
<?php
$chaine = "Ceci est une phrase d'un intérêt absolument bouleversant";
$mots = explode(" ", $chaine);
?>
<pre>
<?php
var_dump($mots);
?>
</pre>
Ce petit bout de code va afficher la phase coupée selon le premier paramètre de explode(), ici un espace :

Code : Tout sélectionner

array(8) { [0]=> string(4) "Ceci" [1]=> string(3) "est" [2]=> string(3) "une" [3]=> string(6) "phrase" [4]=> string(5) "d'un" [5]=> string(7) "intérêt" [6]=> string(10) "absolument" [7]=> string(12) "bouleversant" }

fonction substr

par ayiore » 05 janv. 2006, 21:28

je voudrais récupérer une partie d'une chaine de caractère contenu dans une variable.

pour cela je pensais utiliser la fonction substr mais le problème c'est que je ne veux pas couper ma chaine au milieu d'un mot.

connaissez vous un moyen pour que cette fonction coupe une chaine de caractère à un endroit ou il y a un espace?

peut être existe t-il une autre fonction pour faire cela?