Probleme diaporama

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme diaporama

par muriel » 27 août 2005, 14:24

merci cyrano pour le mal que tu te donnes, alors je crois avoir bien compris que
$id = $_GET['id'];
permettait de recuperer l'id pour pouvoir ensuite s'en servir dans un bout de code, mais j'avoue avoir un probleme pour imaginer et ensuite integrer ce code dans le mien pour arriver à faire que d'une maniere caché il comprenne que l'appel des photos se fait par le biais de l'id sans que dans

Code : Tout sélectionner

<img src="images_upload/" name="show" border="4" width="467">
n'apparaisse l'id mais que le nom de la photo appelé...sinon il ne m'ouvrira pas l'image.

je ne suis pas sur de m'etre fait comprendre dans mon explication ci-dessus, si c'etait le cas n'hesite pas à me demander plus d'eclaircissement, car je crois avoir compris ce que tu veux que je fasse mais malheureusement mes connaissances en php sont trop limités pour pouvoir imaginer ce code qui pourrait paraitre simple à une personne qui connaitrait bien le php, mais qui pour moi est un veritable casse tete !!!
j'attends patiemment que tu me donnes une astuce

en tout cas je te remercie de ta perspicacité et de ta patience, c'est vraiment tres sympathique de ta part....

par Cyrano » 27 août 2005, 13:15

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'];

par muriel » 27 août 2005, 13:02

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 !!!!

par Cyrano » 27 août 2005, 12:45

Ç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 ?

par muriel » 27 août 2005, 12:35

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...

par Cyrano » 27 août 2005, 12:00

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.

par muriel » 27 août 2005, 11:46

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]

par Cyrano » 27 août 2005, 11:14

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é.

par muriel » 27 août 2005, 10:50

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

par Cyrano » 27 août 2005, 10:22

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 ... ? */
}
?>

par muriel » 27 août 2005, 09:55

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

par Cyrano » 27 août 2005, 09:26

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.

par muriel » 27 août 2005, 09:18

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 !!!

par muriel » 27 août 2005, 09:08

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,

par Cyrano » 27 août 2005, 08:05

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 ."'>"