Aller au contenu

Refusé l'envoi d'un formulaire si html dedans.


Sujets conseillés

Posté

Bonjour,

J'ai un mec qui m'envoie des messages avec du html dedans à partir d'un formulaire de mon site et qui pourri mon site. Le html apparait sous sa forme bute.

Comment éviter cela ? En php j'ai dejà mis ça pour le traitement du message:

$message = nl2br(htmlspecialchars($_POST['message']));

J'aimerai en fait carrement interdire l'envoi de formulaire au complet si dans le message on trouve des liens ou des adresse internet. Est-ce possible ?

Merci d'avance

Posté

Hello,

Pour empêcher qu'il y ait des liens dans tes messages, tu peux utiliser un truc du style :

$string	   = 'la chaîne à tester'
$badString = 'http://' // Le mauvais mot

if (strpos($string, $badString) === FALSE)
//La chaîne n'a pas été trouvée, c'est ok
// Tu fais tes traitements et tu enregistres le message
else
echo 'Impossible d'enregsitrer votre message';

Bon travail

Posté

merci à tous les deux pour vos réponses, j'essaie pour l'instant la réponse de KnockedMaster mais je galère. Voilà mon code :

$message = nl2br(htmlentities(htmlspecialchars($_POST['message']))); // De même pour le message

$string = '$message';
$badString = 'http://';// Le mauvais mot


if((strpos($string, $badString) === FALSE){
echo "<script language='Javascript'>

<!--

alert('Votre message à bien été envoyé !');

// -->

</SCRIPT>";
}
else{
echo "<script language='Javascript'>

<!--

alert('Pas d'adresse web, merci !');

// -->

</SCRIPT>";
}

Pour l'instant ça ne veut même plus m'afficher la page.

Posté

Ok j'avais oublié une petite parenthése dans le if

Cependant je fais des tests et malgré la présence de &quot;http://" dans le textarea ($message) le formulaire est envoyé quand même.

Posté

Ce n'est pas grave qu'il soit envoyé, c'est même normal, ce qu'il faut c'est ne pas l'enregistrer ;)

Déjà tu peux supprimer les quotes là, sinon la variable n'est pas interprétée :

$string	   = '$message';

HS : les majuscules pour </script>, ce n'est pas obligatoire hein

Fais voir ton code complet si ça ne va pas ...

@+

Posté

Ca ne marche toujours pas, le formulaire est envoyé et enregistré. Alors comme demandé je t'envoi mon code au complet :

$message est la variable d'un textarea

Code qui traite le formulaire :

<?php
if (isset($_POST['pseudo']) AND isset($_POST['datte']))
{
$datte = mysql_real_escape_string(htmlspecialchars($_POST['datte']));
$categorie = mysql_real_escape_string(htmlspecialchars($_POST['categorie']))
$souscategorie = mysql_real_escape_string(htmlspecialchars($_POST['souscategorie']));
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
$pseudodumec = mysql_real_escape_string(htmlspecialchars($_POST['pseudodumec']));
$smiley = mysql_real_escape_string(htmlspecialchars($_POST['smiley']));
$message = nl2br(htmlentities(htmlspecialchars($_POST['message']))); // De même pour le message

$string = $message;
$badString = 'http://';// Le mauvais mot


if((strpos($string, $badString) === FALSE)){
echo "<script language='Javascript'>

<!--

alert('Votre message à bien été envoyé !');

// -->

</script>";
}
else{
echo "<script language='Javascript'>

<!--

alert('Pas d'adresse web, merci !');

// -->

</script>";
}
// On peut enregistrer
mysql_query("INSERT INTO table VALUES('', '" . $datte . "', '" . $smiley . "', '" . $pseudo . "', '" . $pseudodumec . "', '". $categorie ."','" . $souscategorie . "','" . $message . "', '', '')");

}
?>

Posté

Bah, c'est normal, tu enregistres les données si

if (isset($_POST['pseudo']) AND isset($_POST['datte']))

Or ça c'est toujours vrai si le formulaire est complété !

<?php
if (isset($_POST['pseudo']) AND isset($_POST['datte']))
{
$datte = mysql_real_escape_string(htmlspecialchars($_POST['datte']));
$categorie = mysql_real_escape_string(htmlspecialchars($_POST['categorie']));
$souscategorie = mysql_real_escape_string(htmlspecialchars($_POST['souscategorie']));
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
$pseudodumec = mysql_real_escape_string(htmlspecialchars($_POST['pseudodumec']));
$smiley = mysql_real_escape_string(htmlspecialchars($_POST['smiley']));
$message = nl2br(htmlentities(htmlspecialchars($_POST['message']))); // De même pour le message

$string = $message;
$badString = 'http'; // Le mauvais mot


if (strpos($string, $badString) === FALSE) {

echo "<script language='Javascript'>

<!--

alert('Votre message à bien été envoyé !');

// -->

</script>";

// On peut enregistrer
mysql_query("INSERT INTO table VALUES('', '" . $datte . "', '" . $smiley . "', '" . $pseudo . "', '" . $pseudodumec . "', '". $categorie ."','" . $souscategorie . "','" . $message . "', '', '')");

}
else {
echo "<script language='Javascript'>

<!--

alert('Pas d'adresse web, merci !');

// -->

</script>";
}

}
?>

Pas testé mais ça doit aller ...

Posté

Je te remercie beaucoup pour ton aide car je vois que tu te creuses la tête pour moi.

Bon avec ce code je pense qu'on avance. Cependant lorsqu'il n'y a pas http dans le message ca envoie le message d'alerte : "votre message a bien été envoyé" mais il ne s'enregistre pas dans la bdd.

En revanche quand il y a le mot http il n'y a pas d'enregistrement mais le message d'alerte n'apparait pas non plus.

Posté

Enfin j'ai modifié quelque petit truc et maintenant ça marche très bien. Je te remercie grandement car sans toi je n'y serais jamais arrivé. Encore merci !

Posté (modifié)

Heu, je ne m'étais pas pris la tête jusque maintenant ;)

Le problème vient du javascript que tu utilises. Vire les commentaires conditionnels et ça ira.

<?php
if (isset($_POST['pseudo']) AND isset($_POST['datte']))
{
$datte = mysql_real_escape_string(htmlspecialchars($_POST['datte']));
$categorie = mysql_real_escape_string(htmlspecialchars($_POST['categorie']));
$souscategorie = mysql_real_escape_string(htmlspecialchars($_POST['souscategorie']));
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
$pseudodumec = mysql_real_escape_string(htmlspecialchars($_POST['pseudodumec']));
$smiley = mysql_real_escape_string(htmlspecialchars($_POST['smiley']));
$message = nl2br(htmlentities(htmlspecialchars($_POST['message']))); // De même pour le message
*/

$string = 'J\'en ai marre http';
$badString = 'http'; // Le mauvais mot


if (strpos($string,$badString) === FALSE) {



echo '<script type="text/javascript">';

echo 'alert(\'Votre message à bien été envoyé !\');';

echo '</script>';

// On peut enregistrer
mysql_query("INSERT INTO table VALUES('', '" . $datte . "', '" . $smiley . "', '" . $pseudo . "', '" . $pseudodumec . "', '". $categorie ."','" . $souscategorie . "','" . $message . "', '', '')");

}
else {

echo '<script type="text/javascript">';

echo 'alert(\'Pas de lien web svp !\');';

echo '</script>';
}

}
?>

Sinon mon numéro de compte en banque c'est le xxx-xxxxxxxx-xx :P

Edit : Ah ben tu m'as grillé en plus :cool:

Bonne nuit et @+

Modifié par KnockedMaster

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...