Bug avec la fonction "envoyer à un ami "

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 : Bug avec la fonction "envoyer à un ami "

par Stegue » 19 avr. 2006, 18:50

C'est bon, avec stripslashes dans le formulaire tout s'affiche bien !
Donc merci à tout le monde. :wink:

Je voudrais quand même un renseignement. Je suis sûrement naif mais je pensais que tous les anti-slashs dans ma bdd étaient dûs à la conversion de ma base access en Mysql ( un bug quoi ! ).
Et comme ils s'affichaient sur mes pages, j'ai commencé à les supprimer.

Mais maintenant, je ne sais plus quoi faire ! Sachant qu'en les supprimant, le seul problème était ce formulaire "envoyer à un ami" pour le reste tout est nickel.

par Stegue » 19 avr. 2006, 18:33

Merci, ça marche en mettant ça:
<?php echo addslashes ($donnees['citation'] );?>
Seul problème maintenant, c'est que le destinataire du mail voit les anti-slashs. C'est pas super grave mais d'un autre côté, c'est pas super top !

par jojolapine » 19 avr. 2006, 13:43

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

par Stegue » 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 ?

par Ryle » 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é ?

par Stegue » 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!

par Stegue » 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 :?: :?: :?: :?:

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

par Stegue » 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>";
}

par Stegue » 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 ! :?

par Stegue » 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. :?

par Ryle » 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" :)

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

par Ultiny » 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.

par Stegue » 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>