Aller au contenu

Problème de variable dynamique


Sujets conseillés

Posté

Bonjour,

je suis actuellement entrain de développer un système de news défilante et dynamique. C'est à dire que les informations seront entrées dans la base de données et un script ira les extraire de la base afin de les diffuser sur la page d'accueil du site.

Pour cela, les informations sont intégré en javascript dans un Array.

Mon problème se situe, au niveau de mon PHP lorsque je vais les chercher et que je veux les stocker chacune dans une variable.

Je m'explique : Je me connecte à ma base de données, j'ouvre la table correspondante et je sélectionne tout. Une fois que c'est fait, je compte le nombre de ligne que l'on définira pour cet exemple au nombre de 3.

Mon tableau quant à lui commence à 0, donc je défini que l'id du message correspond au nombre de lignes (3) - 1. J'aurais donc 0, 1, 2 .

Après ce que je voudrais c'est pouvoir intégrer dynamiquement chaque message dans sa variable javascript correspondante. Donc j'ai fait une boucle PHP qui commence à i=0 et qui se termine donc à l'id du message qui est le nombre de lignes - 1. Et dans cette boucle je dis que pour chaque ligne le titre de la news correspond à la premiere colonne de la table, que le corps du texte c'est la 2eme ... . Et mon problème arrive à ce niveau là.

En fait quand je cherche les infos (au nombre de 3 donc) ce code me sorts bien les 3 infos comme je veux, mais la variable i quant à elle reste à 0 pour chacune des news.

Pour que je puisse avoir la variable i qui passe à 0 1 2 il faut que je rajoute encore une boucle FOR dans ma boucle WHILE, mais là le problème c'est que la variable i aura bien pour valeur 0 1 2 mais chaque news sera répété autant de fois que de lignes (donc ici 3 fois).

Pour être plus clair je vais vous montrer le petit bout de code.

	<?php
include "inc/db.lib.inc.php";

$db = db_connect();
db_database();

$query = "SELECT * FROM krea_news";
$req = mysql_query($query)or die('erreur');
$nb_ligne = mysql_num_rows($req);
$id_mess = $nb_ligne-1;

for ($i=0; $i<=$id_mess; $i++)
{
while($row = mysql_fetch_row($req))
{

$titre[$i] = $row[1];
$message[$i] = $row[2];
$photo[$i] = $row[3];

$mess[$i]="ejs_scroll_message[$i]='<a href='#' class='ejs_scroll'><b><i>$titre[$i]</i></b><br/><br/>$message[$i]<br/></a>';";
echo $mess[$i]." ";
}
}
?>

Avec ce code j'obtiens ce résultat :

ejs_scroll_message[0]='Test news1 insérer une news .... essayons !';

ejs_scroll_message[0]='bonjour on va la tester encore une fois';

ejs_scroll_message[0]='bonjour2 dddddddddddddddddd';

Comme vous pouvez le voir ejs_scroll_message reste toujours à 0.

Si je veux donc incrémenter la variable i je suis obligé de rajouter une boucle FOR dans mon WHILE ce qui me donne :

	   <?php
include "inc/db.lib.inc.php";

$db = db_connect();
db_database();

$query = "SELECT * FROM krea_news";
$req = mysql_query($query)or die('erreur');
$nb_ligne = mysql_num_rows($req);
$id_mess = $nb_ligne-1;

for ($i=0; $i<=$id_mess; $i++)
{
while($row = mysql_fetch_row($req))
{
for ($i=0; $i<=$id_mess; $i++)
{
$titre[$i] = $row[1];
$message[$i] = $row[2];
$photo[$i] = $row[3];

$mess[$i]="ejs_scroll_message[$i]='<a href='#' class='ejs_scroll'><b><i>$titre[$i]</i></b><br/><br/>$message[$i]<br/></a>';";
echo $mess[$i]." ";
}
}
}
?>

Ce qui me donne donc comme résultat :

ejs_scroll_message[0]='Test news1 insérer une news .... essayons !';

ejs_scroll_message[1]='Test news1 insérer une news .... essayons !';

ejs_scroll_message[2]='Test news1 insérer une news .... essayons !';

ejs_scroll_message[0]='bonjour on va la tester encore une fois';

ejs_scroll_message[1]='bonjour on va la tester encore une fois';

ejs_scroll_message[2]='bonjour on va la tester encore une fois';

ejs_scroll_message[0]='bonjour2 dddddddddddddddddd';

ejs_scroll_message[1]='bonjour2 dddddddddddddddddd';

ejs_scroll_message[2]='bonjour2 dddddddddddddddddd';

Or ce que moi j'aimerais trouver c'est le code me donnant ce résultat ci :

ejs_scroll_message[0]='Test news1 insérer une news .... essayons !';

ejs_scroll_message[1]='bonjour on va la tester encore une fois';

ejs_scroll_message[2]='bonjour2 dddddddddddddddddd';

Je sais que ça doit ne tenir à pas grand chose, mais je tourne en rond.

Je n'arrive pas à faire la bonne boucle pour arriver à ce résultat.

Si quelqu'un pouvait bien m'aider, je lui en serait très reconnaissant.

Merci d'avance,

Arnaud S.

Posté

Bonjour,

Essayes cela :

 include "inc/db.lib.inc.php";

$db = db_connect();
db_database();

$query = "SELECT * FROM krea_news";
$req = mysql_query($query)or die('erreur');

for ($i=0; $row = mysql_fetch_row($req); $i++)
{
$titre[$i] = $row[1];
$message[$i] = $row[2];
$photo[$i] = $row[3];

$mess[$i]="ejs_scroll_message[$i]='<a href='#' class='ejs_scroll'><b><i>$titre[$i]</i></b><br/><br/>$message[$i]<br/></a>';";
echo $mess[$i]." ";
}

Ca devrait repondre a ta question

Posté (modifié)

Merci beaucoup ta solution marche parfaitement, je venais justement poster pour dire que entre temps on m'a un code à essayer car en fait j'avais pas remarqué que j'executait la chose deux fois ce qui faisait que au lieu de l'executer 3 fois, je l'executais 9 fois !!!!

Manque de rigueur quand tu nous tiens ^^

En tout cas merci pour ta soluce, elle marche impec aussi.

J'aurais maintenant une autre question qui découle de ce code PHP généré.

Maintenant avec cette boucle qui me génère mes messages javascript, j'ai essayé donc d'intégrer ces derniers à mon script.

Le script à la base était comme ceci :

CODE

ejs_scroll_largeur = 265;

ejs_scroll_hauteur = 142;

ejs_scroll_bgcolor = '#FFFFFF';

/* Mettre ici le chemin de l'image de fond */

ejs_scroll_background = "";

/* Mettre ici le temps en secondes */

ejs_scroll_pause_seconde = 10;

ejs_scroll_message = new Array;

ejs_scroll_message[0]='<a href="#" class="ejs_scroll">Bonjour, nous effectuons actuellement la mise en ligne de notre site web. Si vous rencontrez des difficultés de navigation, vous pouvez nous faire part de vos problèmes grâce à notre rubrique contact. Veuillez nous excuser de la gêne occasionnée.<br/><br/> ----------------------------------------</a>';

ejs_scroll_message[1]='<a href="#" class="ejs_scroll" target="_blank"> <b><i>Idées sorties</i></b><br/><br/>La Sarre A Contes<br/> Festival itinérant <br/> du 19 juillet au 10 août 2008.<br/><br/> ----------------------------------------</a>';

function d(texte)

{

document.write(texte);

}

d('<DIV ID=ejs_scroll_relativ STYLE="position:relative;width:'+ejs_scroll_largeur+';height:'+ejs_scroll_hauteur+';background-color:'+ejs_scroll_bgcolor+';background-image:url('+ejs_scroll_background+')">');

d('<DIV ID=ejs_scroll_cadre STYLE="position:absolute;width:'+(ejs_scroll_largeur-8)+';height:'+(ejs_scroll_hauteur-8)+';top:4;left:4;clip:rect(0 '+(ejs_scroll_largeur-8)+' '+(ejs_scroll_hauteur-8)+' 0)">');

d('<div id=ejs_scroller_1 style="position:absolute;width:'+(ejs_scroll_largeur-8)+';left:0;top:0;" CLASS=ejs_scroll>'+ejs_scroll_message[0]+'</DIV>');

d('<div id=ejs_scroller_2 style="position:absolute;width:'+(ejs_scroll_largeur-8)+';left:0;top:'+ejs_scroll_hauteur+';" CLASS=ejs_scroll>'+ejs_scroll_message[1]+'</DIV>');

d('</DIV></DIV>');

ejs_scroll_mode =1;

ejs_scroll_actuel = 0;

function ejs_scroll_start()

{

if(ejs_scroll_mode == 1)

{

ejs_scroller_haut = "ejs_scroller_1";

ejs_scroller_bas = "ejs_scroller_2";

ejs_scroll_mode = 0;

}

else

{

ejs_scroller_bas = "ejs_scroller_1";

ejs_scroller_haut = "ejs_scroller_2";

ejs_scroll_mode = 1;

}

ejs_scroll_nb_message = ejs_scroll_message.length-1;

if(ejs_scroll_actuel == ejs_scroll_nb_message)

ejs_scroll_suivant = 0;

else

ejs_scroll_suivant = ejs_scroll_actuel+1;

if(document.getElementById)

document.getElementById(ejs_scroller_bas).innerHTML = ejs_scroll_message[ejs_scroll_suivant];

ejs_scroll_top = 0;

if(document.getElementById)

setTimeout("ejs_scroll_action()",ejs_scroll_pause_seconde*1000)

}

function ejs_scroll_action()

{

ejs_scroll_top -= 1;

document.getElementById(ejs_scroller_haut).style.top = ejs_scroll_top;

document.getElementById(ejs_scroller_bas).style.top = ejs_scroll_top+ejs_scroll_hauteur;

if((ejs_scroll_top+ejs_scroll_hauteur) > 0)

setTimeout("ejs_scroll_action()",10)

else

ejs_scroll_stop()

}

function ejs_scroll_stop()

{

ejs_scroll_actuel = ejs_scroll_suivant;

ejs_scroll_start()

}

addLoadEvent(ejs_scroll_start);

On y voit bien les 2 lignes ejs_scroll_message[0] et ejs_scroll_message[1] que j'ai rentré en dur mais qui maintenant sont générées dynamiquement avec le code javascript. On voit bien que pour le ejs_scroll_message[0] on a une mise en page particulière et que pour les autres ejs_scroll_message qui suivent la mise en page sera unique.

Ce que j'ai donc essayé de faire c'est d'intégrer mon code PHP à mon script javascript afin d'intégrer les variable dynamique et de chercher et d'afficher donc autant de news qu'il y en a dans la base de donnée.

Voila le code que j'ai donc mis en place :

CODE

<script language="javascript" type="text/javascript">

ejs_scroll_largeur = 265;

ejs_scroll_hauteur = 142;

ejs_scroll_bgcolor = '#FFFFFF';

/* Mettre ici le chemin de l'image de fond */

ejs_scroll_background = "";

/* Mettre ici le temps en secondes */

ejs_scroll_pause_seconde = 10;

function d(texte)

{

document.write(texte);

}

ejs_scroll_message = new Array;

d('<DIV ID=ejs_scroll_relativ STYLE="position:relative;width:'+ejs_scroll_largeur+';height:'+ejs_scroll_hauteur+';background-color:'+ejs_scroll_bgcolor+';background-image:url('+ejs_scroll_background+')">');

d('<DIV ID=ejs_scroll_cadre STYLE="position:absolute;width:'+(ejs_scroll_largeur-8)+';height:'+(ejs_scroll_hauteur-8)+';top:4;left:4;clip:rect(0 '+(ejs_scroll_largeur-8)+' '+(ejs_scroll_hauteur-8)+' 0)">');

<?php

$db = db_connect();

db_database();

$query = "SELECT * FROM krea_news";

$req = mysql_query($query)or die('erreur');

$nb_ligne = mysql_num_rows($req);

$id_mess = $nb_ligne-1;

for ($i=0; $i<=$id_mess; $i++)

{

$row = mysql_fetch_row($req);

$titre[$i] = $row[1];

$message[$i] = $row[2];

$photo[$i] = $row[3];

$mess[$i]="ejs_scroll_message[$i]='<a href='#' class='ejs_scroll'><b><i>$titre[$i]</i></b><br/><br/>$message[$i]<br/></a>';";

if($i==0)

{

echo "d('<div id=ejs_scroller_1 style='position:absolute;width:'+(ejs_scroll_largeur-8)+';left:0;top:0;' CLASS=ejs_scroll>'+$mess[$i]+'</DIV>');";

}

else

{

echo "d('<div id=ejs_scroller_2 style='position:absolute;width:'+(ejs_scroll_largeur-8)+';left:0;top:'+ejs_scroll_hauteur+';' CLASS=ejs_scroll>'+$mess[$i]+'</DIV>');";

}

}

?>

d('</DIV></DIV>');

ejs_scroll_mode =1;

ejs_scroll_actuel = 0;

function ejs_scroll_start()

{

if(ejs_scroll_mode == 1)

{

ejs_scroller_haut = "ejs_scroller_1";

ejs_scroller_bas = "ejs_scroller_2";

ejs_scroll_mode = 0;

}

else

{

ejs_scroller_bas = "ejs_scroller_1";

ejs_scroller_haut = "ejs_scroller_2";

ejs_scroll_mode = 1;

}

ejs_scroll_nb_message = ejs_scroll_message.length-1;

if(ejs_scroll_actuel == ejs_scroll_nb_message)

ejs_scroll_suivant = 0;

else

ejs_scroll_suivant = ejs_scroll_actuel+1;

if(document.getElementById)

document.getElementById(ejs_scroller_bas).innerHTML = ejs_scroll_message[ejs_scroll_suivant];

ejs_scroll_top = 0;

if(document.getElementById)

setTimeout("ejs_scroll_action()",ejs_scroll_pause_seconde*1000)

}

function ejs_scroll_action()

{

ejs_scroll_top -= 1;

document.getElementById(ejs_scroller_haut).style.top = ejs_scroll_top;

document.getElementById(ejs_scroller_bas).style.top = ejs_scroll_top+ejs_scroll_hauteur;

if((ejs_scroll_top+ejs_scroll_hauteur) > 0)

setTimeout("ejs_scroll_action()",10)

else

ejs_scroll_stop()

}

function ejs_scroll_stop()

{

ejs_scroll_actuel = ejs_scroll_suivant;

ejs_scroll_start()

}

addLoadEvent(ejs_scroll_start);

</script>

Mais bien sûr lorsque je regarde ma page en question, les news ne s'affichent bien sûr pas.

Est ce que j'ai mal intégré le PHP dans le javascript ? :s :s

Je m'excuse pour toutes ces question, mais j'essaie de comprendre et de trouver mon erreur mais je n'y arrive pas :(

Modifié par bibi-arnaud
Posté

C'est simple :

- PHP le code s'execute cote serveur

- Javascript le code s'execute cote client

Tu ne peux donc pas executer du PHP dans du javascript (le PHP ne sera pas interprete).

Il va falloir que tu trouves une autre solution, tu peux regarder du cote d'AJAX pour obtenir le resultat escompter.

Posté
C'est simple :

- PHP le code s'execute cote serveur

- Javascript le code s'execute cote client

Tu ne peux donc pas executer du PHP dans du javascript (le PHP ne sera pas interprete).

Il va falloir que tu trouves une autre solution, tu peux regarder du cote d'AJAX pour obtenir le resultat escompter.

AH zut, là suis vraiment bloqué :( car AJAX je n'en ai jamais fait ça va donc être balaise de mettre un truc comme ça en place avec AJAX.

Merci quand même.

Je vais essayer de trouver une solution de mon côté, mais si quelqu'un aurait une solution à me proposer je ne serais pas contre.

En tout cas merci pour ta réponse rapide RDD.

Posté

Mon problème est résolu :) !!!!

Merci beaucoup à Heyoan du forum Alsacreation qui a réussi à me guider dans un autre raisonnement de construction du code ainsi qu'à tous ceux du forum webmaster hub qui ont eux aussi essayés de m'aider.

J'ai réussi à aller pêcher toutes mes infos dans la bases de données et les importées dans mon code javascript.

J'affiche donc ici mon code final au cas où des personnes seraient elles aussi confrontées à un tel problème en voulant insérer du contenu issu d'une base de données dans du script JAVASCRIPT.

CODE

<script language="javascript" type="text/javascript">

ejs_scroll_largeur = 265;

ejs_scroll_hauteur = 142;

ejs_scroll_bgcolor = '#FFFFFF';

/* Mettre ici le chemin de l'image de fond */

ejs_scroll_background = "";

/* Mettre ici le temps en secondes */

ejs_scroll_pause_seconde = 10;

function d(texte)

{

document.write(texte);

}

ejs_scroll_message = new Array;

d('<DIV ID=ejs_scroll_relativ STYLE="position:relative;width:'+ejs_scroll_largeur+';height:'+ejs_scroll_hauteur+';background-color:'+ejs_scroll_bgcolor+';background-image:url('+ejs_scroll_background+')">');

d('<DIV ID=ejs_scroll_cadre STYLE="position:absolute;width:'+(ejs_scroll_largeur-8)+';height:'+(ejs_scroll_hauteur-8)+';top:4;left:4;clip:rect(0 '+(ejs_scroll_largeur-8)+' '+(ejs_scroll_hauteur-8)+' 0)">');

<?php

$db = db_connect();

db_database();

$query = "SELECT * FROM krea_news";

$req = mysql_query($query)or die('erreur');

$nb_ligne = mysql_num_rows($req);

$id_mess = $nb_ligne-1;

for ($i=0; $i<=$id_mess; $i++)

{

$row = mysql_fetch_row($req);

$titre[$i] = $row[1];

$message[$i] = $row[2];

$photo[$i] = $row[3];

?>

ejs_scroll_message[<?php echo $i;?>]=<?php echo '"<b><i>'.$titre[$i].'</i></b><br/><br/>'.$message[$i].'<br/>"';?>;

<?php

if($i==0)

{

?>

d('<div id=ejs_scroller_1 style="position:absolute;width:'+(ejs_scroll_largeur-8)+';left:0;top:0;" CLASS=ejs_scroll>'+ejs_scroll_message[<?php echo $i?>]+'</DIV>');

<?php

}

else

{

?>

d('<div id=ejs_scroller_2 style="position:absolute;width:'+(ejs_scroll_largeur-8)+';left:0;top:'+ejs_scroll_hauteur+';" CLASS=ejs_scroll>'+ejs_scroll_message[<?php echo $i;?>]+'</DIV>');

<?php

}

}

?>

d('</DIV></DIV>');

ejs_scroll_mode =1;

ejs_scroll_actuel = 0;

function ejs_scroll_start()

{

if(ejs_scroll_mode == 1)

{

ejs_scroller_haut = "ejs_scroller_1";

ejs_scroller_bas = "ejs_scroller_2";

ejs_scroll_mode = 0;

}

else

{

ejs_scroller_bas = "ejs_scroller_1";

ejs_scroller_haut = "ejs_scroller_2";

ejs_scroll_mode = 1;

}

ejs_scroll_nb_message = ejs_scroll_message.length-1;

if(ejs_scroll_actuel == ejs_scroll_nb_message)

ejs_scroll_suivant = 0;

else

ejs_scroll_suivant = ejs_scroll_actuel+1;

if(document.getElementById)

document.getElementById(ejs_scroller_bas).innerHTML = ejs_scroll_message[ejs_scroll_suivant];

ejs_scroll_top = 0;

if(document.getElementById)

setTimeout("ejs_scroll_action()",ejs_scroll_pause_seconde*1000)

}

function ejs_scroll_action()

{

ejs_scroll_top -= 1;

document.getElementById(ejs_scroller_haut).style.top = ejs_scroll_top;

document.getElementById(ejs_scroller_bas).style.top = ejs_scroll_top+ejs_scroll_hauteur;

if((ejs_scroll_top+ejs_scroll_hauteur) > 0)

setTimeout("ejs_scroll_action()",10)

else

ejs_scroll_stop()

}

function ejs_scroll_stop()

{

ejs_scroll_actuel = ejs_scroll_suivant;

ejs_scroll_start()

}

addLoadEvent(ejs_scroll_start);

</script>

Ce sujet est donc maintenant [RESOLU ] :D :D ... enfin !!

Maintenant me reste à essayer de "customiser" ce script en rajoutant une photo rattaché à chaque news.

Merci à tous !!

Arnaud S.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...