1
votes

Impression de l'écho avant l'en-tête (), php

J'ai rencontré un problème avec l'en-tête php ().

J'ai une page index.php avec un formulaire de contact. Une fois le formulaire soumis, son action est dirigée vers la même page index.php, où un script handler.php est requis. Il effectue les étapes suivantes, si le POST a été reçu:

  1. Recaptcha check:
  2. Si recaptcha vous permet de passer:

2.1) echo "/ js script tag qui alerte smth comme 'captcha est vérifié!' /";

2.2) nécessite un autre fichier script new_order.php, qui envoie une nouvelle commande à mon CRM puis vous redirige via l'en-tête (emplacement ...); à la page index.php susmentionnée.

  1. Si recaptcha ne vous laisse pas passer:

3.1) echo "/ js script tag qui alerte smth comme 'captcha is not checked!' /";

Si 3. se produit - la page me montre un captcha-fail js-alert et va automatiquement à l'index.php, sans appel à header ();

Si 2. se produit - une nouvelle commande CRM est créée avec succès (car new_order.php fait le travail), header (); m'amène à l'index.php, MAIS 2.1 echo n'alerte pas un message. Il apparaît, quand je commente la ligne avec 2.2) require (new_order.php).

J'ai besoin de cette redirection pour éviter d'envoyer "Répéter l'envoi du formulaire" dans mon navigateur. Lorsque la redirection est terminée, vous actualisez la page et il ne dit pas "Soumettre le formulaire une autre fois?"

Je sais qu'il s'agit de ne pas inclure d'informations avant l'en-tête, mais je ne peux pas en saisir le sens principal.

Merci!


3 Réponses :


0
votes

Il n'est pas possible d'afficher l'écho avant l'en-tête.


2 commentaires

Ainsi, tout le script se passe bien, mais l'écho même ne fonctionnera pas?


Vous ne pouvez pas envoyer de données au navigateur sans envoyer d'abord un en-tête.



1
votes

Passez quelques paramètres supplémentaires dans chacun de vos cas qui agissent comme un «drapeau». En conséquence, définissez ou ne définissez pas les en-têtes personnalisés () et traitez-les de manière conditionnelle.


2 commentaires

Alors, puis-je, pour dire, envoyé un certain nombre d'en-têtes? Un me redirigera et un autre fournira un moyen d'alerter un message?


Non, ce n'est pas possible. Les en-têtes HTTP agissent comme des informations supplémentaires pour chaque transaction. Si cet en-tête a une redirection, il sera redirigé.



0
votes

J'ai résolu le problème:

J'ai mis un cookie à la fin de mon script new_order.php par setcookie (blah) ;.

J'ajoute un if-check au début du handler.php.

Lorsque je suis redirigé vers l'index.php mentionné, le gestionnaire requis vérifie si mon cookie est défini.

Si c'est - cela signifie que j'ai passé une commande, donc je reçois mon écho "\ script \ alert ('Merci!'); \ script \";

S'il n'est pas défini - je n'ai jamais appelé le new_order.php!


0 commentaires