Page 1 sur 2

Bug avec la fonction "envoyer à un ami "

Posté : 17 avr. 2006, 20:34
par Stegue
Bonjour,
J'ai installé une fonction mail pour "envoyer une citation à un ami".
Tout fonctionne bien mais une fois par page!
J'm'explique:
j'affiche mes citations par 4 et j'ai donc 4 fois l'enveloppe "envoyer à un ami". Si je clique par ex sur la 2eme, elle est envoyée mais si je veux envoyer la 3eme, ça marche plus ! et ni la 1 et ni la 4.
<a HREF="#" onClick="window.open('./formulaire.php?id_article=<?php echo"$row[citation]"; ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=300, height=300');return(false)"><img src="images/envoyer.gif" alt="envoyez cette citation à un ami !" border="0" align="absmiddle"></a>

Posté : 18 avr. 2006, 05:50
par Ultiny
C'est plutôt la page "formulaire.php" qu'il faudrais nous présenter. Visiblement c'est elle qui comporte la fonction mail.

Posté : 18 avr. 2006, 07:22
par Stegue
Voici le formulaire:

Code : Tout sélectionner

<form method="post" action="envoiform1.php" enctype="multipart/form-data"> <span class="Style3">Envoyer la citation &agrave;&nbsp;(entrez l'email du destinataire) :</span><br> <input name="adresse" class="Style4" value="" size="50"> <br> <span class="Style3">De la part de&nbsp;(identifiez-vous) : </span><br> <input name="from" type="text" class="Style4" value="" size="50"> <br> <span class="Style3">La citation:</span><br> <textarea name="id_article" cols="47" class="Style4"> <?php echo "$id_article"; ?></textarea> <br> <center><input type="submit" class="Style3" value="Envoyer"> </center> </form>

Posté : 18 avr. 2006, 07:32
par Ultiny
Nan mais ce qu'on veu voir c'est ta fonction mail()

Pour l'instant tu n'a donné que du HTML est c'est rarement là que ça pose problème.

Posté : 18 avr. 2006, 12:51
par Stegue
OK, voici le script mail, mais pourquoi ?
Il est appelé par le formulaire et c'est ce formulaire qui ne s'ouvre pas !
<?php


$email = $_POST['adresse']; 
$email =strip_tags($adresse);
$from = $_POST['from']; 
$from =strip_tags($from);
$citation = $_POST['id_article']; 
$citation =strip_tags($id_article);
$sujet =" Envoi d'une citation ";
$corpmail=" vous envoie une citation.\n

Citation : $citation

// on vérifie que la personne l' adresse mail.

if (empty($email) )
echo "Vous avez oublié les champs suivants, <a href='../formulaire.php'>cliquez ici</a> pour les remplir.<br>" ;
     {
	  if(empty($email))     { echo "L'adresse email.<br><br>" ;} 
         

	 

// Si tout est OK, le mail est envoyé .
      else {
      mail("$email","$sujet","$corpmail","$from"); 
       echo "Votre citation a bien été envoyée. " ;} 
	 }
     
?>

Posté : 18 avr. 2006, 13:51
par Ryle
Tu devrais virer le "return(false)" à la fin de ton javascript...

Essaye aussi éventuellement de donner un vrai nom à ta popup (sans espace ni caractère spéciaux) à la place de '_blank', du genre "envoyer" :)

Posté : 18 avr. 2006, 18:47
par Stegue
Voilà, c'est fait mais c'est toujours pareil !
Parfois, j'arrive en en envoyer 2 de la même page. :?

Posté : 18 avr. 2006, 20:08
par Stegue
Je viens d'essayer ce script sur une nouvelle page php vierge, avec simplement mes 4 citations et là, ça marche.
Y'a une incompatibilité avec ma page.
Je suis mal ! :?

Posté : 18 avr. 2006, 21:04
par Stegue
Bon, j'ai fait le tri dans ma page et je pense que c'est lié avec ma requete d'affichage des citations page par page.
Je cherche mais je ne vois pas.
Si quelqu'un a du courage, je le remercie à l'avance.
<?php
$page = isset($_GET['page']) ? $_GET['page'] : ''; 

// Prepare le requete MySql
$requete = "SELECT citateurs_celebres.nom, citateurs_celebres.prenom, citations_celebres.citation FROM citateurs_celebres LEFT JOIN citations_celebres ON citateurs_celebres.id = citations_celebres.numcitateur";
$ret = mysql_query($requete);
// Variable nombre d'enreg par page
$limit=4;
if($debut==""){$debut=0;}
$debut=$page*$limit;
// Compte le nombre de champ
$nb_total=mysql_num_rows($ret);
// Requete
$limite=mysql_query("$requete limit $debut,$limit");


//Affichage le contenu de votre table
//avec une limite, dans l'exemple $limit est à 4

$limit_str = "LIMIT ". $page * $limit .",$limit";

$result = mysql_query("
                      SELECT citateurs_celebres.nom, citateurs_celebres.prenom, citations_celebres.citation, citations_celebres.id
                      FROM citateurs_celebres LEFT JOIN citations_celebres ON citateurs_celebres.id = citations_celebres.numcitateur 
                      ORDER BY rand() 
                      ASC $limit_str");
while ($row =mysql_fetch_array ($result) )
{
// affiche les different champs
echo"$row[citation]";
echo"<br />";
?>

<span class="Style13">__</span><a href="#" onclick="window.open('envoi_cit/formulaire.php?id_article=<?php echo"$row[citation]"; ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=400, height=270');"><img src="images/envoyer.gif" alt="envoyez cette citation &agrave; un ami !" border="0" align="absmiddle" /></a>
<span class="Style13">_________</span><span class="Style27">
<?php
echo"$row[prenom] ";
echo"$row[nom]"; 
echo"<br /> <br />";
}
?>

</span>

<?php
// Affiche le page par page avec ses liens
if ($page>0) {
$precedent=$page-1;
echo "<a href=\"$PHP_SELF?page=$precedent\">Precedent </a>";
}

$i=0;
$j=1;

if($nb_total>$limit) {
while($i<($nb_total/$limit)) {
if($i!=$page){echo "<a href=\"$PHP_SELF?page=$i\">$j</a> ";}
else { echo "<b>$j</b>";}
$i++;$j++;
}
}

if($debut+$limit<$nb_total) {
$suivant=$page+1;
echo "<a href=\"$PHP_SELF?page=$suivant\">Suivant</a>";
}


Posté : 18 avr. 2006, 22:34
par Stegue
J'ai épuré un max ce script:
<?php
$result = mysql_query(" SELECT citateurs_celebres.nom, citateurs_celebres.prenom, citations_celebres.citation, citations_celebres.id
                      FROM citateurs_celebres LEFT JOIN citations_celebres ON citateurs_celebres.id = citations_celebres.numcitateur 
                      ORDER BY rand() 
                      LIMIT 0, 5");
while ($donnees =mysql_fetch_array ($result) )
{

// affiche les different champs
echo $donnees['citation'];?> 

<a href="#" onclick="window.open('envoi_cit/formulaire.php?id_article=<?php echo $donnees['citation']; ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=400, height=270');"><img src="images/envoyer.gif" alt="envoyez cette citation &agrave; un ami !" border="0" align="absmiddle" /></a>

<?php
echo $donnees['prenom'];
echo $donnees['nom'];
echo"<br /> <br />";
}
?>
Alors qu'en refaisant un affichage normal comme ceci, ça marche
<?php
$reponse = mysql_query("SELECT citateurs_celebres.nom, citateurs_celebres.prenom, citations_celebres.citation FROM citateurs_celebres LEFT JOIN citations_celebres ON citateurs_celebres.id = citations_celebres.numcitateur ORDER BY rand() LIMIT 0, 5"); 

echo mysql_error();
// On fait une boucle pour lister tout ce que contient la table :

while ($donnees = mysql_fetch_array($reponse) )
{
?>

<p>
<?php echo $donnees['citation']; ?><br />
<a href="#" onclick="window.open('envoi_cit/formulaire.php?id_article=<?php echo $donnees['citation']; ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=400, height=270');"><img src="images/envoyer.gif" alt="envoyez cette citation &agrave; un ami !" border="0" align="absmiddle" /></a>
<span <?php echo $donnees['prenom']; ?> <?php echo $donnees['nom']; ?>

Posté : 19 avr. 2006, 06:57
par Stegue
Grrrr! Je me suis fait avoir avec le cache internet (malgré l'effacement sous FF)
Le problème vient du code javascript ou du formulaire:
Car ce script appele le formulaire et y insere la citation

Code : Tout sélectionner

<a href="#" onclick="window.open('envoi_cit/formulaire.php?id_article=<?php echo $donnees['citation']; ?>
Mais si je met :
<?php echo $row ['citation']; ?>
à la place de :
<?php echo $donnees['citation']; ?>
Je n'ai pas d'erreur et la citation ne s'affiche pas dans le formulaire.(normal)

Et c'est uniquement dans ce cas que l'appel du formulaire marche à tous les coups :?: :?: :?: :?:

Posté : 19 avr. 2006, 07:24
par Stegue
En appelant l'id de la citation plutôt que la citation elle-même, ça marche ??

Pourtant mon champ citation dans le formulaire est bien un textarea !

Je suis tout prêt du but mais j'comprends plus rien ! :cry: HELP!

Posté : 19 avr. 2006, 10:26
par Ryle
id_article=<?php echo"$row[citation]"; ?>
C'est toute la citation que tu passes dans ton id_article ??? tu as vérifié que si celle-ci ne comportait ni apostrophes, guillemets ou retour à la ligne qui pourraient planter le onClick ou le window.open et qu'il faurait protégé ?

Posté : 19 avr. 2006, 13:30
par Stegue
Ca serait donc ça ! En effet, ce sont des citations avec souvent des apostrophes etc...
Que faut-il faire ? Protéger ?

Posté : 19 avr. 2006, 13:43
par jojolapine
tu peux protéger tes citations avec addslashes() ou htmlentities()...