Form et captcha
Résolu
bg62
Messages postés
23731
Date d'inscription
Statut
Modérateur
Dernière intervention
-
bg62 Messages postés 23731 Date d'inscription Statut Modérateur Dernière intervention -
bg62 Messages postés 23731 Date d'inscription Statut Modérateur Dernière intervention -
A voir également:
- Form et captcha
- Dans la table des matières du document à télécharger, le chapitre 6 et ses 2 sections n'apparaissent pas. trouvez l'erreur dans la structure du document et corrigez-la. mettez à jour la table des matières. quel est le mot formé par les lettres en majuscules de la table des matières après sa mise à jour ? - Forum Word
- Google form sans compte google - Forum Webmastering
- Captcha incorrect - Forum Réseaux sociaux
- Problème avec les réponses de Google Forms - Forum Webmastering
- Captcha impossible à valider ✓ - Forum Mozilla Firefox
19 réponses
session_start() doit être le premier argument lancé, avant tout envoi d'html... parfois même un espace cause des problèmes.
<?php session_start(); ?>
et tout ce que tu veux après...
dans ta page, session_start() est à la fin... CQFD
<?php session_start(); ?>
et tout ce que tu veux après...
dans ta page, session_start() est à la fin... CQFD
J'ai pas bcp de temps, qq idées en vrac :
1) Pourquoi détruire la session ?
if (isset($_SESSION))
{
session_destroy();
}
2) le fichier est il inclus dans autre chose ? (j'ai pas tout lu du code...) il y a forcément qqchose qui est renvoyé au navigateur avant la creation de la session, c'est ce que te dit le message d'erreur.
http://www.toutestfacile.com/php/errormsgs/standard_header.php
1) Pourquoi détruire la session ?
if (isset($_SESSION))
{
session_destroy();
}
2) le fichier est il inclus dans autre chose ? (j'ai pas tout lu du code...) il y a forcément qqchose qui est renvoyé au navigateur avant la creation de la session, c'est ce que te dit le message d'erreur.
http://www.toutestfacile.com/php/errormsgs/standard_header.php
lol. toi tu crises avec php, moi je crises avec toi ;-)
[...]
<?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <head> <link rel="shortcut icon" href="../appart.ico" /> <title>contact</title>
[...]
merci grizzly, j'ai mis ceci :
(en haut de code)
et
en bas de code
mais cela ne change pas grand chose ...
il me reste cette avertissement qui coince l'envoi:
le test est fait sur free (j'ai mis un dossier sessions mais cela ne change rien ....
??????
@+
b g
<?php session_start(); define("ST_READY", 0); // La page a été appellée pour la 1ere fois (aucun bouton n'a donc pu être cliqué) define("ST_OK", 1); // La page a été appellée avec le bouton [Envoyer] et l'envoi du mail s'est bien passé
(en haut de code)
et
if (isset($_SESSION)) { session_destroy(); } //session_start(); // Restaure la session précédente ou démarre ou nouvelle session // Sauvegarde dans la session de la réponse attendue issue du captcha $_SESSION['solution'] = substr($captcha->word,$captcha->num-1,1); ?> </form>
en bas de code
mais cela ne change pas grand chose ...
il me reste cette avertissement qui coince l'envoi:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/128/sdb/3/d/refok/standing-appart.com/pages/contact.php:10) in /mnt/128/sdb/3/d/refok/standing-appart.com/form/form2b.php on line 1
le test est fait sur free (j'ai mis un dossier sessions mais cela ne change rien ....
??????
@+
b g
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
je viens de la rétablir et j'ai toujours
le fichier seul : http://refok.free.fr/standing-appart.com/form/form2b.php
@+
b g
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/128/sdb/3/d/refok/standing-appart.com/form/form2b.php:154) in /mnt/128/sdb/3/d/refok/standing-appart.com/form/form2b.php on line 241
le fichier seul : http://refok.free.fr/standing-appart.com/form/form2b.php
@+
b g
Enleve ce session_start a la ligne 241.
Supprime cette condition de destruction de la session qui n'est pas utile.
Supprime cette condition de destruction de la session qui n'est pas utile.
ok c'est fait
je viens d'essayer et :
@+
b g
je viens d'essayer et :
Votre session a expirée ! Veuillez répondre de nouveau à la question puis valider.
@+
b g
session_start(); // Restaure la session précédente ou démarre ou nouvelle session // Sauvegarde dans la session de la réponse attendue issue du captcha $_SESSION['solution'] = substr($captcha->word,$captcha->num-1,1);
Tu as mis tout ca en entete ?
ton code d'erreur dit que $_SESSION['solution'] n'existe pas.
Tu fais ce que je t'ai dit :
1) la creation de session, au tout debut du fichier
2) tu supprimes la destruction inutile de session (forcément, si tu détruit la session, tu peux pas enregistrer le contenu du captcha...
et ca donne :
et le résultat :
Votre message a bien été envoyé. Merci.
1) la creation de session, au tout debut du fichier
2) tu supprimes la destruction inutile de session (forcément, si tu détruit la session, tu peux pas enregistrer le contenu du captcha...
et ca donne :
<?php session_start(); // Restaure la session précédente ou démarre ou nouvelle session define("ST_READY", 0); // La page a été appellée pour la 1ere fois (aucun bouton n'a donc pu être cliqué) define("ST_OK", 1); // La page a été appellée avec le bouton [Envoyer] et l'envoi du mail s'est bien passé define("ST_PREVIEW", 2); // La page a été avec le bouton [Prévisualiser] define("ST_ERROR", 3); // Une erreur s'est produite lors de la vérification de la page function remplacements_speciaux($txt) { $txt=preg_replace('#(<|>)#', '-', $txt); $txt=str_replace('"', "'",$txt); $txt=str_replace('&', 'et',$txt); return $txt; } function mail_valide($mail) { // La variable $verif va nous permettre d'analyser si la sémantique de l'email est bonne $verif='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#'; return preg_match($verif,$mail); } $reponse=""; // On regarde si la réponse a été postée par l'utilisateur if (isset($_POST['reponse'])) $reponse=$_POST['reponse']; $message=""; $objet=""; $votretelephone=""; $votremail=""; // On suppose qu'il y a une erreur par défaut même si ce n'est pas le cas. // Raisonnement par l'absurde en quelque sorte ... $status=ST_ERROR; //input button envoi/previsualiser $envoi=isset($_POST['envoi']) ? htmlentities($_POST['envoi']) : ""; $previsualiser=isset($_POST['previsualiser']) ? htmlentities($_POST['previsualiser']) : ""; if (isset($_POST['message'])) { //quelques remplacements pour les specialchars $message=remplacements_speciaux($_POST['message']); $objet=isset($_POST['objet']) ? remplacements_speciaux($_POST['objet']) : ""; // On assigne et/ou protège nos variables $votremail=stripslashes(htmlentities($_POST['votremail'])); $message=stripslashes(htmlspecialchars($message)); $objet=stripslashes(htmlspecialchars($objet)); $votretelephone=isset($_POST['votretelephone']) ? htmlentities($_POST['votretelephone']) : ""; //on enlève les espaces $votremail=trim($votremail); $message=trim($message); $objet=trim($objet); /*On vérifie si l'e mail et le message sont pleins, et on agit en fonction. (on affiche Apercu du resultat, tel ou tel champ est vide, etc...*/ //Si ca ne vas pas (mal rempli, mail non valide...) if((empty($message)) or (empty($objet)) or (!mail_valide($votremail))) { //les 3 champs sont vides if(empty($votremail) and (empty($message)) and (empty($objet))) { $msgerr='Tous les champs sont vides.'; } //un des champs est vide else { if(!mail_valide($votremail)) { $msgerr='Votre adresse e-mail n\'est pas valide.'; } else { $msgerr='Il faut remplir tous les champs !'; } } } //Si les deux sont pleins et que l'adresse est valide, on envoie on on prévisualise sans envoi else { $domaine=preg_replace('#[^@]+@(.+)#','$1',$votremail); $DomaineMailExiste=checkdnsrr($domaine,'MX'); if(!$DomaineMailExiste) { $msgerr='Le nom de domaine de l\'adresse e-mail que vous avez donné n\'existe pas.'; } elseif(!empty($previsualiser)) { $status=ST_PREVIEW; } elseif(!empty($envoi)) { // Test si la réponse au captcha est correcte ! if (isset($_SESSION['solution'])) { if ($_SESSION['solution'] != $reponse) { $msgerr="Mauvaise réponse à la question posée ! Réessayez."; } else { $objet='[contact SITE info] : '.$objet; $destinataire='monmail@monfai.info'; $mail=$destinataire; $headers='From:'.$votremail."\r\n". 'Subject:'.$objet."\r\n". 'Content-type: text/plain; charset=ISO-8859-1'."\r\n". 'Sent:'.date('l, F d, Y H:i'); $message = $message."\nTéléphone : ".$votretelephone; if(mail($destinataire,$objet,$message,$headers)) { $status=ST_OK; } else { $msgerr='Un problème est survenu durant l\'envoi du mail.'; } } } else { $msgerr="Votre session a expirée ! Veuillez répondre de nouveau à la question puis valider."; } } else { $msgerr='Une condition innatendue est survenue lors de l\'exécution du script.'; } } } else { $status=ST_READY; } switch ($status) { case ST_READY : echo '<p>Tous les champs doivent être renseignés, merci.</p>'; break; case ST_OK : echo '<p>Votre message a bien été envoyé. Merci.</p><p><a href="/">Retour à la page d\'accueil</a></p>'; break; case ST_PREVIEW : echo '<p>Votre message et votre adresse e-mail sont valides et prêts à être envoyés. <br />Vous n\'avez plus qu\'à cliquer sur le bouton "Envoyer" sans oublier de répondre à la question posée.<br />Prévisualisation :</p>'; break; case ST_ERROR : if (isset($msgerr) && !empty($msgerr)) { echo "<p>".$msgerr."</p>"; } else { echo "<p>Erreur non prévue !</p>"; } break; } ?> <form id='contact' method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"" enctype="multipart/form-data"> <p id='obj'>Utilisez ce formulaire et je vous réponds au plus vite, merci</p> <p> <label for='objet'>Objet de votre message :<br /> <input type='text' name='objet' id='objet' tabindex='10' size='50' value='<?php echo $objet;?>' /> </label> </p> <p id="adr"> <label for="mail">Votre Adresse E-mail<br /> <input name="votremail" tabindex="20" size="40" type="text" id="mail" value="<?php echo $votremail; ?>" /> </label> </p> <p id="tel"> <label for="telephone">Votre téléphone(facultatif, si vous désirez être contactés)<br /> <input name="votretelephone" tabindex="30" size="30" type="text" id="telephone" value="<?php echo $votretelephone ?>" /> </label> </p> <p id="msg"> <label for="message">Votre message<br /> <textarea tabindex="40" rows="10" cols="50" name="message" id="message"><?php echo $message; ?></textarea> </label> </p> <?php include("captcha.php"); $captcha=new capcha(); // Création d'un nouvel objet (instance) de classe capcha $bouton_previsualiser='<p class="bt"><input type="submit" name="previsualiser" tabindex="3" value="Prévisualiser" /></p>'; $bouton_envoi='<p class="bt">'.$captcha->q().' <input type="text" name="reponse" id="reponse" size="4"> '. '<input name="envoi" tabindex="4" value="Envoyer" type="submit" /></p>'; switch ($status) { case ST_READY : echo $bouton_previsualiser.$bouton_envoi; break; case ST_PREVIEW : echo $bouton_envoi; break; case ST_ERROR : echo $bouton_previsualiser.$bouton_envoi; break; } // Sauvegarde dans la session de la réponse attendue issue du captcha $_SESSION['solution'] = substr($captcha->word,$captcha->num-1,1); ?> </form>
et le résultat :
Votre message a bien été envoyé. Merci.
J'ai oublié de détruire la session après avoir validé le forum. Remplace cette partie
par :
PS : testé sur free.fr, fonctionnel.
case ST_OK : echo '<p>Votre message a bien été envoyé. Merci.</p><p><a href="/">Retour à la page d\'accueil</a></p>'; break;
par :
case ST_OK : echo '<p>Votre message a bien été envoyé. Merci.</p><p><a href="/">Retour à la page d\'accueil</a></p>'; session_destroy(); break;
PS : testé sur free.fr, fonctionnel.
re .... j'ai mis ceci :
lien en ligne pour le test : http://refok.free.fr/standing-appart.com/pages/contact.php
toujours le même genre d'erreurs ..... (j'y ai mis mon adresse mail!) et j'ai fais le test depuis le fichier form appelé dans cette page , c'est la même chose ...
je dois encore avoir fait une erreur ... non ?
@+
b g
<?php session_start(); // Restaure la session précédente ou démarre ou nouvelle session define("ST_READY", 0); // La page a été appellée pour la 1ere fois (aucun bouton n'a donc pu être cliqué) define("ST_OK", 1); // La page a été appellée avec le bouton [Envoyer] et l'envoi du mail s'est bien passé define("ST_PREVIEW", 2); // La page a été avec le bouton [Prévisualiser] define("ST_ERROR", 3); // Une erreur s'est produite lors de la vérification de la page function remplacements_speciaux($txt) { $txt=preg_replace('#(<|>)#', '-', $txt); $txt=str_replace('"', "'",$txt); $txt=str_replace('&', 'et',$txt); return $txt; } function mail_valide($mail) { // La variable $verif va nous permettre d'analyser si la sémantique de l'email est bonne $verif='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#'; return preg_match($verif,$mail); } $reponse=""; // On regarde si la réponse a été postée par l'utilisateur if (isset($_POST['reponse'])) $reponse=$_POST['reponse']; $message=""; $objet=""; $votretelephone=""; $votremail=""; // On suppose qu'il y a une erreur par défaut même si ce n'est pas le cas. // Raisonnement par l'absurde en quelque sorte ... $status=ST_ERROR; //input button envoi/previsualiser $envoi=isset($_POST['envoi']) ? htmlentities($_POST['envoi']) : ""; $previsualiser=isset($_POST['previsualiser']) ? htmlentities($_POST['previsualiser']) : ""; if (isset($_POST['message'])) { //quelques remplacements pour les specialchars $message=remplacements_speciaux($_POST['message']); $objet=isset($_POST['objet']) ? remplacements_speciaux($_POST['objet']) : ""; // On assigne et/ou protège nos variables $votremail=stripslashes(htmlentities($_POST['votremail'])); $message=stripslashes(htmlspecialchars($message)); $objet=stripslashes(htmlspecialchars($objet)); $votretelephone=isset($_POST['votretelephone']) ? htmlentities($_POST['votretelephone']) : ""; //on enlève les espaces $votremail=trim($votremail); $message=trim($message); $objet=trim($objet); /*On vérifie si l'e mail et le message sont pleins, et on agit en fonction. (on affiche Apercu du resultat, tel ou tel champ est vide, etc...*/ //Si ca ne vas pas (mal rempli, mail non valide...) if((empty($message)) or (empty($objet)) or (!mail_valide($votremail))) { //les 3 champs sont vides if(empty($votremail) and (empty($message)) and (empty($objet))) { $msgerr='Tous les champs sont vides.'; } //un des champs est vide else { if(!mail_valide($votremail)) { $msgerr='Votre adresse e-mail n\'est pas valide.'; } else { $msgerr='Il faut remplir tous les champs !'; } } } //Si les deux sont pleins et que l'adresse est valide, on envoie on on prévisualise sans envoi else { $domaine=preg_replace('#[^@]+@(.+)#','$1',$votremail); $DomaineMailExiste=checkdnsrr($domaine,'MX'); if(!$DomaineMailExiste) { $msgerr='Le nom de domaine de l\'adresse e-mail que vous avez donné n\'existe pas.'; } elseif(!empty($previsualiser)) { $status=ST_PREVIEW; } elseif(!empty($envoi)) { // Test si la réponse au captcha est correcte ! if (isset($_SESSION['solution'])) { if ($_SESSION['solution'] != $reponse) { $msgerr="Mauvaise réponse à la question posée ! Réessayez."; } else { $objet='[contact SITE info] : '.$objet; $destinataire='monmail@monfai.info'; $mail=$destinataire; $headers='From:'.$votremail."\r\n". 'Subject:'.$objet."\r\n". 'Content-type: text/plain; charset=ISO-8859-1'."\r\n". 'Sent:'.date('l, F d, Y H:i'); $message = $message."\nTéléphone : ".$votretelephone; if(mail($destinataire,$objet,$message,$headers)) { $status=ST_OK; } else { $msgerr='Un problème est survenu durant l\'envoi du mail.'; } } } else { $msgerr="Votre session a expirée ! Veuillez répondre de nouveau à la question puis valider."; } } else { $msgerr='Une condition innatendue est survenue lors de l\'exécution du script.'; } } } else { $status=ST_READY; } switch ($status) { case ST_READY : echo '<p>Tous les champs doivent être renseignés, merci.</p>'; break; case ST_OK : echo '<p>Votre message a bien été envoyé. Merci.</p><p><a href="/">Retour à la page d\'accueil</a></p>'; session_destroy(); break; case ST_PREVIEW : echo '<p>Votre message et votre adresse e-mail sont valides et prêts à être envoyés. <br />Vous n\'avez plus qu\'à cliquer sur le bouton "Envoyer" sans oublier de répondre à la question posée.<br />Prévisualisation :</p>'; break; case ST_ERROR : if (isset($msgerr) && !empty($msgerr)) { echo "<p>".$msgerr."</p>"; } else { echo "<p>Erreur non prévue !</p>"; } break; } ?> <form id='contact' method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"" enctype="multipart/form-data"> <p id='obj'>Utilisez ce formulaire et je vous réponds au plus vite, merci</p> <p> <label for='objet'>Objet de votre message :<br /> <input type='text' name='objet' id='objet' tabindex='10' size='50' value='<?php echo $objet;?>' /> </label> </p> <p id="adr"> <label for="mail">Votre Adresse E-mail<br /> <input name="votremail" tabindex="20" size="40" type="text" id="mail" value="<?php echo $votremail; ?>" /> </label> </p> <p id="tel"> <label for="telephone">Votre téléphone(facultatif, si vous désirez être contactés)<br /> <input name="votretelephone" tabindex="30" size="30" type="text" id="telephone" value="<?php echo $votretelephone ?>" /> </label> </p> <p id="msg"> <label for="message">Votre message<br /> <textarea tabindex="40" rows="10" cols="50" name="message" id="message"><?php echo $message; ?></textarea> </label> </p> <?php include("captcha.php"); $captcha=new capcha(); // Création d'un nouvel objet (instance) de classe capcha $bouton_previsualiser='<p class="bt"><input type="submit" name="previsualiser" tabindex="3" value="Prévisualiser" /></p>'; $bouton_envoi='<p class="bt">'.$captcha->q().' <input type="text" name="reponse" id="reponse" size="4"> '. '<input name="envoi" tabindex="4" value="Envoyer" type="submit" /></p>'; switch ($status) { case ST_READY : echo $bouton_previsualiser.$bouton_envoi; break; case ST_PREVIEW : echo $bouton_envoi; break; case ST_ERROR : echo $bouton_previsualiser.$bouton_envoi; break; } // Sauvegarde dans la session de la réponse attendue issue du captcha $_SESSION['solution'] = substr($captcha->word,$captcha->num-1,1); ?> </form>
lien en ligne pour le test : http://refok.free.fr/standing-appart.com/pages/contact.php
toujours le même genre d'erreurs ..... (j'y ai mis mon adresse mail!) et j'ai fais le test depuis le fichier form appelé dans cette page , c'est la même chose ...
je dois encore avoir fait une erreur ... non ?
@+
b g
Parce que tu inclues le form dans la page !!!!
DOnc ca veut dire que tout le reste de la page est envoyé au navigateur AVANT le session_start().
Cette fonction doit etre LA PREMIERE CHOSE DE TOUT TOUT TOUT TOUT et plus encore...
Donc, ca peut pas marcher... cf #1 et #3
→ session_start() doit être déclaré dans ton header, avant le doctype.
DOnc ca veut dire que tout le reste de la page est envoyé au navigateur AVANT le session_start().
Cette fonction doit etre LA PREMIERE CHOSE DE TOUT TOUT TOUT TOUT et plus encore...
Donc, ca peut pas marcher... cf #1 et #3
→ session_start() doit être déclaré dans ton header, avant le doctype.
autant pour moi ... les messages partent et arrivent
mais il y a toujours affiché :
????
ce serait à cause de l'include ??? comment corriger alors (car je voudrais que ça fonctionne comme sur mon site principal dans lequel il est appelé aussi par un include, mais sans problèmes ...)
@+
b g
mais il y a toujours affiché :
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/128/sdb/3/d/refok/standing-appart.com/pages/contact.php:10) in /mnt/128/sdb/3/d/refok/standing-appart.com/form/form2b.php on line 2
????
ce serait à cause de l'include ??? comment corriger alors (car je voudrais que ça fonctionne comme sur mon site principal dans lequel il est appelé aussi par un include, mais sans problèmes ...)
@+
b g
l'erreur signalée à la 'ligne 2':
je n'y comprends plus rien ...
@+
b g
ligne 1 :<?php ligne 2 :session_start(); // Restaure la session précédente ou démarre ou nouvelle session
je n'y comprends plus rien ...
@+
b g
il faudrait mettre ceci :
au début ????
à la place de :
je commence à "criser" avec le php ....
@+
b g
<?php session_start(); ?> // Restaure la session précédente ou démarre ou nouvelle session <?php define("ST_READY", 0); // La page a été appellée pour la 1ere fois (aucun bouton n'a donc pu être cliqué) define("ST_OK", 1); // La page a été appellée avec le bouton [Envoyer] et l'envoi du mail s'est bien passé define("ST_PREVIEW", 2); // La page a été avec le bouton [Prévisualiser] define("ST_ERROR", 3); // Une erreur s'est produite lors de la vérification de la page
au début ????
à la place de :
<?php session_start(); // Restaure la session précédente ou démarre ou nouvelle session define("ST_READY", 0); // La page a été appellée pour la 1ere fois (aucun bouton n'a donc pu être cliqué) define("ST_OK", 1); // La page a été appellée avec le bouton [Envoyer] et l'envoi du mail s'est bien passé
je commence à "criser" avec le php ....
@+
b g
j'ai toujours cru depuis le début qu'il fallait ouvrir cette cession dans le form et non dans la page contact !!!!
mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et
ecuses !
et chapeau pour ta patience et tes compétences !
viens que je te fasse la bise : ça fonctionne !
en tous cas je t'en dois une ... si je peux te dépanner un jour, dans mon domaine, n'hésite pas !
.... je mets le sujet en résolu ....
@mitiés
b g
mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et
ecuses !
et chapeau pour ta patience et tes compétences !
viens que je te fasse la bise : ça fonctionne !
en tous cas je t'en dois une ... si je peux te dépanner un jour, dans mon domaine, n'hésite pas !
.... je mets le sujet en résolu ....
@mitiés
b g