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

PHP & Base de données Discussion :

Afficher news une par une


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Par défaut Afficher news une par une
    Bonjour,

    J'ai commencé à mettre en place un système de news comme ceci :

    Le site est fait sous Drupal (erf... obligé)
    Une page gère l'affichage (page.tpl.php)
    La page d'accueil affiche la dernière news en incluant news-front.php qui gère ceci
    La page de news affiche toutes les news par ordre décroissant en incluant news.php qui est presque identique à news-front.php
    Les news sont ajoutées et stockées dans une BDD

    Je voudrais que sur la page d'accueil, les news s'affichent une par une au bout d'un temps donné : dernière news >> X secondes >> avant-dernière news >> X secondes etc en boucle.

    Voici le code de mon fichier news-front.php qui gère 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
    // on se connecte à notre base  
    $base = mysql_connect ('***', '***', '***');  
    mysql_select_db('***', $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 LIMIT 1;';  
     
    // 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 !<br />'.$sql.'<br />'.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&eacute;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 '<br />News de : ' , htmlentities(trim($data['auteur'])) , '<br />';
          echo 'Titre : ' , htmlentities(trim($data['titre'])) , '<br />';
          echo 'Post&eacute;e le : ' , $jour , '/' , $mois , '/' , $an , ' &agrave; ' , $heure , ':' , $min , ':' , $sec , '<br /><br />';
          echo 'News : ' , nl2br(htmlentities(trim($data['texte_news']))) , '<br /><br /><br />';
       }
    }
    // 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 ();
    ?>
    Je suppose que c'est dans le "else" qu'il faut toucher quelque chose, mais quoi ? mettre une boucle ? une sorte de timer ?

    HELP ! =)

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Par défaut
    Salut,

    Il faut changer le LIMIT dans ta requête, par exemple par LIMIT 0, 10 (si tu veux les dix dernières).

    Sinon, peux tu clarifier ceci ?

    Je voudrais que sur la page d'accueil, les news s'affichent une par une au bout d'un temps donné : dernière news >> X secondes >> avant-dernière news >> X secondes etc en boucle.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Par défaut
    Non le limit c'est ok, je vois ce que c'est, c'est moi qui ai mis 1 pour n'afficher que la dernière, mais ce que je recherche c'est ce qui apparemment n'était pas clair ^^ :

    Je voudrais qu'au lieu qu'il n'y ai que la dernière news, statique, ou alors un nombre donné de news (en changeant le LIMIT), il n'y ai qu'une news qui apparaisse, la dernière, puis au bout de quelques secondes, l'avant-dernière news la REMPLACE, puis au bout de quelques secondes, celles d'avant, etc, puis revenir à la première news, en boucle quoi.

    Merci =)

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Il plusieurs trucs qui mérite des explications.
    Tu fais une requête avec un LIMIT 1, donc ça récupèrera 1 seule ligne (la news la plus récente), et plus loin, tu fais un boucle (un while).
    Théoriquement, il n'y a pas besoin de faire de boucle, vu qu'il y aura à coup sûr 1 seule ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // on compte le nombre de news stockées dans la base de données
    $nb_news = mysql_num_rows($req);
    Donc ceci ne retournera pas le nombre total de news, mais 0 ou 1.

    Ensuite, tu utilise une fonction Php sscanf pour décortiquer une date pour la mettre au format Français.
    Il existe pleins de fonctions dans MySQL pour les date, entre autre STR_TO_DATE() qui permet de faire la conversion.
    -> http://dev.mysql.com/doc/refman/5.0/...functions.html

    Cependant, vu que tu souhaite faire défiler des news 1 par 1, il faut donc quelque chose qui va déclencher ça, qui va quelque par actualiser cette news-front pour passer à la news suivante au bout d'un temps.
    Il y a rien de tout ça.

    On va supposer que ce soit fait par Ajax (qui me semble le plus adapté).
    Du coup, il faudrait à mon sens un paramètre qui dise quelle sera la news à afficher, sinon ça sera toujours la même.

    Comme ça vite fait, faudrait un compteur, qui par défaut serait 0 (la 1ère ligne).
    Ensuite, faire une requête qui s'appuie sur le LIMIT.
    Donc par défaut : LIMIT 0,1
    A la 1ère actualisation, le compteur sera incrémenté, donc 1 :
    donc : LIMIT 1,1
    A la 5è : LIMIT 5,1
    etc ...

  5. #5
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Par défaut
    Excuse moi pour la partie ajax j'ai pas trop compris...

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Excuse moi pour la partie ajax j'ai pas trop compris...
    Et bien pour afficher chaque news sans devoir actualiser ta page.

    Mais tu ne dis pas grand chose sur quoi tu te base pour passer à la news suivante.
    Il faut bien quelque chose.

    Du coup, ça fait au moins 3 techniques différentes pour pouvoir le faire :
    Ajax
    Pure Javascript (on récupère un nombre de news, on le stock dans un tableau, et on affiche 1 par une toute les 10 secondes par exp.).
    Php (session). Demandera à actualiser la page entière.


    Faudrait en dire plus sur ce point, ça conditionne tout à mon sens.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Par défaut
    Citation Envoyé par LightBen Voir le message
    Non le limit c'est ok, je vois ce que c'est, c'est moi qui ai mis 1 pour n'afficher que la dernière, mais ce que je recherche c'est ce qui apparemment n'était pas clair ^^ :

    Je voudrais qu'au lieu qu'il n'y ai que la dernière news, statique, ou alors un nombre donné de news (en changeant le LIMIT), il n'y ai qu'une news qui apparaisse, la dernière, puis au bout de quelques secondes, l'avant-dernière news la REMPLACE, puis au bout de quelques secondes, celles d'avant, etc, puis revenir à la première news, en boucle quoi.

    Merci =)
    Ouais donc en gros tu veux un truc "dynamique"...

    @RunCodePhp
    Le faire en Ajax, ça alourdira et compliquera le code et demandera plus de ressources au serveur (j'ai déjà vu un serveur avec plus de 2Go de logs apache en un jour à cause de requêtes Ajax à intervalles trop courtes). Il peut le faire s'il le veut, mais je pense que le faire en javascript (sans interaction serveur) sera plus simple.

    Ce que tu peux faire, c'est envoyer les 4 ou 5 news que tu veux passer en boucle au client. Comme ça, pas d'ajax, seulement une petite fonction javascript.

    EDIT: grillé, tu viens de poster la solution que je propose

  8. #8
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Par défaut
    @RunCodePhp :

    Ben je sais pas trop quoi dire, je vois pas ce que vous avez pas compris je vais essayer de reformuler encore :

    Peu importe la méthode (php privilégié), il faudrait qu'il ne s'affiche qu'une news à la fois, la dernière, puis l'avant dernière, etc pour revenir à la premiure (en boucle). Il faut qu'au bout d'un certain temps, la news disparaisse pour laisser place à la news qui la précède, sans avoir à actualiser, qu'elle s'actualise toute seule... c'est mieux ou pas ? Désolé

    Merci pour votre intérêt à mon problème

    @sachav : Oui ce serait 4 ou 5 news en boucle, ce serait bien, mais comment faire ?

  9. #9
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Il me semble qu'on a parfaitement compris.

    Exploite Javascript.
    1/ Tu récupère un nombre de news, admettons 10.
    2/ Tu stock ces news dans un tableau JS.
    3/ Et tu exploite la fonction JS setTimeout(change_news, 10000) qui se chargera de modifier la news ... selon un compteur qui permettra de récupérer LA news dans le tableau, cela 1 par 1.
    A la 10ème, on repart à 0 ... et c'est reparti pour 1 tour.

    Tous ça sans devoir recharger la page.

    La méthode Ajax y fait la même chose mais très différemment, mais c'est vrai que c'est lourd ...

  10. #10
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Par défaut
    Je ne connais pas vraiment javascript...

    On m'a proposé quelque chose mais le problème c'est que ça n'a ni rapport avec la BDD (il faut rentrer les news directement dans le fichier) et il y a un problème au niveau de l'encodage, dès qu'il y a un caractère spécial, ça met "null" à la place du contenu (j'ai essayé avec des fonctions comme html_entity_decode mais rien n'y fait).

    Dans mon site, le système que je demande à mettre en place pour les news devra être réutilisé pour les témoignages ( http://www.i-mediaservices.com j'enlèverai le site après pour la pub au cas où pour gêner personne) mais j'ai essayé la méthode javascript qu'on m'a donné sur ces témoignages :

    avant le head :

    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
    <?php
    header('Content-type: text/html; charset=UTF-8');
     
    // Variables pour les différents témoignages
     
    $tab_temoignages[0]['image'] = 'sites/all/images/stars_75_125_blue.png';
    $tab_temoignages[0]['text'] = 'Temoignage 1';
     
    $tab_temoignages[1]['image'] = 'sites/all/images/stars_75_125_red.png';
    $tab_temoignages[1]['text'] = htmlentities('T&eacute;moignage 2');
     
    $tab_temoignages[2]['image'] = 'sites/all/images/stars_75_125_green.png';
    $tab_temoignages[2]['text'] = html_entity_decode('J&eacute;rôme Lissargue<br /><br />32 ans, contrôleur de gestion chez Airbus<br />(Toulouse)<br /><br />"Ils m\'ont bluffé Ultrarapide sans transiger avec la qualité, Stéphane le technicien est allé droit au but. Désormais, au moindre pépin, je sais que je pourrai constamment compter sur eux."');
     
    shuffle($tab_temoignages);
     
    ?>
    JS dans le HEAD :

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    function Message(id_message,id_photo)
    {
     
    	var id_mes = document.getElementById(id_message);
    	var id_pho = document.getElementById(id_photo);
     
     
    	var tab_temoignages_js = <?php  echo (isset($tab_temoignages) && is_array($tab_temoignages))? json_encode($tab_temoignages) : 'new Array' ?>;
     
    	// Nombre d'éléments du tableau
    	var nb_tab_temoignages_js = tab_temoignages_js.length;
     
     
    	// Si les éléments cibles existent et le tableau a plus d'un élément
    	if (id_mes && id_pho && nb_tab_temoignages_js > 1)
    		{
     
    			var Img_preload_src = new Array();
     
    			// Préchargement des images
    			for (var i=0; i < nb_tab_temoignages_js; i++)
    				{
    					if (typeof tab_temoignages_js[i]['image'] != 'undefined')
    					{
    						Img_preload_src[tab_temoignages_js[i]['image']] = new Image();
    						Img_preload_src[tab_temoignages_js[i]['image']].src = tab_temoignages_js[i]['image'];
    					}
    				}
     
     
    			function Boucle(inc)
    				{
    					// Je définie l'indice en fonction de la position dans le tableau
    					var inc = inc < nb_tab_temoignages_js ? inc : 0;
     
    					// Je nettoie l'élément cible du texte
    					var noeuds = id_mes.childNodes.length;
    					for (var i = 0; i < noeuds; i++) 	   
    						{				   
    							id_mes.removeChild(id_mes.firstChild);
    						}
     
     
    					// Je prends l'adresse de la photo enregistrée dans le tableau; il faudrait remplacer adresse_image_vide.jpg par l'adresse d'une imaage transparente (au cas ou l'image ne serait pas renseignée dans le tableau php)
    					var image = typeof tab_temoignages_js[inc]['image'] != 'undefined' ? tab_temoignages_js[inc]['image'] : 'sites/all/images/empty_tem.jpg' ;
     
    					// Je cherche le texte enregistré dans le tableau
    					var texte = typeof tab_temoignages_js[inc]['text'] != 'undefined' ? tab_temoignages_js[inc]['text'] : '';
    					// je crée un noeud texte avec le texte récupéré
    					texte = document.createTextNode(texte);
     
    					// J'insère la photo dans l'élément cible
    					id_pho.src = image;
     
    					// J'insère le noeud texte dans l'élément cible
    					id_mes.appendChild(texte);
     
    					// J'incrémente
    					inc++;
     
    					// J'appelle la fonction Boucle toutes les sept secondes
    					setTimeout(function(){Boucle(inc)},'7000');   
     
    				}
     
     
    		Boucle(0);
     
    		}			
    }
     
     
    // Fonction de chargement onload 
    function AddLoad_JS(func) {
     
                    if (window.addEventListener)
                    {
                            window.addEventListener("load", func, false);
                    }
           else if (document.addEventListener)
                    {
                            document.addEventListener("load", func, false);
                    }
           else if (window.attachEvent)
                    {
                            window.attachEvent("onload", func);
                    }
    }
     
     
    // Chargement onload de la fonction Message avec ses paramètres id texte et id image
    AddLoad_JS(function(){Message('news_texte','news_photo')});
     
     
    </script>
    dans la CSS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #conteneur {
    	height : 175px;
    	width : 100%;
    	border : 0px solid black;
    }
     
    #conteneur td {
    	padding : 10px;
    }
    Dans le BODY :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <table id = "conteneur">
       <tr>
          <td width="75px">
             <img id = "news_photo" src= "<?php if (isset($tab_temoignages[0]['image'])) echo htmlentities($tab_temoignages[0]['image']); else echo 'sites/all/images/empty_tem.jpg' ?>" />
          </td>
          <td id = "news_texte">
             <?php if (isset($tab_temoignages[0]['text'])) echo htmlentities($tab_temoignages[0]['text']); ?>
          </td>
       </tr>
    </table id = "conteneur">
    Je me répète, les problèmes étant : si caractère spécial il y a, null s'affiche au lieu du témoignage et les témoignages s'entrent dans le fichier au lieu d'être entrés simplement par un formulaire d'insertion de news (ça aurait été moi je m'en fiche mais c'est pour quelqu'un de non initié, et je fais pas ça par plaisir je vous assure :p)

    Merci encore =)

  11. #11
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Dis toi qu'il faut d'abord qu'on comprenne avant de proposer la moindre solution.
    On n'est pas devin


    Essai la fonction comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    htmlentities($variable, ENT_QUOTES, 'UTF-8');
    Ma remarque au tout début reste cependant toujours valable.
    Faire un LIMIT 1 fera que MySQL retournera qu'1 seule et unique news.
    Si tu veux obtenir 10 news par exemple, il faut faire : LIMIT 10.
    Si tu veux toutes les news, faut supprimer le LIMIT.

  12. #12
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Par défaut
    J'ai essayé pas mal de trucs pour arriver à ça finalement, je pense que ce sera plus précis que ce que je demandais au départ et moins flou pour vous.

    Avant que vous voyez le code, petit rappel et récapitulatif :
    Je souhaite afficher sur la page d'accueil les 10 dernières news une par une, chacune étant séparée d'un laps de temps prédéfini. En dessous, idem pour les témoignages. Sur une page news.php, afficher les 10 dernières news de façon classique, mais ça j'ai réussi à le faire. Il ne me manque plus que l'affichage de ces news de façon dynamique sur la page d'accueil.
    Je vous laisse voir les résultats sur la page concernée : http://www.i-mediaservices.com

    mon code maintenant :

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    <?php
     
    // On se connecte à notre base  
    $base = mysql_connect ('***', '***', '***');  
    mysql_select_db('***', $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, image_news, texte_news FROM news ORDER BY date ASC LIMIT 10';  
     
    // 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 !<br />'.$sql.'<br />'.mysql_error());  
     
    // On construit le tableau $tab_news qui sera repris par le code javascript pour le défilement
    $tab_news = array();
     
    $i = 0;
    while($resultat = mysql_fetch_assoc($req))
    {
    $tab_news[$i]['image_news'] = $resultat['image_news'];
    $tab_news[$i]['texte_news'] = $resultat['texte_news'];
    $i++;
    }
     
     
    $sql = 'SELECT image_tems, texte_tems FROM temoignages ORDER BY date ASC';  
     
    // On lance la requête (mysql_query)  
    $req = mysql_query($sql) or die(mysql_error()) ;
     
    // On construit le tableau $tab_tems qui sera repris par le code javascript pour le défilement
    $tab_tems = array();
     
    $i = 0;
    while($resultat = mysql_fetch_assoc($req))
    {
    $tab_tems[$i]['image_tems'] = $resultat['image_tems'];
    $tab_tems[$i]['texte_tems'] = $resultat['texte_tems'];
    $i++;
    }
     
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document sans nom</title>
     
     
    <script type="text/javascript">
     
    function Message(tab,id_message,id_photo)
    {
     
            var id_mes = document.getElementById(id_message);
            var id_pho = document.getElementById(id_photo);
     
     
            var tab_news_js = tab;
     
            // Nombre d'éléments du tableau
            var nb_tab_news_js = tab_news_js.length;
     
     
            // Si les éléments cibles existent et le tableau a plus d'un élément
            if (id_mes && id_pho && nb_tab_news_js > 1)
                    {
     
                            var Img_preload_src = new Array();
     
                            // Préchargement des images
                            for (var i=0; i < nb_tab_news_js; i++)
                                    {
                                            if (typeof tab_news_js[i]['image'] != 'undefined')
                                            {
                                                    Img_preload_src[tab_news_js[i]['image']] = new Image();
                                                    Img_preload_src[tab_news_js[i]['image']].src = tab_news_js[i]['image'];
                                            }
                                    }
     
     
                            function Boucle(inc)
                                    {
                                            // Je définie l'indice en focntion de la position dans le tableau
                                            var inc = inc < nb_tab_news_js ? inc : 0;
     
                                            // Je nettoie l'élément cible du texte
                                            var noeuds = id_mes.childNodes.length;
                                            for (var i = 0; i < noeuds; i++)          
                                                    {                                  
                                                            id_mes.removeChild(id_mes.firstChild);
                                                    }
     
     
                                            // Je prend l'adresse de la photo enregistrée dans le tableau; au cas où l'image ne serait pas renseignée dans le tableau php, image "transparente" (empty)
                                            var image = typeof tab_news_js[inc]['image'] != 'undefined' ? tab_news_js[inc]['image'] : 'sites/all/images/cube1.jpg' ;
     
                                            // Je cherche le texte enregistré dans le tableau
                                            var texte = typeof tab_news_js[inc]['texte_news'] != 'undefined' ? tab_news_js[inc]['texte_news'] : '';
                                            // Je crée un noeud texte avec le texte récupéré
                                            texte = document.createTextNode(texte);
     
                                            // J'insère la photo dans l'élément cible
                                            id_pho.src = image;
     
                                            // J'insère le noeud texte dans l'élément cible
                                            id_mes.appendChild(texte);
     
                                            // J'incrémente
                                            inc++;
     
                                            // J'appelle la fonction Boucle toutes les sept secondes
                                            setTimeout(function(){Boucle(inc)},'7000');  
     
                                    }
     
     
                    Boucle(0);
     
                    }                      
    }
    </script>
     
    <style type="text/css">
    .conteneur td {
            padding : 10px;
    }
    .conteneur {
            height : 175px;
            width : 100%;
            border : 0px solid black;
    }
    </style>
     
    </head>
     
    <body>
     
    <table class = "conteneur">
            <tr>
                    <td>
                            <img id = "image_news" src="<?php if (isset($tab_news[0]['image_news'])) echo $tab_news[0]['image_news']; else echo 'sites/all/images/cube1.jpg'?>" />
                    </td>
                    <td id = "texte_news">
                            <?php if (isset($tab_news[0]['texte_news'])) echo $tab_news[0]['texte_news'];?>
                    </td>
            </tr>
    </table>
     
    <table class = "conteneur">
            <tr>
                    <td>
                            <img id = "image_tems" src="<?php if (isset($tab_tems[0]['image_tems'])) echo $tab_tems[0]['image_tems']; else echo 'sites/all/images/cube2.jpg'?>" />
                    </td>
                    <td id = "texte_tems">
                            <?php if (isset($tab_tems[0]['texte_tems'])) echo $tab_tems[0]['texte_tems'];?>
                    </td>
            </tr>
    </table>
     
    </body>
    </html>
    On m'a proposé de mettre le code suivant à à l'intérieur des balises <tr> mais il n'affichait plus rien, il y a une erreur quelque part...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                    <?php
                            while($resultat = mysql_fetch_assoc($req))
                            {
                                    echo '<td>'.htmlspecialchars($resultat['image_news']).'</td>';
                                    echo '<td>'.htmlspecialchars($resultat['auteur']).'</td>';
                                    echo '<td>'.htmlspecialchars($resultat['titre']).'</td>';
                                    echo '<td>'.htmlspecialchars($resultat['date']).'</td>';
                                    echo '<td>'.htmlspecialchars($resultat['texte_news']).'</td>';
                            }
                    ?>

  13. #13
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Il y a pleins de choses à dire, malheureusement, pas de solutions.

    La 1ère , c'est que tu as jQuery, et je remarque que tu ne l'exploite pas du tout, se qui est fort dommage, et j'ai l'impression que le code JS serait d'un truc comme DreamWeaver, se qui est tout aussi dommage.

    Pour ma part, au lieu de débugger ce code JS, je te conseillerais de faire des recherche sur le Net (genre diaporama, sidebar, slideshow, etc ...), et particulièrement des plugins jQuery, car il y en a particulièrement bien fichus, et en plus avec des options, donc malléable.


    En tout cas, il manque des code, car dès le départ il y a une fonction (un objet en faite) Message, et je ne vois nulle part un endroit où il serait appelé.
    De plus, le principe adopté (sauf erreur) est depuis pas mal de temps abandonné par les développeurs, car il a le gros inconvénient de ne pas aider le référencement.
    Le principe ici, c'est de stocker les infos dans un tableau JS, et ensuite générer le HTML, ceci de manière périodique.
    Toutes les images ne se trouveraient pas dans le corps de la page HTML, ce qui fait que les moteurs de recherche ne les récupèreront jamais.

    D'ailleurs, se qui t'as été suggéré de faire, c'est justement de générer toutes les images, titres, etc ... dans le corps HTML, se qui se fait actuellement, mais ce n'est pas en phase se que prévoit le JS.
    Enfin, c'est se que je pense.


    En gros, tu as ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            var tab_news_js = tab;
     
            // Nombre d'éléments du tableau
            var nb_tab_news_js = tab_news_js.length;
    Malheureusement, le tableau JS tab n'existe pas (je ne l'ai pas vu du moins) ce qui provoquera une erreur.
    Ce tableau devrait à mon sens être créé en boucle (via Php) pour contenir tous les éléments (image, titre, texte, etc ...) et ça de manière global.



    Donc cherche bien, tu as plus à gagner qu'à perdre du temps à corriger ce code.
    En tout cas, je ne perdrais pas mon temps à le faire, j'y vois aucun intérêt.

  14. #14
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Par défaut
    OK... j'avais déjà cherché, mal surement... je vais recommencer

    Je posterai ici si je trouve, donc jusque là c'est que j'ai pas trouvé, si quelqu'un peut me poster quelque chose ici... allez, j'y vais...

    Merci encore

    Edit : je cherche et je ne tombe que sur des scripts où l'installation manque, ou avec des requêtes SQL qui ne fonctionnent pas, et je ne suis même pas sûr que ce que je souhaite y soit, le fait que ça soit "dynamique" snif... help

  15. #15
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Edit : je cherche et je ne tombe que sur des scripts où l'installation manque, ou avec des requêtes SQL qui ne fonctionnent pas, et je ne suis même pas sûr que ce que je souhaite y soit, le fait que ça soit "dynamique" snif... help
    Quand on récupère des code ou autre librairie, plugins, à part très très rare exceptions, c'est jamais du pile poil, faut toujours adapter le code à son projet.
    En tout cas, j'ai jamais vu un code où je me suis contenté à faire un simple copier/collé, franchement, jamais (ou j'ai oublié).


    En tout cas, rien qu'en 2 minutes (avec jquery diaporama) j'ai vu ceci :
    http://www.guillaumevoisin.fr/blog/d...le-avec-jquery
    Avec le code, JS + CSS, avec une démo donc on voit bien que c'est fonctionnel).
    Je ne vois aucune raison de ne pas pouvoir exploiter ce tuto (et il doit en avoir d'autres, car ce genre de code foisonne.
    (tu remarqueras que toutes les images sont dans le corps de la page HTML).

  16. #16
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Par défaut
    Merci beaucoup je commençais à désespérer.
    Mais je te promets que j'ai cherché, c'est juste que je suis plus habitué à rechercher du Tekken ou du Michael Jackson que des scripts ^^

    Je m'y mets dès maintenant, j'espère réussir à l'exploiter !




    Edit : j'essaie de mettre une image et un texte à côté. Mais après ça, j'essaie de faire en sorte que les images et le texte soient rentrés par BDD, mais je n'y arrive pas... =( je suis totalement perdu entre tous ces langages et l'inclusion l'un dans les autres... j'essaie encore mais j'ai bien envie d'abandonner, j'suis pas encore assez fort en code ='(

  17. #17
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Par défaut
    Bon, j'abandonne, je pète un cable, tout ça me gonfle à un point j'en peux plus.

    Finalement, j'afficherai la dernière news et puis c'est tout.

    Mais mon dernier problème : je n'arrive pas à afficher UNE SIMPLE DATE ET HEURE !!! ça me saoule !!!

    Voici mon code :

    formulaire :

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <?php
     
    	// on teste si le formulaire a été validé
    if (isset($_POST['go']) && $_POST['go']=='Poster la news') {
       // on se connecte à notre base
    	$base = mysql_connect ('***', '***', '***');
    	mysql_select_db('***', $base);
     
       // on teste la déclaration de nos variables
       if (!isset($_POST['auteur']) || !isset($_POST['titre']) || !isset($_POST['texte_news'])) {
          $erreur = 'Les variables nécessaires au script ne sont pas définies.';
       }
       else {
          if (empty($_POST['auteur']) || empty($_POST['titre']) || empty($_POST['texte_news'])) {
             $erreur = 'Au moins un des champs est vide.';
          }
          // si tout est bon, on peut commencer l'insertion dans la base
          else {
             // lancement de la requête d'insertion
             $sql = 'INSERT INTO news VALUES("", "'.mysql_escape_string($_POST['auteur']).'", "'.mysql_escape_string($_POST['titre']).'", "'.mysql_escape_string($_POST['image_news']).'", "'.date("d-m-Y H:i:s").'", "'.mysql_escape_string($_POST['texte_news']).'")';
     
             // 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) 
             mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
     
             // on ferme la connexion à la base de données
             mysql_close();
     
             // on redirige vers la page d'accueil du site (attention, cette redirection ne fonctionne qui si vous avez placé cette page dans un répertoire à partir de la racine du site). Si ce n'est pas le cas, veuillez entrer ici le bon chemin d'accès afin de retomber sur la page d'accueil du site. 
             header('Location: index.php');
             // on termine le script courant
             exit();
          }
       }
    }
     
    ?>
    <html>
    <head>
    <title>Insertion d'une nouvelle news</title>
    </head>
     
    <body>
     
    <!-- on fait pointer le formulaire vers la page traitant les données -->
    <form action="insert_news.php" method="post">
    	<table>
    		<tr>
    			<td>
    				<span class="gras">Auteur :</span>
    			</td>
    			<td>
    				<input type="text" name="auteur" maxlength="30" size="50" value="<?php if (isset($_POST['auteur'])) echo htmlentities(trim($_POST['auteur'])); ?>">
    			</td>
    		</tr>
    		<tr>
    			<td>
    				<span class="gras">Titre :</span>
    			</td>
    			<td>
    				<input type="text" name="titre" maxlength="50" size="50" value="<?php if (isset($_POST['titre'])) echo htmlentities(trim($_POST['titre'])); ?>">
    			</td>
    		</tr>
    		<tr>
    			<td>
    				<span class="gras">Image</span>
    				<input type="text" style="display:none" name="nbr_photo" value="0" id="nbr_photo" />
    			</td>
    			<td>
    				<input type="file" name="image_news" id="image_news" value="image_news" />
    			</td>	
    		</tr>
    		<tr>
    			<td>
    				<span class="gras">News :</span>
    			</td>
    			<td>
    				<textarea name="texte_news" cols="50" rows="10"><?php if (isset($_POST['texte_news'])) echo htmlentities(trim($_POST['texte_news'])); ?></textarea>
    			</td>
    		</tr>
    		<tr>
    		<td>
    			<td align="right">
    				<input type="submit" name="go" value="Poster la news">
    			</td>
    		</tr>
    	</table>
    </form>
    <?php
    // on affiche les erreurs éventuelles  
    if (isset($erreur)) echo '<br /><br />',$erreur;  
    ?>
    </body>
    </html>
    Affichage de la news :

    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
    46
    47
    48
    49
    <?php
     
    // on se connecte à notre base  
    $base = mysql_connect ('***', '***', '***');  
    mysql_select_db('***', $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, image_news, texte_news FROM news ORDER BY date ASC LIMIT 10';  
     
    // 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 !<br />'.$sql.'<br />'.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&eacute;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 
    	'<table>
    		<tr>
    			<td>';
    				echo htmlentities(trim($data['image_news']));
    			echo 
    			'</td>
    			<td>';
    				echo '<br />News de : ' , htmlentities(trim($data['auteur'])) , '<br />'; 
    				echo 'Titre : ' , htmlentities(trim($data['titre'])) , '<br />';
    				echo 'Post&eacute;e le : ' , $jour , '/' , $mois , '/' , $an , ' &agrave; ' , $heure , ':' , $min , ':' , $sec , '<br /><br />'; 
    				echo 'News : ' , nl2br(htmlentities(trim($data['texte_news']))) , '<br /><br /><br />'; 
    			echo '</td>
    		</tr>
    	</table>';
       }
    }
    // 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 ();  
    ?>
    Après ça, terminé.

  18. #18
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Par défaut
    Salut,

    Inutile de t'embêter à faire un sscanf() sur la date, les fonctions SQL sont biens plus performantes et simples à utiliser.

    Dans ta requête, à la place de la date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ....., ..., date, ....
    Tu mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ...., ..., DAY(date) AS jour, MONTH(date) AS mois, YEAR(date) AS annee, HOUR(date) AS heure, MINUTE(date) AS minutes, SECOND(date) AS secondes ..........
    Ensuite il te suffit de récupérer les valeurs que tu veux dans ta boucle (qui est d'ailleurs inutile si tu souhaites afficher qu'une seule news) avec $data['jour'], $data['mois'], etc.

    Pour en revenir à ton problème javascript : il faut d'abord créer une boucle qui enverra toutes les news (ou les 5 dernières, comme tu veux), à l'intérieur du javascript. En suite il faut créer un span avec un ID (par exemple, "news"), qui changera toutes les x secondes.

    Ca se présenterait comme ça :
    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
     
    <script language="javascript">
    <!--
    var newsActuelle;
    var news;
    newsActuelle = 0;
    news = new Array();
    <?php
    $i = 0;
    while(mysql_fetch_arrray(/*.........*/)) {
        // ici, au lieu d'avoir des echo, tu as des $newsFormattee .=
        // Par exemple, au lieu d'avoir echo $data['titre'], tu te retrouves avec $newsFormattee .= $data['titre']
        echo 'news['.$i.'] = "' . preg_replace('#[\r\n]#', '', str_replace('"', '\"', $newsFormattee)) . '";' . PHP_EOL;
        // On s'assure d'échapper tous les sauts de ligne 
        // (eh oui js n'aime pas les sauts de ligne non échappés en milieu de chaîne),
        // et de remplacer les " par des \" pour l'échappement des guillemets côté javascript
        $i++;
    }
    ?>
    function changerNews() {
        newsActuelle++;
     
     
     
        document.getElementById("news").innerHTML = news[newsActuelle];
    }
    document.getElementById("news").innerHTML = news[0];
    setInterval(5000, "changerNews()");
    //-->
    </script>
    <span id="news">&nbsp;</span>

  19. #19
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Par défaut
    J'ai essayé le code suivant, je n'ai pas réussi à faire marcher la date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = 'SELECT auteur, titre, DAY(date) AS jour, MONTH(date) AS mois, YEAR(date) AS annee, HOUR(date) AS heure, MINUTE(date) AS minutes, SECOND(date) AS secondes, image_news, texte_news FROM news ORDER BY date DESC LIMIT 1'; 
     
    (...)
     
    echo 'Post&eacute;e le : ' , $data['jour'] , '/' , $data['mois'] , '/' , $data['annee'] , ' &agrave; ' , $data['heure'] , ':' , $data['minutes'] , ':' , $data['secondes'] , '<br /><br />';
    aperçu sur : http://www.i-mediaservices.com

    Pour le js, laisse tomber c'est gentil, mais je suis pas assez fort, je peux pas manipuler ça aisément, je ferai le même code, sans js, avec php et sql et je ferai afficher la dernière news seulement.

    Autre chose : au lieu d'afficher une image, c'est une date qui s'affiche. Dans ma table j'ai mis le type blob, mais je suis pas vraiment sur, j'ai jamais essayé vraiment d'insérer une image par formulaire dans une BDD...

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql = 'INSERT INTO news VALUES("", "'.mysql_escape_string($_POST['auteur']).'", "'.mysql_escape_string($_POST['titre']).'", "'.mysql_escape_string($_POST['image_news']).'", "'.date("d-m-Y H:i:s").'", "'.mysql_escape_string($_POST['texte_news']).'")';
     
    (...)
     
    <td>
    	<input type="file" name="image_news" id="image_news" value="image_news" />
    </td>

  20. #20
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Dans ma table j'ai mis le type blob, mais je suis pas vraiment sur, j'ai jamais essayé vraiment d'insérer une image par formulaire dans une BDD...
    Veux tu réellement enregistrer les images dans la BDD, dans un champ de type BLOB (qui est une technique peu répandue car cela va faire énormément grossir la Bdd) ?
    Ou enregistrer juste le nom de l'image, et déposer l'image dans un répertoire prévu à l'avance (qui est la technique la plus répandue) ?

    Peu importe, pour récupérer l'image, ça se fait avec $_FILES
    $_FILES['une_image']['tmp_name'] (répertoire temporaire)
    $_FILES['une_image']['name'] (nom de l'image)
    $_FILES['une_image']['size'] (taille de l'image)
    $_FILES['une_image']['error'] (0 si pas d'erreur, sinon un N° d'erreur)

    Ensuite on utilise move_uploaded_file(chemin_image_temporaire, chemin_image_a_déposer) pour déplacer l'image du répertoire temporaire vers celui où on souhaite la déposer.
    Doc sur -> http://fr2.php.net/manual/fr/functio...oaded-file.php

    Mais si c'est l'image qui est à placer dans le champ de type BLOB, faut récupérer le flux de l'image dans le répertoire temporaire ($_FILES['une_image']['tmp_name']).
    Ensuite insérer ce flux dans la Bdd (donc pas de move_uploaded_file() ici)

Discussions similaires

  1. [RegExp] Détecter des combinaisons dans une chaine une par une
    Par vermine dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/06/2010, 13h22
  2. Réponses: 5
    Dernier message: 09/07/2008, 11h26
  3. [JTextArea] Récupérer les lignes unes par unes
    Par Jean-Claude Dusse dans le forum Composants
    Réponses: 1
    Dernier message: 25/05/2008, 08h43
  4. Réponses: 2
    Dernier message: 05/06/2006, 08h54
  5. [CR] Grouper des minutes par cinq et non une par une.
    Par Etienne51 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 14/09/2004, 13h45

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