Extraire une partie de chaines d' une champ d'un tableau

dacosta67 Messages postés 4 Date d'inscription vendredi 9 octobre 2009 Statut Membre Dernière intervention 18 août 2011 - 7 janv. 2011 à 18:03
dacosta67 Messages postés 4 Date d'inscription vendredi 9 octobre 2009 Statut Membre Dernière intervention 18 août 2011 - 7 janv. 2011 à 23:18
jai souhaite extraire une partie de chaine d'un champ de ma table.

voici ma table
CREATE TABLE IF NOT EXISTS `news` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`auteur` varchar(30) NOT NULL,
`titre` text NOT NULL,
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`texte_news` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;


et mon script, jai souhaite extraire une partir des chaines de text_news , et l'afficher .

voici mon script :


<?php
// on se connecte à notre base
$base = mysql_connect ('localhost', 'root', 'dacosta67');
mysql_select_db('News', $base);

// lancement de la requête. on sélectionne les news que l'on va ordonner suivant l'ordre "inverse" des dates (de la plus récente à la plus vieille : DESC) tout en ne sélectionnant que le nombre voulu de news à afficher (LIMIT)
$sql = 'SELECT auteur, titre, date, texte_news FROM news ORDER BY date DESC';

// tu recupere ta chaine a partir de ta requete et tu extrait la partie que tu veux avec la fonction substr
$sqli= 'SELECT texte_news FROM news ORDER BY date DESC';
$query=mysql_query($sqli);

while ($row = mysql_fetch_object($query))
{
//echo $row->texte_news;

$val = $row->texte_news;
}

//comment extraire la 5 eme phrase d'une chaine
$delimiter='.';
$string=$val;
$sentence= explode ($delimiter ,$string );
echo '

';
//faut tester si ton champs contient un nombre de phrase >= 3
if(count($sentence)>3)
{
echo $sentence[4].'

';
}


// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());

// on compte le nombre de news stockées dans la base de données
$nb_news = mysql_num_rows($req);

if ($nb_news == 0)
{
echo 'Aucune news enregistrée.';
}
else
{
// si on a au moins une news, on l'affiche
while ($data = mysql_fetch_array($req))
{

// on décompose la date
sscanf($data['date'], "%4s-%2s-%2s %2s:%2s:%2s", $an, $mois, $jour, $heure, $min, $sec);

// on affiche les résultats
echo '
News de : ' , htmlentities(trim($data['auteur'])) , '
';
echo 'Titre : ' , htmlentities(trim($data['titre'])) , '
';
echo 'Postée le : ' , $jour , '/' , $mois , '/' , $an , ' à ' , $heure , ':' , $min , ':' , $sec , '

';
echo 'News : ' , nl2br(htmlentities(trim($data['texte_news']))) , '
';
}
}
// on libère l'espace mémoire alloué à cette requête
mysql_free_result ($req);

// on ferme la connexion à la base de données
mysql_close ();
?>

4 réponses

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
7 janv. 2011 à 20:52
bonsoir
quelle est le probleme ?
veux tu extraire pour chaque ligne ?
si c'est ça je te propose
(remettre ton password)
a++
<?php 
// on se connecte à notre base 
$base = mysql_connect ('localhost', 'root', ''); 
mysql_select_db('News', $base); 

// lancement de la requête. on sélectionne les news que l'on va ordonner suivant l'ordre "inverse" des dates (de la plus récente à la plus vieille : DESC) tout en ne sélectionnant que le nombre voulu de news à afficher (LIMIT) 
$sql = 'SELECT auteur, titre, date, texte_news FROM news ORDER BY date DESC'; 

// tu recupere ta chaine a partir de ta requete et tu extrait la partie que tu veux avec la fonction substr 
$sqli= 'SELECT texte_news FROM news ORDER BY date DESC'; 
$query=mysql_query($sqli); 

while ($row = mysql_fetch_object($query)) 
{ 
//echo $row->texte_news; 
$val = $row->texte_news;
 //comment extraire la 5 eme phrase d'une chaine 
$delimiter='.'; 
$string=$val; 
$sentence= explode ($delimiter ,$string ); 
echo ' 

'; 
//faut tester si ton champs contient un nombre de phrase >= 3 
if(count($sentence)>3) 
{ 
echo ''.$sentence[4].'

'; 
} 

} 

// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) 
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error()); 

// on compte le nombre de news stockées dans la base de données 
$nb_news = mysql_num_rows($req); 

if ($nb_news == 0) 
{ 
echo 'Aucune news enregistrée.'; 
} 
else 
{ 
// si on a au moins une news, on l'affiche 
while ($data = mysql_fetch_array($req)) 
{ 

// on décompose la date 
sscanf($data['date'], "%4s-%2s-%2s %2s:%2s:%2s", $an, $mois, $jour, $heure, $min, $sec); 

// on affiche les résultats 
echo '
News de : ' , htmlentities(trim($data['auteur'])) , '
'; 
echo 'Titre : ' , htmlentities(trim($data['titre'])) , '
'; 
echo 'Postée le : ' , $jour , '/' , $mois , '/' , $an , ' à ' , $heure , ':' , $min , ':' , $sec , '

'; 
echo 'News : ' , nl2br(htmlentities(trim($data['texte_news']))) , '
'; 
} 
} 
// on libère l'espace mémoire alloué à cette requête 
mysql_free_result ($req); 

// on ferme la connexion à la base de données 
mysql_close (); 
?> 
0
dacosta67 Messages postés 4 Date d'inscription vendredi 9 octobre 2009 Statut Membre Dernière intervention 18 août 2011
7 janv. 2011 à 21:52
non , je souhaite juste extraire pour un seul champ, le champ texte_news,
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
7 janv. 2011 à 22:24
oui
donc tu peux essayer le bout de code que je t'ai reposté ...
a++
0
dacosta67 Messages postés 4 Date d'inscription vendredi 9 octobre 2009 Statut Membre Dernière intervention 18 août 2011
7 janv. 2011 à 23:18
merci,
0
Rejoignez-nous