Mot de passe perdu

Mammouth du PHP | 19672 Messages

30 sept. 2005, 23:12

Suis le raisonnement de mon code: j'initialise en début de code la variable afficher_form à 1 : il y a un cas où je la met à 0, c'est si le mot de passe est envoyé.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 333 Messages

30 sept. 2005, 23:12

voila ce que j'ai fait et rien encore la même chose
</head>
<body>
<?php
if(isset($message))
{
?>
<p style="font-size:10pt; text-align: center; font-weight: bold; color: #c00; font-family: verdana;"><?php echo("". $message .""); ?></p>
<?php
}
else
{
echo $afficher_form;
if($afficher_form == 1)
        {

    ?>
    <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
    <input type="text" name="pseudo" size="40" maxlength="256">
    <input type="submit" value="Envoyer">
    </form>
    <? } else { ?>
<p>L'erreur est dans ce test</p>
<? } ?>

</body>
</html>

Eléphant du PHP | 333 Messages

30 sept. 2005, 23:15

Suis le raisonnement de mon code: j'initialise en début de code la variable afficher_form à 1 : il y a un cas où je la met à 0, c'est si le mot de passe est envoyé.
J'ai compris le résonnement, mais je n'y connais rien à la prog, alors,les "" les ,,, et les }}{{ et autre mots, je m'y perd, c pourquoi votre aide est si importante pour moi.

je vois dans ma tête ce que ca devrais donner, mais je le vois pas sur l'écran

Mammouth du PHP | 19672 Messages

30 sept. 2005, 23:27

Alors raisonne avec logique: la programmation, ce n,est que de la logique. On décompose un problème de façon à n'avoir qu'une sorte de question: des question où on ne peut répondre que oui ou non, 0 ou 1, vrai ou faux, rien d'autre.

Le programme commence par l'établissement d'une variable qu'on met à 1. Si cette variable est à 1, quand on va arriver au if() juste avant le formulaire, la condition sera vraie et on affichera le formulaire. Ça va jusque là ?

Bon, si tu as cliqué sur le bouton submit, la page va être rechargée et la valeur va être testée au début si le bouton submit a été cliqué, sinon, on va direct au formulaire: notre variable est toujours à 1. Mais si le bouton a été cliqué, on rentre dans les traitements.

Si le pseudo est vide, message d'avertissement et on réinitialise notre variable à 1. Elle l'était déjà... peut-être, on assure le coup. Si le pseudo est ok, on va dans le else et on connecte à la base. On cherche le nom d'usager. Si on ne le trouve pas, on fait un message d'erreur et on met notre variable à 1 toujours pour la même raison: à 1 on affichera le formulaire.

Mais si on a trouvé le pseudo, alors on passe dans le else et on envoi le mot de passe par courriel. Mais là, comme tout est ok, on a plus besoin du formulaire. On crée le message de réussite et on met notre variable à 0

Fin du traitement. Dans tous les cas de figure, on teste s'il y a un message et on l'affiche. Ensuite, on teste si notre variable de départ vaut 1 auquel cas on affiche le formulaire, sinon, on ferme la page.


Est-ce qu'exposé comme ça tu saisis mieux ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 333 Messages

30 sept. 2005, 23:35

Réellement tu résonne très bien, là n'est pas le problème, je croyait au même résonnement, saut que toi il est parfait, moi il avait des ptit anicroche. le problème est que au début, avant tout questionnement sur le bouton submit, il y a rien qui affiche comme si la variable était a 0 saut que elle est a 1 ????

Je vais essayer si je les met en 2 page, 1formulaire html et la réponse en php voir

[/code]

Eléphant du PHP | 333 Messages

30 sept. 2005, 23:46

voici la réponse que j'ai sur un autre forum
Bonjour,

Dans tes inputs, deja met le flash a la fin <input />

puis cette ligne:
<?php echo("". $message .""); ?>

ecrit plutot ca
<? echo $message; ?>

avec echo pas de parentheses, t pas de guillement avec une variable sinon il vas t'afficher $message ou lieu de la variable $message.

Ensuite ca vient de tes conditions, tu dit "Si un message est poster" il est pas poster alors la tu dit "sinon" Jusque la OK. Mais apres tu dit "Si afficher form == 1"
mais dans ton cas ce n'est pas le cas donc la condition n'est pas rempli donc il affiche se qu'il y a entre
else
{
et
if
{

et ce qu'il y a entre les 2 ben rien donc rien ne s'affiche.

Peut etre que je me goure et que je suis a coter de la plaque mais e pensse que c'est ca.

j'espere avoir put t'ader.
quesque vous en pensez

Mammouth du PHP | 19672 Messages

30 sept. 2005, 23:52

Ça ne marche pas son truc. Dans tous les cas, la variable est à 1 SAUF si on trouve le pseudo et que l'envoi du courriel a fonctionné. Donc on peut si on veut rajouter un else au if(mail(... mais pour la forme, ce qui donne:
<?
require("connec.php");
$afficher_form = 1;
if (isset($_POST['submit']))
{
    /* On commence par récupérer la valeur envoyée par le formulaire: */
    $pseudo = isset($_POST['pseudo']) ? $_POST['pseudo'] : "";
    if (trim($pseudo) == "")
    {
        $message = "La case est vide.";
        $afficher_form = 1;
    }
    else
    {
        $conecter=mysql_connect($hote,$nom,$passw)or die ("erreur de connexion");
        mysql_select_db($base,$conecter) or die ("erreur de selection");
        $pseudoexists = "SELECT passe FROM membre WHERE pseudo='$pseudo'";
        $existence = mysql_query($pseudoexists);


        if (mysql_num_rows($existence) <= 1)
        {
            $message = "Nom d'usager invalide";
            $afficher_form = 1;
        }
        else
        {
            $to = "$email";
            {
                $message = "Usager ". $pseudo ."\nMot de passe: ". $passe ."\n";
                if(mail ($to, "Votre Mot de passe", $message))
                {
                    $message = "Votre mot de passe vient de vous être envoyé par courriel.";
                    $afficher_form = 0;
                }
                else
                {
                    $message = "Une erreur s'est produite, le mot de passe n'a pa pu être envoyé, veuillez essayer à nouveau ultérieurement.";
                    $afficher_form = 1;
                }
            }
        }
    }
    //On ferme la connexion avec la base
    mysql_close();
}
?>
<html>
<head>
</head>
<body>
<?php
if(isset($message))
{
?>
<p style="font-size:10pt; text-align: center; font-weight: bold; color: #c00; font-family: verdana;"><?php echo($message); ?></p>
<?php
}
if($afficher_form == 1)
{
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
<input type="text" name="pseudo" size="40" maxlength="256">
<input type="submit" value="Envoyer">
</form>
<?php
}
?>
</body>
</html>
Quant à ce qu'il dit sur le echo sans parenthèses, c'est vrai qu'elles sont facultatives, mais pour ma part j'en mets systématiquement et ce n,est pas une erreur de syntaxe, c'est une habitude., Mais on peut simplifier ceci:
<?php echo("". $message .""); ?>
par
<?php echo($message); ?> 
J'ai corrigé aussi dans le code plus haut.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 333 Messages

01 oct. 2005, 00:06

on a un maudit de bon début.... il y a un affichage. mais c tout

j'ai fait quelques petit test.

que j'entre un usager valide ou un nom batard il me revien à la page initial, mais pas de petit message du genre

- mail envoyer
- auvais non
- rien d'écrit

j'ai aussi essayer de tester s'il y avait connection à la BD, j'ai juste modifier et mit des maudaise donné dans le connec.php, et encore rien revien à la boite de texte et submit

mais quand même on a q chose

Eléphant du PHP | 333 Messages

01 oct. 2005, 00:09

ok du nouveau, grosse amélioration

j'ai changer au début du code

if (isset($_POST['submit']))

par

if (isset($_POST['pseudo']))

Et ca fonctionne, mais il y a une erreur de connection, mais si j'y met rien ca marche il inscrit case vide.. :):) je vais revoir mes config de connection

Mammouth du PHP | 19672 Messages

01 oct. 2005, 00:10

Ben voilà, maintenant, il reste à affiner ton script pour le rendre fonctionnel en ligne ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 333 Messages

01 oct. 2005, 00:17

j'ai changer ca aussi
if (mysql_num_rows($existence) < 1)
        {
            $message = "Nom d'usager invalide";
            $afficher_form = 1;
        }
        else
le < 1 était =< 1

et la ca fonctionne reste plus qu'a voir si le mail se rend bien a destination.... mais il m'indique qu'il est en route

J'espère que oui, sinon $?/$$&%&$%&*/

Mais à toi un gros merci de ta patience, et moi de mon côté, je vais décortiquer le script pour voir et comparer avec celui du début pour mieu comprendre

encore merci à tous

Mammouth du PHP | 19672 Messages

01 oct. 2005, 00:21

Tu as raison, c'était une erreur de ma part (j'en fais aussi ;) ), bien vu.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 333 Messages

01 oct. 2005, 00:24

ce n'est pas fini
$to = "[email protected]";
            {
                $message = "Usager ". $pseudo ."\nMot de passe: ". $passe ."\n";
                if(mail ($to, "Votre Mot de passe", $message))
                {
                    $message = "Votre mot de passe vient de vous être envoyé par courriel.";
                    $afficher_form = 0;
                }
                else
                {
                    $message = "Une erreur s'est produite, le mot de passe n'a pa pu être envoyé, veuillez essayer à nouveau ultérieurement.";
                    $afficher_form = 1;
                }
le mail ne marche pas vraimenr

pour qu'il envois je doit mettre l'adresse dans le code ( comme je l'ai mis ) il vas pas chercher l'info dans la bd, si je le laissait comme avant, le message me dit qu'il envois, mais rien ne part, et dans le message, il sir
ex

usager auclairp
password (rien) il lis pas dans la BDD juste le post qu'on a fait

j'essais de voir de mon côté, si tu trouve avant, surement que oui fait moi signe

Eléphant du PHP | 333 Messages

01 oct. 2005, 00:32

{
                    $message = "Votre mot de passe vient de vous être envoyé par courriel. ". $email ."";
                    $afficher_form = 0;
                }
J'ai mis ca à la fin pour voir et non, l'adresse ne s'affiche pas pourquoi ????

Mammouth du PHP | 19672 Messages

01 oct. 2005, 00:33

De toutes façon, dans le bout de code qu'il y a là, la variable $email n'est initialisée nulle part: il faudrait peut-être bien larécupérer quelque part, tu ne crois pas ?
Voilà à quoi ça devrait ressembler : attention, il y a des détails que tu devras ajuster.
<?
require("connec.php");
$afficher_form = 1;
if (isset($_POST['submit']))
{
    /* On commence par récupérer la valeur envoyée par le formulaire: */
    $pseudo = isset($_POST['pseudo']) ? $_POST['pseudo'] : "";
    if (trim($pseudo) == "")
    {
        $message = "La case est vide.";
        $afficher_form = 1;
    }
    else
    {
        $conecter=mysql_connect($hote,$nom,$passw)or die ("erreur de connexion");
        mysql_select_db($base,$conecter) or die ("erreur de selection");
        $pseudoexists = "SELECT passe, email FROM membre WHERE pseudo='$pseudo'";
        $existence = mysql_query($pseudoexists);


        if (mysql_num_rows($existence) < 1)
        {
            $message = "Nom d'usager invalide";
            $afficher_form = 1;
        }
        else
        {
            /* Récupération des information et préparation du message */
            while($envoi = mysql_fetch_assoc($existence))
            {
                $to = $envoi['email'];
                $passe = $envoi['passe'];
            }
            $sujet = "Votre Mot de passe";
            $message = "Usager ". $pseudo ."\nMot de passe: ". $passe ."\n";
            /* Ajout d'en-têtes au message */
            $headers = 'From: [email protected]' . "\r\n" .
            'Reply-To: [email protected]' . "\r\n" .
            'X-Mailer: PHP/' . phpversion();
            /* Envoi du message */
            if(mail ($to, $sujet, $message, $headers))
            {
                $message = "Votre mot de passe vient de vous être envoyé par courriel.";
                $afficher_form = 0;
            }
            else
            {
                $message = "Une erreur s'est produite, le mot de passe n'a pa pu être envoyé, veuillez essayer à nouveau ultérieurement.";
                $afficher_form = 1;
            }
        }
    }
    //On ferme la connexion avec la base
    mysql_close();
}
?>
<html>
<head>
</head>
<body>
<?php
if(isset($message))
{
?>
<p style="font-size:10pt; text-align: center; font-weight: bold; color: #c00; font-family: verdana;"><?php echo($message); ?></p>
<?php
}
if($afficher_form == 1)
{
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
<input type="text" name="pseudo" size="40" maxlength="256">
<input type="submit" value="Envoyer">
</form>
<?php
}
?>
</body>
</html>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: