2010-06-10 13 views
-3

J'ai un script PHP personnalisé qui valide le code captcha et envoie un e-mail. Si le script PHP envoie un message avec succès, il renvoie "true". Cela se fait par:exécuter javascript avant de retourner dans php

if(!$Error){ 
     echo "true"; 
     exit; 
    } 

Avant de retourner vrai, je voudrais exécuter une commande jQuery qui devrait actualiser l'image captcha. Je ne devrais pas faire cela côté client car cela pourrait être risqué du point de vue des spammeurs.

Pour rafraîchir l'image captcha, la commande est:

jQuery('#captcha').attr('src', ('php/captcha/captchaimage_show.php?' + Math.random())); 

Je dois appeler cette commande à partir de scripts PHP avant de retourner les résultats par "echo"

Prashant

+0

@snowlord Il s'en fout. Il est juste là pour abuser de la gentillesse des autres. –

Répondre

5

Vous avez besoin repenser votre approche. Le PHP et JavaScript s'exécutent sur différents ordinateurs et communiquent via un protocole de requête/réponse sans état.

Tout script PHP doit être exécuté intégralement avant l'exécution de JS.

La transmission de données entre eux ne peut se produire que lorsqu'une requête HTTP est effectuée par le client.

Vous ne pouvez exécuter aucun code JavaScript qui doit être exécuté sur le client ailleurs que sur le client.

+0

Mais j'ai besoin d'actualiser l'image captcha après l'envoi du mail. Je pourrais le faire en exécutant l'instruction jQuery comme mentionné ci-dessus après la commande jQuery.post qui envoie le courrier.Je suis nouveau à la programmation web et je pense que si je le fais par côté client, il peut être ignoré/supprimé, les spammeurs peuvent continuer à envoyer des mails en changeant le champ de saisie email. – user354051

+0

@ user354051: Votre problème est que vous autorisez l'utilisation d'un CAPTCHA plus d'une fois. Peu importe que vous changiez ce qui est affiché (côté client ou côté serveur) car les spammeurs peuvent toujours soumettre l'ancien CAPTCHA. Vous devez le supprimer une fois qu'il est utilisé et ne pas autoriser l'utilisation du même CAPTCHA (à moins qu'il ne soit généré aléatoirement dans le futur). – DisgruntledGoat

0

Je dirais que le problème principal est l'envoi du courrier via AJAX. Vous devriez faire un POST régulier, puis recharger toute la page avec un nouveau captcha. Une autre solution possible serait d'envoyer le courrier via AJAX et de retourner le "vrai" dans la réponse AJAX. Ou même retourner le nouveau captcha dans la réponse et le changer avec jQuery. Mais je ne sais pas si cela fonctionnera avec votre système captcha.

0
file_get_contents("http://your-server/project-path/php/captcha/captchaimage_show.php?".random(1,100)); 

résoudra votre problème

chears !!!

0

En ce qui concerne votre code:

if(!$Error){ 

(. Je devine que $ Error est le type de retour de votre fonction de messagerie Si non, ignorer ce message et faites-moi savoir si je peux l'enlever).

Renvoie TRUE si le courrier a été accepté avec succès pour la livraison, FALSE sinon.

Il est important de noter que juste parce que le courrier a été accepté pour livraison, cela ne signifie PAS que le courrier atteindra réellement la destination prévue.

PHP.net:bool mail (string $to , string $subject , string $message)

Ne comptez pas sur la valeur de retour mail() que si vous voulez vérifier si l'e-mail a été envoyé.