Bug avec la fonction "envoyer à un ami "

Eléphant du PHP | 113 Messages

17 avr. 2006, 20:34

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>

ViPHP
ViPHP | 656 Messages

18 avr. 2006, 05:50

C'est plutôt la page "formulaire.php" qu'il faudrais nous présenter. Visiblement c'est elle qui comporte la fonction mail.

Eléphant du PHP | 113 Messages

18 avr. 2006, 07:22

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>

ViPHP
ViPHP | 656 Messages

18 avr. 2006, 07:32

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.

Eléphant du PHP | 113 Messages

18 avr. 2006, 12:51

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. " ;} 
	 }
     
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 avr. 2006, 13:51

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" :)

Eléphant du PHP | 113 Messages

18 avr. 2006, 18:47

Voilà, c'est fait mais c'est toujours pareil !
Parfois, j'arrive en en envoyer 2 de la même page. :?

Eléphant du PHP | 113 Messages

18 avr. 2006, 20:08

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

Eléphant du PHP | 113 Messages

18 avr. 2006, 21:04

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>";
}


Eléphant du PHP | 113 Messages

18 avr. 2006, 22:34

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

Eléphant du PHP | 113 Messages

19 avr. 2006, 06:57

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

Eléphant du PHP | 113 Messages

19 avr. 2006, 07:24

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!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 avr. 2006, 10:26

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

Eléphant du PHP | 113 Messages

19 avr. 2006, 13:30

Ca serait donc ça ! En effet, ce sont des citations avec souvent des apostrophes etc...
Que faut-il faire ? Protéger ?

ViPHP
ViPHP | 3607 Messages

19 avr. 2006, 13:43

tu peux protéger tes citations avec addslashes() ou htmlentities()...