Calcule anty-bots

Fermé
boss0211 Messages postés 264 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 9 septembre 2007 - 6 août 2006 à 19:48
 Utilisateur anonyme - 9 août 2006 à 16:24
bonjour,
je sais que sa doit être une erreur de l'ordre du ridicule mais jne la trouve pas!
Il me dis que mon accolade est fausse voici le script:
(et comme chez free la librairi GD nest pas active)
anty-bot.php :

<?php
$addition = 15 + 2 - 2;
$egale = 15;
$add = "http://boss021190.free.fr/livreor.php";

echo '<center><h1>Bonjour, <br />
suite à d\'important spamming j\'ai décidé de mettre une opération pour que les bots (logiciels spammeurs) ne puisse mettre le pub inutile!
<br /> Merci de résoudre cette opération simple.</h1><br />
<br />
<br />
<br />
<br />L\'opération est la suivante: <font color=red><b>'.$addition.'</b></font>
<br />
<form action=anty-bot.php method=get>
<input type="text" name="resultat" value="Metre que le résultat en nombre.merci" />
</form><br /><br />';

//on verifi si le résultat est bon
if ( $resultat == $egale)
{
echo 'C\'est très bien vous pouvez signez le livre d\'or!
<br /><href="'.$add.'"><strong>Cliquez ici!!</strong>';
}
//si il est faut
else ($resultat = false)
{  //#################CETTE ACCOLADE LA QUI DIS NE PAS MARCHER###############
echo '<font color=red>Vous ne pouvez pas accèder au livre d\'or. Si vous ne savez pas compter prenez une calculatrice merci!</font>';
}
?>
<br /> <br />
<a href="http://boss021190.free.fr">Accueil</a>
<br />
<br />
&copy; Annuaire boss021190
</center>

2 réponses

Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
6 août 2006 à 21:51
Salut.

Ton erreur n'en est pas une ... mais quand on le souhaite !

Je t'explique : tu fais else($resultat = false), c'est donc une affectation et non pas une comparaison. Or, après else il attend une accolade, et pas une affectation, ou alors pas d'accolade après l'affectation.

En outre, c'est possible de faire un test sur une affectation (if $toto = $tata), mais ça suppose de savoir parfaitement ce que l'on fait, ce qui n'est visiblement pas le cas. En C par exemple, ce genre d'opération est licite. Si l'affectation est valide (on essaie pas de mettre un float dans un int par exemple), ça renvoie 1. Dans le cas contraire, ça renvoie 0 et l'affectation n'a pas eu lieu ! Mmais ce n'est pas le cas de PHP, qui ne prends que des comparaisons de toute façon, vu qu'il n'y a pas de typage.

Bref, ce que tu voulais faire doit plutôt ressembler à ça :
if ( $resultat == $egale)
   echo "C'est très bien vous pouvez signez le livre d'or !<br /><href=\"",$add.,"\"><strong>Cliquez ici!!</strong>";
//si il est faux
else {
   $resultat = false;
   echo"<font color=red>Vous ne pouvez pas accèder au livre d'or. Si vous ne savez pas compter prenez une calculatrice merci!</font>";
}



Une petite remarque en passant : echo s'utilise avec des guillemets et non des quotes d'une part, et de deux en faisant "texte".$variable tu concatènes une nouvelle chaîne, ce qui est plus couteux en PHP que de faire "texte",$var (virgulre au lieu de point) : dans ce cas, il prend juste tout le texte à la suite et l'affiche, sans créer une nouvelle chaîne intermédiaire qui ne sert finalement à rien si c'est pour juste faire un echo dessus.
0
Utilisateur anonyme
9 août 2006 à 16:24
Bizarre que ça fonctionne comme ça.
Normalement c'est else if ( ... )

Autre chose, utilise plutot if (!$var), au moins tu ne feras plus d'erreur entre la comparaison et l'affectation.
0