Alterner <php variable=(html) php (html)> + echo variable?

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 : Alterner <php variable=(html) php (html)> + echo variable?

Re: Alterner <php variable=(html) php (html)> + echo variable?

par ynx » 21 janv. 2016, 17:38

Plutôt que de unset la variable, tu peux utiliser une condition if et afficher le captcha uniquement si celui-ci n'est pas valide. Par exemple :
if ("le captcha n'est pas valide") {
    echo $imgcaptcha;
}
Je ne sais pas comment tu vérifies la validité du captcha mais il faut bien sur que tu remplaces mon exemple de condition.

Re: Alterner <php variable=(html) php (html)> + echo variable?

par shuffle » 21 janv. 2016, 13:44

Merci, je me suis mis au php il y a peu, alors je bricole encore. :)
J'étais finalement arrivé par un autre moyen à ce que je voulais, mais cette histoire de destruction de variable au submit du captcha est intéressante,
j'ai donc réécrit en concaténation correcte et enlevé les if et les echo, et maintenant ça s'affiche bien. J'ai posé ensuite la condition unset($imgcaptcha) quand l'entrée est correcte, et je pensais voir disparaître le captcha et tout le reste de $imgcaptcha... et non, loupé! :non:

Re: Alterner <php variable=(html) php (html)> + echo variable?

par ynx » 21 janv. 2016, 12:24

Salut,

Il semble que tu as confondu l'opérateur de concaténation "." avec l'opérateur de fin de ligne ";" ce qui explique le problème de "fusion" puisque ta chaine de caractères $imgcaptcha se termine à l'ouverture de l'attribut value (value=").

Il n'est possible d'utiliser un bloc if dans une concaténation de chaine, il faut le remplacer par l'opérateur ternaire : http://php.net/manual/fr/language.opera ... on.ternary

L'instruction echo dans l'affectation du chaine est également incorrecte, il suffit simplement de concaténer les variables sans utiliser echo.

Ce qui donne une fois ces points corrigés :
<?php 
$imgcaptcha = '<p>Recopier ce chiffre:</p>
<div class="formutext"><img src="captcha.php">&nbsp;&nbsp;<input name="captcha" class="formulairecap" maxlength="4" value="' . (isset($captcha) ? $captcha : '') . '"></div>
<div class="formutext">' . (isset($erreurcaptcha) ? $erreurcaptcha : '') . '</div>';
?>
équivalent à (avec des blocs if à la place de l'opérateur ternaire)
if (!isset($captcha)) {
	$captcha = '';
}
if (!isset($erreurcaptcha)) {
	$erreurcaptcha = '';
}

$imgcaptcha = '<p>Recopier ce chiffre:</p>
<div class="formutext"><img src="captcha.php">&nbsp;&nbsp;<input name="captcha" class="formulairecap" maxlength="4" value="' . $captcha . '"></div>
<div class="formutext">' . $erreurcaptcha . '</div>';
Bonne journée

Re: Alterner <php variable=(html) php (html)> + echo variable?

par shuffle » 21 janv. 2016, 11:22

Je me rapproche encore avec:
<form  method="post" action="">
	    <?php $imgcaptcha='<p>Recopier ce chiffre:</p>
    <div class="formutext"><img src="captcha.php">&nbsp;&nbsp;<input name="captcha" class="formulairecap" maxlength="4" value="';if (isset($captcha)){echo $captcha;}'"></div>
    <div class="formutext">';if (isset($erreurcaptcha)) {echo $erreurcaptcha;}'</div>'?>
        <p><label>Nom*:</label><br>
        <input name="nom" class="formulaire" maxlength='30' value="<?php if (isset($nom)) echo $nom; ?>"></p>
		<div class="formutext"><?php if (isset($erreurnom)) echo $erreurnom; ?></div>
        <p><label>Prénom:</label><br>
        <input name="prenom" class="formulaire" maxlength='30' value="<?php if (isset($prenom)) echo $prenom; ?>"></p>
        <p><label>Mail*:</label><br>
        <input name="mail" class="formulaire" maxlength='40' value="<?php if (isset($mail)) echo $mail; ?>"></p>
		<div class="formutext"><?php if (isset($erreurmail)) echo $erreurmail; ?></div>
        <p><label>Adresse:</label><br>
        <textarea name="adresse" class="formulaire2" maxlength='120'><?php if (isset($adresse)) echo $adresse; ?></textarea></p>
        <p><label>Sujet*:</label><br>
        <input name="sujet" class="formulaire" maxlength='40' value="<?php if (isset($sujet)) echo $sujet; ?>"></p>
		<div class="formutext"><?php if (isset($erreursuj)) echo $erreursuj; ?></div>
        <p><label>Message*:</label><br>
        <textarea name="message" class="formulaire2" maxlength='500'><?php if (isset($message)) echo $message; ?></textarea></p>
		<div class="formutext"><?php if (isset($erreurmess)) echo $erreurmess; ?></div>
		<?php echo $imgcaptcha;?>
        <input  value="Envoyer" class="formulaire3" type="submit">
		<input value="Effacer" class="formulaire4" type="reset">
</form>
mais ça fait un bug par la suite, comme si l'input "submit", juste après echo $imgcaptcha, était fusionné avec l'input name de $imgcaptcha...?

Alterner <php variable=(html) php (html)> + echo variable?

par shuffle » 21 janv. 2016, 10:39

Bonjour,
Pour un captcha je cherche à définir une variable comprenant des instructions html, qui comprennent elles-même des instructions php, dans ce goût là:
<?php $imgcaptcha='<p>Recopier ce chiffre:</p>
		<div class="formutext"><img src="captcha.php">&nbsp;&nbsp;<input name="captcha" class="formulairecap" maxlength="4" value="'.if (isset($captcha)) echo $captcha;.'"></div>
		<div class="formutext">'.if (isset($erreurcaptcha)) echo $erreurcaptcha;.'</div>'?>
Avec plus loin, un echo $imgcaptcha, qui sera détruit si la valeur entrée est bonne, bref le paragraphe, le div, les messages disparaitraient.
Je ne suis pas trop loin d'y arriver si j'en crois ce que je vois sur l'écran, mais je n'arrive pas à intégrer les portions php correctement.
Je voudrais juste savoir si ce que je fais là, de jouer aux poupées gigognes ... peut se faire, déjà! :)
car je ne trouve pas beaucoup d'exemples dans le genre mais peut-être que je cherche mal,
et si c'est possible, est-ce qu'une bonne âme pourrait me donner la syntaxe qui va bien? Après moult essais, je ne sais plus trop comment m'y prendre... :roll: