Page 1 sur 2

Probleme diaporama

Posté : 27 août 2005, 07:20
par muriel
Bonjour à tous,

Je vais essayé d'etre clair et succinscte dans mes explications mais ça va etre dur, voila j'ai un super diaporama qui marche tres bien grace à vous, dans ma base je mets 3 images par enregistrement j'ai ensuite fait une page qui les montrent en petit et quand on clique sur l'une ou l'autre ça ouvre un diaporama, mais le probleme c'est que je peux cliquer sur n'importe laquelle c'est toujours par la photo1 que le diaporama commence et ce que je souhaiterai pouvoir faire grace à votre aide c'est qu'en fonction de la photo sur laquelle on clique ça ouvre en premier la photo sur laquelle on a cliqué au commencement du diaporama,l'appel du diaporama se fait par l'id de l'enregistrement:
echo "<a href=\"javascript:void(0)\" onClick=\"window.open ('diaporama.php?id=$id', null, 'width=510, height=640,status=no,[b]toolbar=no[/b], menubar=no, scrollbars=yes, resizable=no, left=0, top=10');\">";
et maintenant, je vous donne mon code, il y a un script au debut qui fait marcher le diaporama...
<!-- DEBUT DU SCRIPT DIAPORAMA-->
<script
LANGUAGE="JavaScript">
var current = 0;

function next(){ // forward one image
if(document.formname.slide[current+1]){
document.images.show.src = document.formname.slide[current+1].value;
document.formname.slide.selectedIndex = ++current;}
else{first();}}

function previous(){ // back on image
if((current-1) >= 0){
document.images.show.src = document.formname.slide[current-1].value;
document.formname.slide.selectedIndex= --current;}
else{last();}}

function first(){ // jump to first image
current=0;
document.images.show.src = document.formname.slide[0].value;
document.formname.slide.selectedIndex=0;}

function last(){ // this is jump to last image
current=(document.formname.slide.length-1);
document.images.show.src = document.formname.slide[current].value;
document.formname.slide.selectedIndex=current;}

function ap(text){ // this controls the auto-play and/or auto-stop
document.formname.slidebutton.value=(text == "Stop") ? "Start" : "Stop";
rotate();}

function change(){ // this is for the pulldown menu
current=document.formname.slide.selectedIndex;
document.images.show.src = document.formname.slide[current].value;}

function rotate() {
if (document.formname.slidebutton.value == "Stop") {
current = (current == document.formname.slide.length-1) ? 0 : current+1;
document.images.show.src = document.formname.slide[current].value;
document.formname.slide.selectedIndex = current;
window.setTimeout("rotate()", 4000);}}
<!-- FIN DU SCRIPT DIAPORAMA--></script> </p>

<?
// connection à la base de données
mysql_connect("localhost","root","");
mysql_select_db("");

$req = mysql_query("SELECT * FROM annonces WHERE id='$id'");
$i=0; 
{
$id=mysql_result($req,$i,"id"); 
$Image1 = mysql_result($req,$i,"Image1");
$Image2 = mysql_result($req,$i,"Image2");
$Image3 = mysql_result($req,$i,"Image3");

echo "<body onLoad='ap(this.value);'>";

echo "
<form name='formname'>
<img src='images_upload/' name='show' border=4 width=467>
<select name='slide' onChange='change();' size='0' style='display: none'>";


echo "<option value='images_upload/$Image1'>
<option value='images_upload/$Image2'></option>
<option value='images_upload/$Image3'></option>
}
<tr><center>
<td align='center' bgcolor='#BDC5FE'><input type='button' onclick='first();'
value='|<<' title='Jump to beginning' style='border:1'> <input
type='button' onclick='previous();' value='<<' title='Last Picture'
style='border:1 '> <input type='button' name='slidebutton'
onClick='ap(this.value);' value='Start' title='AutoPlay'
style='width:75;border:1'> <input type='button' onclick='next();'
value='>>' title='Next Picture' style='border:1'> <input
type='button' onclick='last();' value='>>|' title='Jump to end'
style='border:1'></center>";
}
?>
j'ai essayé de faire un $QUERY_STRING pour qu'il affiche l'image, ça marche sur la premiere image mais ensuite n'ayant pas l'id puisque là ma requete est
'diaporama.php?Image1=$Image1'
il affiche les autres images de mon premier enregistrement uniquement.

En esperant ne pas avoir été trop brouillon dans mon explication, d'avance un grand merci aux personnes qui auront le courage de tout lire,
en esperant que c'est possible !!!

Posté : 27 août 2005, 08:05
par Cyrano
Attention, tu as une erreur ici:
echo "<option value='images_upload/$Image1'> 
Tu utilises des apostrophes: la variable PHP qui se trouve à l'intérieur ne sera pas interprétée mais envoyée telle quelle. Pour corriger ce défaut, il faut faire une concaténation en séparant le PHP du reste comme ceci:
echo "<option value='images_upload/". $Image1 ."'>" 

Posté : 27 août 2005, 09:08
par muriel
Bonjour Cyrano,

Contente de te voir à cette heure sur le forum, et merci d'aider une debutante à bien ecrire ces variables !!!
mais je crois que cela ne change pas mon probleme ? mais peut etre que je me trompe et alors un petit coup de pouce de ta part serait le bienvenue pour une explication plus... etendue...

d'avance merci pour le temps que tu me consacre cyrano,

Posté : 27 août 2005, 09:18
par muriel
cyrano j'ai quand meme une petite question, quand j'ouvre mon pop up l'image qui s'ouvre est Image1 mais par contre quand je fais un clic de droit dans le pop up mais en dehors de l'image j'ai bien la bonne id de l'image sur laquelle j'ai cliqué qui apparait, alors je me disait que si j'arrivais à trouver un code qui dirait de prendre l'id, et d'afficher l'image de cette id, cela pourrait peut etre marcher ?
je ne sais pas ce que tu en penses ? c'est juste une idée !!!

Posté : 27 août 2005, 09:26
par Cyrano
L'idée est parfaitement logique en effet. Il faut voir le fonctionnement de ton diaporama: à priori (je ne l'ai pas scruté à la loupe) il commence par défaut par l'image 1, ce qui est somme toute logique, mais on devrait pouvoir lui dire de commencer à l'image 3 ou 2. Il faut donc isoler la partie du code qui détermine quelle image on affiche.

Posté : 27 août 2005, 09:55
par muriel
alors voici la partie du code qui détermine quelle image on affiche
<img src='images_upload/' name='show' border=4 width=467>
alors il faut savoir que si j'enleve
echo "<body onLoad='ap(this.value);'>";
l'image ne s'affiche plus et je suis donc obligée de changer
<img src='images_upload/' name='show' border=4 width=467>
en
<img src='images_upload/". $Image1 ."' name='show' border=4 width=467>
et c'est là que le probleme est, c'est que je voudrais créer une variable qui s'appelerai $toto par exemple qui remplacerai Image1 et qui m'inclurait Image1, Image2, Image3 en prenant comme element l'id et le N° de l'image appelé...

et là je l'avoue je reflechis, je lis tous ce que je peux mais j'aurai besoin d'une ame charitable qui aurait un peu pitié de moi et qui pourrait peut etre me créer cela ou me mettre sur la voie.....

je sais que j'en demande beaucoup cyrano et je ne veux pas t'embeter avec mes problemes de code mais si tu as une solution sans que ça te prenne trop de temps alors je prend avec plaisir...

encore merci de tes reponses cyrano

Posté : 27 août 2005, 10:22
par Cyrano
Bon, j'ai repris ton code et je l'ai un peu remanié pour le rendre plus lisible: j'ai corrigé certains détails, mais pas tout et j'ai ajouté des commentaire avec des observations ou des questions. Je te laisse analyser parce que sans certains éléments, je ne peux pas vraiment te répondre.
<script language="JavaScript" type="text/javascript">
/* DEBUT DU SCRIPT DIAPORAMA */
var current = 0;

function next()
{
    // forward one image
    if(document.formname.slide[current+1])
    {
        document.images.show.src = document.formname.slide[current+1].value;
        document.formname.slide.selectedIndex = ++current;
    }
    else
    {
        first();
    }
}

function previous()
{
    // back on image
    if((current-1) >= 0)
    {
        document.images.show.src = document.formname.slide[current-1].value;
        document.formname.slide.selectedIndex= --current;
    }
    else
    {
        last();
    }
}

function first()
{
    // jump to first image
    current=0;
    document.images.show.src = document.formname.slide[0].value;
    document.formname.slide.selectedIndex=0;
}

function last()
{
    // this is jump to last image
    current=(document.formname.slide.length-1);
    document.images.show.src = document.formname.slide[current].value;
    document.formname.slide.selectedIndex=current;
}

function ap(text)
{
    // this controls the auto-play and/or auto-stop
    document.formname.slidebutton.value=(text == "Stop") ? "Start" : "Stop";
    rotate();
}

function change()
{
    // this is for the pulldown menu
    current=document.formname.slide.selectedIndex;
    document.images.show.src = document.formname.slide[current].value;
}

function rotate()
{
    if (document.formname.slidebutton.value == "Stop")
    {
        current = (current == document.formname.slide.length-1) ? 0 : current+1;
        document.images.show.src = document.formname.slide[current].value;
        document.formname.slide.selectedIndex = current;
        window.setTimeout("rotate()", 4000);
    }
}
/* FIN DU SCRIPT DIAPORAMA */
</script>
<!-- ICI, il manque la balise </head>, le JavaScript ne peut pas être avant la balise body et après la balise </head> -->
<?
// connection à la base de données
mysql_connect("localhost","root","");
mysql_select_db("");

$req = mysql_query("SELECT * FROM annonces WHERE id='". $id ."'");
$i=0;
/* ICI il manque quelque chose: l'accolade qui suit ne correspond à rien... ? */
{
    $id=mysql_result($req,$i,"id");
    $Image1 = mysql_result($req,$i,"Image1");
    $Image2 = mysql_result($req,$i,"Image2");
    $Image3 = mysql_result($req,$i,"Image3");
?>
<!-- ICI dans la balise <body>, la valeur de l'évènement onLoad se base sur quoi pour envoyer une valeur ? -->
<body onLoad="ap(this.value);">
<form name="formname" action="">
  <img src="images_upload/" name="show" border="4" width="467">
  <select name="slide" onChange="change();" size="0" style="display: none">
  <option value="images_upload/<?php echo($Image1); ?>"></option>
  <option value="images_upload/<?php echo($Image2); ?>"></option>
  <option value="images_upload/<?php echo($Image3); ?>"></option>
  </select>
<?php
}
?>
<table summary="">
  <tr>
    <td align="center" bgcolor="#BDC5FE">
      <center>
      <input type="button" onclick="first();" value="|<<" title="Jump to beginning" style="border:1"> 
      <input type="button" onclick="previous();" value="<<" title="Last Picture" style="border:1 "> 
      <input type="button" name="slidebutton" onClick="ap(this.value);" value="Start" title="AutoPlay" style="width:75;border:1"> 
      <input type="button" onclick="next();" value=">>" title="Next Picture" style="border:1"> 
      <input type="button" onclick="last();" value=">>|" title="Jump to end" style="border:1">
      </center>
    </td>
  </tr>
</table>
</form>
<?php
/* ICI une accolade fermante ne correspondant à aucune accolade ouvrante ... ? */
}
?>

Posté : 27 août 2005, 10:50
par muriel
je te remercie cyrano, je pense que c'est la premiere fois que j'ai une page de code aussi bien faite, j'ai fait un copié/collé et je l'ai mis directement à la place du mien, rien que cela c'est de l'or pour moi car je vais pouvoir faire la meme chose sur mes autres pages avec ton exemple.

Pour en revenir à la question qui me parait la plus pertinente pour la resolution du probleme c'est la valeur du onload ?
<body onLoad="ap(this.value);"> 
alors cela va te paraitre completement absurde mais je n'en suis pas sur mais pour moi la valeur c'est l'id de l'image car quand je l'enleve il ne trouve plus les images juste j'ai une belle croix rouge à la place de l'image et l'url de l'image est: http://127.0.0.1/mabase/images_upload/
par contre pour le pop up l'url est: http://127.0.0.1/mabase/diaporama.php?id=1
ou id=2 quand c'est l'image 2 et ainsi de suite...

en esperant avoir repondu à tes questions le plus clairement possible,

je ne sais plus comment te remercier, alors je vais me repeter encore MERCIII... pour ton aide

Posté : 27 août 2005, 11:14
par Cyrano
J'avoue que je cale un peu. Complète ou corrige les élément signalés, on verra ensuite, j'ai du mal avec le JavaScript.

À ce propos, je déménage le sujet vers le Forum approprié.

Posté : 27 août 2005, 11:46
par muriel
voici le code corrigé cyrano
<head>
<script language="JavaScript" type="text/javascript"> 
/* DEBUT DU SCRIPT DIAPORAMA */ 
var current = 0; 

function next() 
{ 
    // forward one image 
    if(document.formname.slide[current+1]) 
    { 
        document.images.show.src = document.formname.slide[current+1].value; 
        document.formname.slide.selectedIndex = ++current; 
    } 
    else 
    { 
        first(); 
    } 
} 

function previous() 
{ 
    // back on image 
    if((current-1) >= 0) 
    { 
        document.images.show.src = document.formname.slide[current-1].value; 
        document.formname.slide.selectedIndex= --current; 
    } 
    else 
    { 
        last(); 
    } 
} 

function first() 
{ 
    // jump to first image 
    current=0; 
    document.images.show.src = document.formname.slide[0].value; 
    document.formname.slide.selectedIndex=0; 
} 

function last() 
{ 
    // this is jump to last image 
    current=(document.formname.slide.length-1); 
    document.images.show.src = document.formname.slide[current].value; 
    document.formname.slide.selectedIndex=current; 
} 

function ap(text) 
{ 
    // this controls the auto-play and/or auto-stop 
    document.formname.slidebutton.value=(text == "Stop") ? "Start" : "Stop"; 
    rotate(); 
} 

function change() 
{ 
    // this is for the pulldown menu 
    current=document.formname.slide.selectedIndex; 
    document.images.show.src = document.formname.slide[current].value; 
} 

function rotate() 
{ 
    if (document.formname.slidebutton.value == "Stop") 
    { 
        current = (current == document.formname.slide.length-1) ? 0 : current+1; 
        document.images.show.src = document.formname.slide[current].value; 
        document.formname.slide.selectedIndex = current; 
        window.setTimeout("rotate()", 4000); 
    } 
} 
/* FIN DU SCRIPT DIAPORAMA */ 
</script> 
</head>

<!-- ICI, il manque la balise </head>, le JavaScript ne peut pas être avant la balise body et après la balise </head> --> 
<? 
// connection à la base de données 
mysql_connect("localhost","root",""); 
mysql_select_db("immobilier"); 

$req = mysql_query("SELECT * FROM annonces WHERE id='". $id ."'"); 
$i=0; 
/* J'ai enlevé l'accolade qui correspondait à rien.. ? */ 

    $id=mysql_result($req,$i,"id"); 
    $Image1 = mysql_result($req,$i,"Image1"); 
    $Image2 = mysql_result($req,$i,"Image2"); 
    $Image3 = mysql_result($req,$i,"Image3"); 
?> 
<!-- ICI dans la balise <body>, la valeur de l'évènement onLoad se base sur quoi pour envoyer une valeur ? sur l'id de la photo --> 
<body onLoad="ap(this.value);"> 
<form name="formname" action=""> 
  <img src="images_upload/" name="show" border="4" width="467"> 
  <select name="slide" onChange="change();" size="0" style="display: none"> 
  <option value="images_upload/<?php echo($Image1); ?>"></option> 
  <option value="images_upload/<?php echo($Image2); ?>"></option> 
  <option value="images_upload/<?php echo($Image3); ?>"></option> 
  </select> 

<table summary=""> 
  <tr> 
    <td align="center" bgcolor="#BDC5FE"> 
      <center> 
      <input type="button" onclick="first();" value="|<<" title="Jump to beginning" style="border:1"> 
      <input type="button" onclick="previous();" value="<<" title="Last Picture" style="border:1 "> 
      <input type="button" name="slidebutton" onClick="ap(this.value);" value="Start" title="AutoPlay" style="width:75;border:1"> 
      <input type="button" onclick="next();" value=">>" title="Next Picture" style="border:1"> 
      <input type="button" onclick="last();" value=">>|" title="Jump to end" style="border:1"> 
      </center> 
    </td> 
  </tr> 
</table> 
</form> 
[/php]

Posté : 27 août 2005, 12:00
par Cyrano
Bon, ok. Alors le problème de l'évènement dans la balise body, c'est que çe ne peut pas fonctionner sur la valeur de l'identifiant de la photo: la fonction ap() attend en paramètre la valeur du bouton "Start" ou "Stop". Si tu mets "Start", ça veut dire que le diaporama va démarrer au chargement de la page, sinon, autant ne rien mettre du tout. Mais si tu veux lancer automatiquement le diaporama, alors il faut mettre onload="ap('Start')" mais ça ne dit pas où le commencer.

Donc il faut savoir à quel endroit on démarre le diaporama. Ce que j'essayerais (sous réserve, à tester) ce serait d'envoyer un second paramètre, en l'occurence l'image en cours. Le code complet ressemblerait donc à ceci:
<html>
<head>
<title></title>
<script language="JavaScript" type="text/javascript">
/* DEBUT DU SCRIPT DIAPORAMA */
var current = 0;

function next()
{
    // forward one image
    if(document.formname.slide[current+1])
    {
        document.images.show.src = document.formname.slide[current+1].value;
        document.formname.slide.selectedIndex = ++current;
    }
    else
    {
        first();
    }
}

function previous()
{
    // back on image
    if((current-1) >= 0)
    {
        document.images.show.src = document.formname.slide[current-1].value;
        document.formname.slide.selectedIndex= --current;
    }
    else
    {
        last();
    }
}

function first()
{
    // jump to first image
    current=0;
    document.images.show.src = document.formname.slide[0].value;
    document.formname.slide.selectedIndex=0;
}

function last()
{
    // this is jump to last image
    current=(document.formname.slide.length-1);
    document.images.show.src = document.formname.slide[current].value;
    document.formname.slide.selectedIndex=current;
}

function ap(text, img)
{
    // this controls the auto-play and/or auto-stop
    document.formname.slidebutton.value=(text == "Stop") ? "Start" : "Stop";
    rotate(img);
}

function change()
{
    // this is for the pulldown menu
    current=document.formname.slide.selectedIndex;
    document.images.show.src = document.formname.slide[current].value;
}

function rotate(img)
{
    if (document.formname.slidebutton.value == "Stop")
    {
        current =(img = "") ? ((current == document.formname.slide.length-1) ? 0 : current+1) : img;
        document.images.show.src = document.formname.slide[current].value;
        document.formname.slide.selectedIndex = current;
        window.setTimeout("rotate()", 4000);
    }
}
/* FIN DU SCRIPT DIAPORAMA */
</script>
</head>

<!-- ICI, il manque la balise </head>, le JavaScript ne peut pas être avant la balise body et après la balise </head> -->
<?
// connection à la base de données
mysql_connect("localhost","root","");
mysql_select_db("immobilier");

$req = mysql_query("SELECT * FROM annonces WHERE id='". $id ."'");
$i=0;
    $id=mysql_result($req,$i,"id");
    $Image1 = mysql_result($req,$i,"Image1");
    $Image2 = mysql_result($req,$i,"Image2");
    $Image3 = mysql_result($req,$i,"Image3");
?>
<!-- ICI dans la balise <body>, la valeur de l'évènement onLoad se base sur quoi pour envoyer une valeur ? sur l'id de la photo -->
<body onLoad="ap('Start', document.formname.slide[current].value);">
<form name="formname" action="">
  <img src="images_upload/" name="show" border="4" width="467">
  <select name="slide" onChange="change();" size="0" style="display: none">
  <option value="images_upload/<?php echo($Image1); ?>"></option>
  <option value="images_upload/<?php echo($Image2); ?>"></option>
  <option value="images_upload/<?php echo($Image3); ?>"></option>
  </select>
  <table summary="">
    <tr>
      <td align="center" bgcolor="#BDC5FE">
        <center>
        <input type="button" onclick="first();" value="|<<" title="Jump to beginning" style="border:1">
        <input type="button" onclick="previous();" value="<<" title="Last Picture" style="border:1 ">
        <input type="button" name="slidebutton" onClick="ap(this.value, document.formname.slide[current].value);" value="Start" title="AutoPlay" style="width:75;border:1">
        <input type="button" onclick="next();" value=">>" title="Next Picture" style="border:1">
        <input type="button" onclick="last();" value=">>|" title="Jump to end" style="border:1">
        </center>
      </td>
    </tr>
  </table>
</form>
</body>
</html>
Teste ça et dis nous si ça fonctionne ou non, et si ça ne fonctionne pas, détaille autant que possible ce qui se passe.

Posté : 27 août 2005, 12:35
par muriel
je crois qu'on y est presque car j'ai une erreur de javascript à l'ouverture du pop up qui est:

Code : Tout sélectionner

ligne: 71 car:9 erreur: 'document.formname.slide[...]value' a la valeur NULL ou n'est pas un objet code:0 URL: http://127.0.0.1/mabase/diaporama.php?id=1
quand je clique sur mon image pour ouvrir le pop up il y a sur la premiere photo du diaporama une croix rouge, l'url de la photo etant: http://127.0.0.1/mabase/images_upload/
mais apres quand je clique sur le bouton next ou previous le diaporama fonctionne tres bien,
il ne reste plus qu'à renseigner l'url pour que la premiere photo s'affiche avec l'id de celle ci... et la je vous fait confiance je suis sur que vous allez trouver...

Posté : 27 août 2005, 12:45
par Cyrano
Ça veut dire que lorsqu'on clique sur la photo, il manque un paramètre pour définir une des options "selected". Quel code il y a dans le lien de la photo ?

Posté : 27 août 2005, 13:02
par muriel
je sens que je vais passer un mauvais quart d'heure....
j'ose le montrer, mais ne crie pas trop fort car la variable n'est pas vraiment comme demandé, mais je ne suis pas arrivé à la mettre comme tu la fais sur le diaporama, donc je te la donne:
echo "<a href=\"javascript:void(0)\" onClick=\"window.open ('diaporama.php?id='$id', null, 'width=510, height=640,status=no,[b]toolbar=no[/b], menubar=no, scrollbars=yes, resizable=no, left=0, top=10');\">";
en esperant que tu ne partes pas en hurlant, en me laissant avec mon diaporama et un petit coup de phpdebutant, lolll !!!!

Posté : 27 août 2005, 13:15
par Cyrano
Même problème de concaténation que pour l'autre:
echo "<a href=\"javascript:void(0)\" onClick=\"window.open ('diaporama.php?id=". $id .", null, 'width=510, height=640,status=no,toolbar=no, menubar=no, scrollbars=yes, resizable=no, left=0, top=10');\">";
Ensuite, dans l'autre script, il faut récupérer cet id avec
$id = $_GET['id'];