Question sur un petit script.

Petit nouveau ! | 6 Messages

30 nov. 2008, 23:55

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! :)

ViPHP
ViPHP | 3607 Messages

01 déc. 2008, 00:16

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();

Petit nouveau ! | 6 Messages

01 déc. 2008, 00:28

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

ViPHP
ViPHP | 3607 Messages

01 déc. 2008, 12:21

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]

Petit nouveau ! | 6 Messages

01 déc. 2008, 12:55

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.

ViPHP
ViPHP | 3607 Messages

01 déc. 2008, 13:00

Et bien fait nous voir où il est ;)

Petit nouveau ! | 6 Messages

01 déc. 2008, 14:55

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

ViPHP
ViPHP | 3607 Messages

01 déc. 2008, 15:02

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...)

ViPHP
ViPHP | 3607 Messages

01 déc. 2008, 15:02


Petit nouveau ! | 6 Messages

01 déc. 2008, 15:22

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.

Invité
Invité n'ayant pas de compte PHPfrance

01 déc. 2008, 16:34

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...

Petit nouveau ! | 6 Messages

01 déc. 2008, 17:51

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 ;)