Page 1 sur 1

Question sur un petit script.

Posté : 30 nov. 2008, 23:55
par Pas codeur du tout :x
Bonjour!
Mon premier post et ma premiere question! :)

Voici un petit script pour récuperer un nom et un prenom entré sur une page d'une association.

Ma question : quelle modification apporter pour qu'il y ai redirection apres que les infos aient été envoyées ?
Genre : un petit message de 5 secondes disant que ca a bien été pris en compte, redirection en cours blabla, et hop! :)


Le script :

<?php

/**
 * Script d'envoi de courriels
 */
 
if ($_POST['envoi']) {    //Si on a déjà envoyé une première fois les données
    $erreur = 0;    //On met le compteur d'erreur à 0
    
    if (empty($_POST['prenom']) || empty($_POST['nom'])) {    //Si le prénom ou le nom est manquant :
        $erreur="Informations non valides. Vérifiez vos informations.";    //On retourne un message d'erreur...
        return;    //... et on arrête l'exécution du script.
    };
    
//Si on n'a pas d'erreur, on construit puis on envoie le courriel, puis on affiche une erreur positive
$courriel = "[email protected]";
$sujet = "Abonnement de ".$_POST['prenom']." ".$_POST['nom'];
$message = "Ce message confirme l'adhésion de ".$_POST['prenom']." ".$_POST['nom']." à l'association";
mail($courriel,$sujet,$message);
$erreur="Votre abonnement a bien été envoyée à l'association !";

//Puis, qu'on ait ou non envoyé l'adhésion, on affiche le formulaire

}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<head>
    <title>S'inscrire à l'association</title>
</head>

<body>

<?php if ($erreur) :
//Si on a reçu une erreur lors d'un envoi précédent, on affiche le message d'erreur
?>
<div>
    <p><?php echo $erreur; ?></p>
</div>
<?php endif; ?>

<form method="post" action="<?php $PHP_SELF; ?>">
    <ul style="list-style: none;">
        <li><label>Préom&nbsp;: <input type="text" id="prenom" name="prenom" value="<?php echo $_POST['prenom'] ?>" /></label></li>
        <li><label>Nom&nbsp;: <input type="text" id="nom" name="nom" value="<?php echo $_POST['nom'] ?>" /></label></li>
        <li><input type="submit" value="Envoyer" /><input type="hidden" id="envoi" name="envoi" value="1" /></li>
    </ul>
</form>

</body>
</html>
Merci! :)

Posté : 01 déc. 2008, 00:16
par jojolapine
Bonsoir,
Pour la redirection avec message et attente de 5 secondes:
http://www.google.fr/search?hl=fr&q=red ... =&aq=f&oq=
Sinon si tu ne veux rien afficher: header();

Posté : 01 déc. 2008, 00:28
par Pas codeur du tout :x
Désolé d'etre lourd; et je tient a préciser que ce code n'est pas de moi; je ne suis pas capable de faire ce genre de choses ^^'

Mais... ou dois-je placer mon header ?
J'ai essayé un peu au hasard, et soit j'ai pas d'affichage et une redirection, soit pas de redirection :s

Posté : 01 déc. 2008, 12:21
par jojolapine
Humhum...
Si tu avais lu ce que je t'ai dit...
Le header(), on s'en sert pour rediriger Sans affichage
Si tu veux avoir un affichage avant: redirection javascript

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 01 déc. 2008, 12:55
par Pas codeur du tout :x
Attend, je me suis mal exprimé ^^"

Par "pas d'affichage", j'entend : pas du tout! ^^'
Autrement dis, j'ai une belle page blanche avec rien hormis ou bout d'un moment ma redirection :roll:

C'est pour ca que je suppose que cela est du a l'endroit ou j'ai placé mon header.

Posté : 01 déc. 2008, 13:00
par jojolapine
Et bien fait nous voir où il est ;)

Posté : 01 déc. 2008, 14:55
par Pas codeur du tout :x
Voici!
<?php

/* Script d'envoi de courriels */

//Temporisation (nécessaire pour effectuer plus tard une redirection vers une autre URL)
ob_start();

 
//Exécution du script d'envoi seulement si on a envoyé des données (appui sur le bouton "Envoyer")
if ($_POST['envoi']) {

    //On met le compteur d'erreurs à 0
    $erreur = 0;
    
    //Si le prénom ou le nom est manquant, on procède à l'arrêt du traitement
    if (!$_POST['prenom'] || !$_POST['nom']) {
        $erreur = 1;                                                        //On a une erreur...
        $erreurmess="Informations non valides. Vérifiez vos informations.";    //... on retourne un message d'erreur explicatif...
        return;                                                            //... et on arrête l'exécution du script.
    };
    
//Si on n'a pas d'erreur, on construit puis on envoie le courriel, puis on affiche une erreur positive
    $courriel = "[email protected]";
    $sujet = "Abonnement de ".$_POST['prenom']." ".$_POST['nom'];
    $message = "Ce message confirme l'adhésion de ".$_POST['prenom']." ".$_POST['nom']." à l'association";

//Envoi du courriel ci-dessus et affichage d'un message d'erreur positif
mail($courriel,$sujet,$message);
$erreurmess="Votre abonnement a bien été envoyée à l'association !";

//Instructions de redirection
//    'refresh' est le nombre de secondes à attendre avant de rediriger le visiteur vers une autre adresse
//    'url' est l'adresse vers laquelle rediriger
header("Refresh: 5; url=http://www.domaine.asso.fr");

//Envoi de l'instruction de redirection
ob_flush();

//Puis, qu'on ait ou non envoyé l'adhésion, on affiche le formulaire

}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<head>
    <title>S'inscrire à l'association</title>
</head>

<body>

<?php
//Si on a reçu un message d'erreur lors d'un envoi précédent, on affiche le message d'erreur
    if (!empty($erreurmess)) :
?>
<div>
    <p><?php echo $erreurmess; ?></p>
</div>
<?php endif; ?>

<?php
//On n'affiche le formulaire que si on n'a jamais affiché au préalable la page ou si on a une erreur.
    if (!$_POST['envoi'] || $erreur) :
?>
<form method="post" action="<?php $PHP_SELF; ?>">
    <ul style="list-style: none;">
        <li><label>Prénom&nbsp;: <input type="text" id="prenom" name="prenom" value="<?php if (!empty($_POST['prenom'])) {print $_POST['prenom']}; ?>" /></label></li>
        <li><label>Nom&nbsp;: <input type="text" id="nom" name="nom" value="<?php if (!empty($_POST['nom'])) {print $_POST['nom']}; ?>" /></label></li>
        <li><input type="submit" value="Envoyer" /><input type="hidden" id="envoi" name="envoi" value="1" /></li>
    </ul>
</form>
<?php endif; ?>

</body>
</html>
Alors, je sais plus ce qui a été modifié entre temps; mais en plus j'ai une erreur d'accolade ligne 66 sans comprendre pourquoi...
Donc la j'avais aucun affichage (page blanche), puis une redirection.

Parait-il que les ob_start() et flush() sont pour la temporisation :s

Posté : 01 déc. 2008, 15:02
par jojolapine
Alors déjà enlève tes fonctions ob_**() dans ce cas là elle ne servent à rien...
Vu que le header() est situé avant tout affichage...

Sinon je n'ai jamais essayer de redirection "différée" avec la fonction header, donc je ne sais pas si la syntaxe est bonne...

Essaye une redirection comme ceci:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<head>
    <title>S'inscrire à l'association</title>
<meta http-equiv="refresh" content="0;url=page.html" />
</head> 
pour voir? (donc enlève le header...)

Posté : 01 déc. 2008, 15:02
par jojolapine

Posté : 01 déc. 2008, 15:22
par Pas codeur du tout :x
Le souci avec le header en tout début (faut rien mettre a ce que j'ai compris :s), c'est qu'il me fais une redirection immediate!
Alors, c'est bien, parce qu'on ne peut pas faire "retour", mais bon... ^^'

Ou alors faut que je mette un delais, genre 30 sec (balise meta), en esperant que les gens auront le temps d'entrer ce qui faut :D

Mais, plus sérieusement, je ne vois franchement pas comment effectuer ma redirection (sans utiliser de page tierce); et qu'elle ai lieu juste apres que j'ai appuyé sur le bouton de validation :s

D'ailleurs, ca n'est pas a ce bouton que je devrais essayer de faire dire quelque chose ?
---> Envoie les infos et redirige steuplaiiit :roll:

Je ne sais pas si je suis franchement lourd ou si j'arrive a me faire comprendre ^_^


PS: derniere précision : ma page ne comporte pas que ce mini script hein; ya des autres trucs en html pour centrer les objets, des couleurs, et tout... donc ya un mix php/html et c'est pour ca que je parle de "trucs" avant le header.

Posté : 01 déc. 2008, 16:34
par Invité
ah oui, j'avais pas vu le problème...
le formulaire est dans la même page... excuse moi je suis distrait...
Et bien la solution oui c'est une page tierce, ou alors changer le contenu de celle-ci en fonction de si le formulaire à été validé ou non...

Posté : 01 déc. 2008, 17:51
par Pas codeur du tout :x
Oui, dans ce cas ca dépasse, et de loin mes compétences...
Faut créer une variable qui devient 1 si on a appuyé sur "valider" et une condition de redirection si cette variable vaut 1 alors ? :s

Mais ca revient pas à se reposer la question de ou on va mettre son header() ca ?


Pour le moment j'suis sur la balise meta avec un delais suffisant pour que les gens puissent entrer leurs infos... c'est pas ce qui a de mieux, mais on fera avec ^^"

Si d'ici la tu as une idée (suis sur que ca doit etre tout c... en pluche =)) hésites pas ;)