-1

私は今、登録スクリプトでかなり進んでいます。これは私にとって驚くべき学習曲線でした。今のところ、ユーザー認識と登録メールの送信に関するいくつかのバグを修正しました。ただし、パスワードの回復に問題があります。現時点では、メールを認識させようとしています。これが私の HTML と PHP です。

HTML

<?php
    session_start();    
?>
<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="style.css" />
    </head>

    <body>

        <?php include "header.php" ?>
        <div id="wrapper">

             <form method="post" action="">
             <h2>Recover Password</h2>
             <div id="underline"></div>
                 <ul>
                     <li>
                         <label for="usn">Email : </label>
                         <input type="text" maxlength="30" required autofocus name="reset" />
                     </li>
                     <li class="buttons">
                         <input type="submit" name="reset" value="Reset Pass" class="xbutton" />
                     </li>
                 </ul>
             </form>        
        </div>
    </body>
</html>

<?php include "prec.php" ?>

PHP

<?php 
if($_POST)
{

        if(empty($_POST['reset'])) 
        {
            echo 'Please enter all fields';
        }
        else
        {
            $email = $_POST['reset'];
            $password = $_POST['password'];

            $db_name = 
            $db_user = 
            $db_pass = 

            $conn = new PDO('mysql:host=localhost;dbname=tweezy_php', 'tweezy_php', 'XXXXXX', 
                array( PDO::ATTR_PERSISTENT => true ));

            $stmt = $conn->prepare("SELECT email FROM users WHERE email = ? ");
            $stmt->execute(array($email));
            if($stmt->rowCount() === 1 )
            {
                echo "That email exists";
            }
            else
            {
                echo "Sorry, that email doesn't exsist.";
            }

        }
    }
?>

なんらかの理由で、提供されたメールが何を入力しても認識されません。私のコードを見てみると、その理由はよくわかりません。いくつかのバリエーションを試しましたが、同じ結果が得られるようです。SQLクエリと関係があると思いますが、よくわかりません。

どんな洞察も素晴らしいでしょう!

4

6 に答える 6

2

を含むフォームに 2 つのフィールドがありますname="reset"。1 つはメール フィールド、もう 1 つは送信ボタンです。

これは物事を混乱させます - これらの値の 1 つだけが$_POST配列に取り込まれ、それが間違っているように見えます。

フォームを整理し、フィールドname属性が衝突しないようにする必要があります。

さらに、メール フィールドのlabel近くにがあることに注意してください。ただし、どこにも表示されるフィールドfor="usn"はありません。usnこれで問題が発生することはありませんが、ひどく間違っています (コピーと貼り付けのバグのように見えます)。おそらくそれも修正してください。

于 2013-07-18T15:14:29.163 に答える
2

$email を次のように変更します。

$email = $_POST['username'];

if(!isset($_POST['reset'])) 
于 2013-07-18T15:08:24.750 に答える
2

次のことを試してください。

$conn = new PDO('mysql:host=localhost;dbname=tweezy_php', 'tweezy_php', 'XXXXXX', 
    array( PDO::ATTR_PERSISTENT => true ));

$stmt = $conn->prepare("SELECT email FROM users WHERE email = ? ");
$stmt->bindValue(1, $email);
$stmt->execute();
$result = $stmt->fetchAll();
if(count($result) === 1 ){
    echo "That email exists";
}else{
    echo "Sorry, that email doesn't exsist.";
}

また、nameメールの入力を変更する必要があります。別の入力と競合しており、2 つの入力が配列ではなく同じ名前を持つ場合、最後の入力の値がサーバーに提示されます。

これで問題は解決するはずです。お役に立てれば。

于 2013-07-18T15:13:13.237 に答える
2

入力フィールドは次のとおりです。

<input type="text" maxlength="30" required autofocus name="reset" />

これを次のように変更します。

<input type="text" maxlength="30" required autofocus name="email" />

そして、PHP では、次のようにしてユーザーから電子メールを取得します。

$email = $_POST['email'];

失敗する理由を示す簡単な例:

test.php

<?php
if(isset($_POST['fieldname'])){
echo $_POST['fieldname']; //outputs "Submit" instead of the user input
}
?>

<form action="" method="post">

<input type="text" name="fieldname"/>
<input type="submit" name="fieldname">

</form>

入力欄も送信ボタンも同じnameです。したがって、何かを入力して送信をクリックすると、ユーザー入力をエコーする代わりに、テキストがエコーされることがわかりますSubmit。これは、最初の入力がname[送信] ボタンの属性によって上書きされているためです。これは、email入力の name 属性を別のものに変更することで解決できますemail

お役に立てれば!

于 2013-07-18T15:13:33.483 に答える
1

問題は、電子メール フィールドではなく、値の [リセット] ボタンをチェックしているためです。これがあなたのメールフィールドです:

<input type="text" maxlength="30" required autofocus name="username" />

したがって、これを変更する必要があります。

 if(empty($_POST['reset'])) 

 $email = $_POST['reset'];

代わりに $_POST['username'] を確認します。

于 2013-07-18T15:07:45.027 に答える
1

リセットと電子メールの入力フィールドは両方とも、リセット ( name="reset") という名前です。これにより、最初のフィールド (email という名前にする必要があります) が実際のリセット入力フィールドによって上書きされます。

メールの入力を次のように変更します

<input type="text" maxlength="30" required autofocus name="email" />

そしてあなたの $email へ

$email = $_POST['email'];
于 2013-07-18T15:11:56.403 に答える