Page 1 sur 2
afficher toute les valeur sauf la dernière
Posté : 29 août 2012, 15:41
par jissey
Hello.
Je casse les dents sur un problème. Je suis en train de me faire une page de news personnalisé. Pour le moment pas de problème.
Mon soucis est que dans ma page d'accueil, je souhaite mettre la dernière news en entier dans un bloc (jusqu'ici pas trop de problème =>trie décroissant et affichage d'une donné) et dans la colonne a coté une ou deux ligne de chaques news. Pour cette dernière colonne, je pensais faire de petit bloc, pour afficher seulement une partie du texte. j'affiche ensuite par tri,décroissant les news, mais je ne sais pas comment commencer à partir de l'avant dernière, la dernière étant déjà affichée.
Merci d'avance.
Re: afficher toute les valeur sauf la dernière
Posté : 29 août 2012, 15:49
par schim59
Bonjour,
En théorie tu fais un tableau avec une boucle
for($i=1;i<$k:i++)
ou $k et le nombre d'article(s).
Je ferais un code plus complet avec plaisir mais le je n'ai pas accès a WAMP au travail pour le tester.
Bon codage
Re: afficher toute les valeur sauf la dernière
Posté : 29 août 2012, 16:11
par jissey
hum, en fait, mes news sont dans une Bdd.
j'avais essayé de faire un "SELECT * FROM news ORDER BY id DESC Where id=id-1" a tout hasard, mais cela ne marche pas.
Pour tout dire, je suis débutant de chez débutant, et je pioche mes info dans des tutos, dans des livres. Je n'ai pas encore de reflex php, et rien n'est vraiment évident pour moi.
Du coup, je ne comprends pas bien ta boucle. J'essaie de comprendre, pour voir si cela me sert.
Re: afficher toute les valeur sauf la dernière
Posté : 29 août 2012, 16:14
par schim59
edit
ca c'est bon apres tu fais
$resultat=$tarequete->fetchAll(PDO::FETCH_ASSOC);
foreach($resultat as $row){
tab[$i]=array ($row['id'],$row['article'],$row['date']);} //etc...
A partir de là tu gères ta mise en page avec le tableau TAB[$i] ou $i est le numéro de l'ID.
Re: afficher toute les valeur sauf la dernière
Posté : 29 août 2012, 16:17
par jissey
dans ma bdd, j'ai mon id (unique), le titre, un chapeau et le texte. L'ordre ou la numérotation si c'est ce que tu me demande se fait par l'id.
Re: afficher toute les valeur sauf la dernière
Posté : 29 août 2012, 16:25
par schim59
$resultat=$tarequete->fetchAll(PDO::FETCH_ASSOC);
$i=0;
foreach($resultat as $row){
$i++;
tab[$i]=array ($row['id'],$row['article'],$row['date']);}
//etc...
A partir de là tu gères ta mise en page avec le tableau TAB[$i][]ou $i est le numéro de l'ID et le 2nd [] la 2nd dimension du tableau.
Bon codage
Re: afficher toute les valeur sauf la dernière
Posté : 29 août 2012, 17:10
par jissey
mes news ne sont pas affichées dans un tableau

c'est peut-être une mauvaise façon de faire?
voilà le code que j'ai employé :
`
<?php
include('bdd.php');
$nombre=$bdd->query("SELECT * FROM news ORDER BY id DESC"); //pour compter le nombre d'image
$total=$nombre->rowCount(); //rowcount sert à donner le nombre d'entrée
$nb_page=$total/4;
if(!isset($_GET['page'])){$page_actuelle=1;}else{$page_actuelle=$_GET['page'];}
$liste=4*$page_actuelle-4;
$req=$bdd->query("SELECT * FROM news ORDER BY id DESC LIMIT $liste,1");
while($donnees_select=$req->fetch())
{
?>
<div class="titrenews"> <?php echo $donnees_select['titre']; ?> </div>
<div> <?php echo $donnees_select['chapeau']; ?> </div>
<div> <?php echo $donnees_select['texte']; ?> </div>
<?php
}
?>
Bon, je me suis servi d'un tuto qui expliquait comment faire une galerie d'image dynamique, et je l'ai modifié pour arriver à mes fin.
Ça me permet de gérer le nombre de news par pages.
pour ta mise en page par tableau, j'ai jamais fait.
là, si j'ai bien compris, ce qui correspond à mes affichages titre, chapeau texte ( oui j'ai pas mis de date), c'est
foreach($resultat as $row){ -> pour chaque résultats, affiche-les en tableau...
tab[$i]=array ($row['id'],$row['article'],$row['date']);} -> dont chaque colonne est id, article, date.
Les requêtes s'affiche donc dans l'ordre ascendant puisque ton i s'incrémente, ou alors je comprends plus.
Re: afficher toute les valeur sauf la dernière
Posté : 29 août 2012, 17:32
par jissey
bon, je crois que j'ai résolu mon problème avec cette discussion :
http://www.phpcs.com/forum/sujet-AVANT- ... 76936.aspx.
J'ai adapté à mon cas, et pour l'instant, j'ai mis dans ma première colonne d'index (une bonne vielle div) le code que je viens de montrer, n'affichant donc que la dernière news, et dans ma deuxième colonne le même code, en remplaçant" ORDER BY id DESC LIMIT $liste,1" par "ORDER BY id DESC LIMIT 1,3" pour ne pas afficher la dernière mais les 3 avant.
bon, par contre comment faire pour n'afficher que les deux première ligne du texte contenu dans la bdd??? Apparement, le texte arrive dans la div et pousse le fond du bloc. Encore un autre casse tête. si quelqu'un à une idée...je suis preneur
Re: afficher toute les valeur sauf la dernière
Posté : 29 août 2012, 18:12
par sam12
bon, par contre comment faire pour n'afficher que les deux première ligne du texte contenu dans la bdd??? Apparement, le texte arrive dans la div et pousse le fond du bloc. Encore un autre casse tête. si quelqu'un à une idée...je suis preneur
http://www.php.net/manual/fr/function.substr.php ?
Re: afficher toute les valeur sauf la dernière
Posté : 29 août 2012, 19:48
par jissey
merci Sam12 pour le lien, mais je ne voudrais pas couper de mots. Si j'ai bien compris, ta fonction substr, elle permet de n'afficher qu'une parti des caractères, par exemple les 50 premières lettres, mais elle ne tiens pas compte de mots entiers. Je ne sais d’ailleurs même pas si ce que je veux faire est réalisable. Est-il possible de ne cibler que les blancs entre les mots? par exemple couper au dixième blanc. Pour le moment, je contourne le problème en utilisant une autre variable dans la base de donnée qui m'affichera un bout de phrase. Une façon comme une autre d'arriver à ses fins.
Mais je cherche toujours pour n'afficher que les deux première lignes.
Bon, comme je l'ai déja dit, je pioche dans les bouquins et le net, je ne sais même pas encore tout ce qu'on peut (ou ne peu pas )faire en php.
Re: afficher toute les valeur sauf la dernière
Posté : 29 août 2012, 20:01
par sam12
Si tu veux récupérer les 2 lignes premières phrases, tu peux tenter l'explode sur le point ça pourrait le faire (à tester).
Edit: Si tu tiens absolument au substr, il faudrait regarder strrpos

Donc un coup de substr, tu passes un strrpos (en visant le dernier espace) et tu peux repasses 1 coup de substr pour récupérer la nouvelle valeur.
Re: afficher toute les valeur sauf la dernière
Posté : 31 août 2012, 17:47
par jissey
bon, j'arrive à utiliser le substr, mais pas le strpos. (oui, j'ai utilisé strpos plutot que strrpos car je ne sais pas à l'avance, la longueur de chaque new. c'est donc plus facile de compter disons 15 blanc (" ") depuis le début du texte.
Alors, le soucis, c'est que j'ai marqué :
var_dump(strpos($donnees_select['texte'], " ", 2));
mais que le chiffre 2 (l'offset si j'ai bien compris) n'est pas pris en compte. j'ai vérifié dans le texte, le premier blanc arrive en position 12, mais quelque soit l'offset, j'ai toujours 12.
Merci d'avance.
Re: afficher toute les valeur sauf la dernière
Posté : 31 août 2012, 18:12
par moogli
$position=var_dump(strpos($donnees_select['texte'], " ", 2));
echo substr($donnees_select['texte'], 0, $position);
Mais, ca marche pas.
je pense que tu devrais regarder la documentatio de la fonction
var_dump tu comprendrais ton erreur
ça marche pas pas constructif, ça fonctionne, pas comme tu le veux, mais comme tu la programmé
donc
$position=strpos($donnees_select['texte'], " ", 2);
echo substr($donnees_select['texte'], 0, $position);
va afficher la chaine contenu avant le 1er blanc qui se trouve après le second caractère. donc en gros seulement le 1er mot
je te suggère d'augmenter le nombre de caractère avant la recherche (genre 50 ou 100).
$position=strpos($donnees_select['texte'], " ", 100);
echo substr($donnees_select['texte'], 0, $position);
tu auras ainsi les 100 1er caractères et quelque uns de plus pour finir le dernier mot.
une autre solution est de mettre un "token" (désolé je trouve que jeton ne correspond pas trop ^^) dans ton texte pour indiquer la séparation entre le début (description / entête de la news) et le reste.
tu récupère ce qu'il y a avant en SQL et le tour est jouer
les fonctions de chaines de caractères en SQL (l'équivalent de ce que je te propose en php peux être fait en SQL;) )
@+
@+
Re: afficher toute les valeur sauf la dernière
Posté : 31 août 2012, 18:16
par sam12
Oui au fait je n'avais pas pris en compte les 2 phrases, je m’étais occupé seulement d’éviter la coupure du dernier mot.
Le int vient du var_dump
Après franchement un explode sur le point c'est moche mais ça a le mérite de marcher.
Edit: grilled par moogli ^^
L’idée du token est intéressante (un peu comme Wordpress), mais autant explode autant le faire sur le point

Re: afficher toute les valeur sauf la dernière
Posté : 31 août 2012, 18:28
par jissey
merci, sam12. Le explode, je l'ai pas encore bien compris. Faudra que je penche plus sur la question.
Bon, pour le var_dump, j'ai compris l'erreur sans vraiment cherché. Je l'ai supprimé, et j'ai compris qu'il agissait un peu comme un echo. (promis, je regarde la doc aprés.) j'ai édité le message, croyant que personne n'était dessus.
Pour le fait que "ça marche pas", en lisant ta réponse moogli, j'ai compris juste en voyant "caractère". Pas encore l'habitude de compter en caractère, et j'avais interprété inconsciemment mot. c'est sur que cela ne fonctionnerait pas. Et tu as tout a fait raison, ce que j'avais programmé fonctionnait, mais pas c'est pas ce que je voulais.
Bon, pour le moment je crois que j'ai ma solution. le $position a marché tout compte fait.
Merci a tout les 2.