2013-01-18 5 views
-1

Possible en double:
Headers already sent by PHPPourquoi onclick ne fonctionne pas?

if($sendmail) { 
    echo "<div class=\"success\" class=\"regdet\">Congratulations $name! You have successfully registered for <span>AADAB 2013</span>! An email has been sent to your email with the details of your form.<br><br>If the page does not automatically redirect you in 5 seconds, click <input type=\"button\" value=\"Here\" onclick=\"window.close()\"> to continue.</div>"; 
    header (refresh: 5, url="form.php"); 
} else { 
    echo "<span style=\"color: red; background: rgba(219,219,219,0.7);\">There was an error in submitting your form. Click <a href=\"form.php\">here</a> to try again!</span>"; 
} 

Je suis en train de rediriger l'utilisateur vers la forme (qui est la forme actuelle, qui a à la fois, la forme et les commandes PHP) après 5 secondes ... comme ce n'est pas le cas, j'essaye d'inclure un bouton qui fermera la fenêtre après qu'on l'aura pressé sur la page de confirmation du formulaire.

Cela ne se produit pas non plus.

le message est affiché et le formulaire envoie des e-mails à mon compte e-mail parfaitement, mais cette petite partie m'ennuie beaucoup! Window.close() ne fonctionne pas seul dans de nombreux navigateurs modernes.

Répondre

1

Vous devez transmettre les paramètres à header() sous la forme d'une chaîne (vous envoyez en fait une chaîne d'en-tête brute).

donc comme ceci:

header('refresh:5;url=form.php'); 

Et quant à la window.close(). Si vous n'avez pas ouvert la fenêtre avec Javascript et que vous essayez de la fermer à l'aide d'un gestionnaire de la fenêtre, vous risquez de rencontrer des problèmes. Javascript ne vous permet pas de fermer une fenêtre que l'utilisateur voit pour des raisons de sécurité. En théorie, vous devriez voir une alerte du navigateur vous disant que JS veut fermer cette fenêtre (mais je n'ai pas réussi à la faire fonctionner sur IE 9 ou FF).

+0

ça ne marche pas ... j'ai même essayé les guillemets doubles ... et aussi mettre la commande header() en haut (dès que $ sendmail renvoie la valeur true) ... –

+0

Désolé, mon mauvais - J'ai utilisé une virgule à la place d'un point-virgule dans la déclaration d'en-tête. Essayez-le maintenant :) –

+0

non .. toujours pas de redirection ... dois-je écrire le chemin absolu entier .. comme dans .. http: //...et ainsi de suite ... ou un chemin relatif au fichier va bien? –

-1

Il existe des moyens autour d'elle: Issue with window.close and chrome

Ou est-il possible pour vous d'utiliser une fenêtre modale plutôt que dans une nouvelle fenêtre?

+0

C'est incorrect ... –

+0

@alex pourquoi est-ce incorrect? –

+0

Vous avez juste besoin de référencer la fenêtre, des trucs standard. –

0

"Cette méthode n'est autorisée que pour les fenêtres qui ont été ouvertes par un script à l'aide de la méthode window.open Si la fenêtre n'a pas été ouverte par un script, l'erreur suivante apparaît dans la console JavaScript: Scripts ne peut pas fermer les fenêtres qui n'ont pas été ouvertes par le script. "

Lorsque vous avez ouvert la fenêtre, cela doit être affecté à une variable.

openedWindow = window.open('moreinfo.htm'); 

Puis, quand vous voulez fermer ...

openedWindow.close(); 

Si votre vouloir fermer la fenêtre avec JS vous pouvez aswell puis rediriger JS aswell ...

location.href = 'form.php'; 
+0

okay de sorte que ne devrait pas entraver la commande header() ... je suppose ... mais la page ne redirige pas –

0

Vous ne pouvez sortir les en-têtes que si vous n'avez déjà rien publié dans le navigateur. Dans votre cas, echo quelque chose, puis essayez d'envoyer un header().

Aussi, vous devriez citer votre argument:

// no output so far.... 
header ('refresh: 5; url=form.php'); 

Si vous affichez votre journal des erreurs, vous devriez trouver:

PHP Avertissement: Impossible de modifier les informations d'en-tête - têtes déjà envoyés par ...

+0

oui ... mais j'ai essayé c'est l'inverse aussi ... je mets la commande header() en haut (dès que $ sendmail renvoie la valeur true) ... rien ne se passe même alors –

+0

Avez-vous vérifié votre journal des erreurs? Vous pourriez toujours sortir quelque chose avant l'appel d'envoi de courrier. Même un caractère espace avant la balise ' MrCode

+0

oui .. firebug ne montre rien .. j'ai aussi essayé phpcodechecker.com ... au cas où ça aiderait à essayer de faire ce qui est ci-dessus sur www.cookingquery.com/aadab/form.php –