PDA

Afficher la version complète : [Réglé] control anti-flood



adminlinux
03/04/2006, 20h11
Bonsoir,

j'ai fais une page vérif.php dans la quelle j'ai ajouté un code anti-flood, quand je valide leformulaire de base, le code anti-flood fonctionne pas, les annonces ps quand mème dans mysql

Voici le code

<div class='quotetop'>Citation </div>
<?php
ob_start();
session_start();
header('content-type:text/html;charset=iso-8859-1');
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">';
if(isset($_POST['code']) AND isset($_SESSION['code']))
{
if($_POST['code']===$_SESSION['code'])
{
echo '

Identification rИussie</p>';
}
else
{
echo '

Identification ИchouИe</p>';
}

unset($_SESSION['code']);
}
$passe='';
$caracteres = 'abcdefghijklmnspqrstuvwxyz123456789';
$cnt=strlen($caracteres)-1;
for($i = 0; $i < 7; $i++)
{
$passe.=$caracteres{mt_rand(0,$cnt)};
}
$_SESSION['code']=$passe;
ob_flush();
?>
<form method="post" action="?">


<label for="code">Code :</label>

<input type="text" name="code" id="code" /></p>


<input type="submit" value="Envoyer" /></p>
</form>


image.php</p>


<?
$point = strpos($email,".");
$aroba = strpos($email,"@");
if(empty($nom) || empty($prenom) || empty($email) || empty($point) || empty($aroba))
{
echo("Tous les champs ne son pas correctement rempli ou l'adresse mail est incorrecte, merci de vérifier");
echo("Veuillez recommencer (java)");
return;
}
?>

<?
$db = mysql_connect('localhost','root','gh452tyj') or die ("erreur de connexion");
mysql_select_db('usedtrucks',$db) or die ("erreur de connexion base");
$date = date("y-m-d");
mysql_query("INSERT INTO demande (id,date,nom,prenom,telgsm,email,message) VALUES ('','$date','$nom','$prenom','$telgsm','$email','$ message') ") or die ("erreur insert ".mysql_error());
mysql_close();
?>[/b]

Une idée ?

adminlinux
04/04/2006, 09h35
bon ben j'ai tous retourné.... il fonctionne pas et est maintenant HS. http://www.alionet.org/style_emoticons/<#EMO_DIR#>/bang.gif

Personne a un lien pour un anti-flood qui fonctionne ? http://www.alionet.org/style_emoticons/<#EMO_DIR#>/sweatingbullets.gif

Dudule-le-poisson
04/04/2006, 18h19
les annonces ps quand mème dans mysql[/b]

Relis ton code ; il n'y a pas une seule condition en rapport avec le code pouvant empêcher l'insertion dans la base de données.

adminlinux
04/04/2006, 18h51
J'ai pas d'idé pour corriger le problème , je l'aise tombé sa, sa fais 4 jours que je suis la dessus, et franchement je suis déssus des developpeur php sur l'autre forum que j'étais pour le php....

je sans clairement la négativité d'aider...., je me suis batu comme un fous pour aprendre et a par toi, toutes les portes se fèrme....

Dudule-le-poisson
04/04/2006, 19h34
Je n'ai pas d'idée pour corriger le problème ; je laisse tomber ça, ça fait quatre jours que je suis là-dessus, et franchement je suis déçu des développeurs PHP de l'autre forum sur lequel j'étais présent pour le PHP...

Je sens clairement la négativité d'aider... Je me suis battu comme un fou pour apprendre et, à part toi, toutes les portes se ferment...[/b]

Les forums (bon, fora pour les puristes) sont des espaces de discussion libre, où chacun est ipso facto libre de ne pas s'exprimer, parce qu'il n'est pas d'humeur, parce qu'il n'a pas envie de décrypter un message mal écrit, parce qu'il ne connaît pas la réponse, parce que ça lui paraît franchement trop évident, parce qu'il n'a pas le temps, ou pour toute autre raison, valable ou non. On ne peut reprocher à personne de ne pas s'être exprimé.

Concernant l'apprentissage du PHP, il se peut que tu essayes d'en faire trop directement et surtout trop dans un cadre précis. La maîtrise de la plupart des langages passe par la réalisation de petits programmes/scripts merdiques ayant chacun pour but de comprendre intégralement une petite partie du langage. Par exemple, avant de faire tout un site (même si j'ai cru comprendre que tu avais des impératifs professionnels), tu peux faire un petit formulaire qui ne sert à rien et t'amuser à parser tout ce que l'utilisateur pourrait entrer dans les chamsp de ce script. Dans cete approche, "faire un script" signifie "en saisir tous les caractères du code", sans copier-coller donc. C'est plus fastidieux mais plus formateur.

Pour ton problème en particulier, il faut que tu fasses de nombreux tests (et autant de messages d'erreur) avant d'exécuter ta requête SQL :
-est-ce que l'utilisateur a rempli tous les champs, code inclus ? (si oui, on continue ; si non on gère l'erreur)
-est-ce que les données sont viables ? (si oui, on continue ; si non on gère l'erreur)
-est-ce que le code est bon ? (si oui, on continue ; si non on gère l'erreur)
Si tout s'est bien passé, tu peux envoyer ta requête, afficher un message comme quoi l'opération a réussie et/ou rediriger l'utilisateur. Sinon, il faut afficher un message détaillant l'erreur, reproposer le formulaire au visiteur tout en s'assurant que les valeurs qu'il avait entré précédemment sont ré-inscrites dans les champs.

Lorsque tu auras fait tout ça, tu auras forcément ton mysql_query dans au moins un bloc conditionnel (voire des conditions imbriquées si tu n'utilises pas de booléen indiquant l'état du traitement).

adminlinux
05/04/2006, 00h48
Merci pour ton message.....

J'ai regarder sur toute les coutures ce scripte anti-flood qui est dans un fichier juste derrière le formulaire,

<div class='quotetop'>Citation </div>
<?php
$rep_images = '../images/';
$nbrchars = 5;
session_start();
if(isset($_POST['verification'])){
if($_SESSION['code'] != $_POST['verification']){
echo 'code incorrect';
}else{
echo 'code correct';
}
}
$dossier = @opendir($rep_images);
while ($fichier = @readdir($dossier)) {
if( !is_dir($fichier) ){
$num[] = $fichier;
}
}
@closedir($dossier);
$nbrimg = count($num)-1;
for($i=0; $i<$nbrchars; $i++){
$rand = rand(0,$nbrimg);
$code .= $rand;
$codeimg[] = $rand;
}
foreach($codeimg as $cle=>$valeur) {
$imagecode .= '../images/'.$valeur.'.gif';
}
$_SESSION['code'] = $code;
echo '<form method="post" action="formulaire.php">';
echo $imagecode.'<input type="text" name="verification"> <input type="submit" value="Vц╘rifier">';
echo '</form>';
?>[/b]

Si tu éssaye ce scripte la, tu va remarquer que si tu tape pas de code, et ben sa passe quand mème...

aurais tu une idée pq ce code fonctionne pas ??

Je te remercie d'avance de ton aide....

adminlinux
05/04/2006, 12h45
enfin, sa fonctionne, il sufisais de mètre un elseif pour la 2 ème requète....