-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

将 $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电子邮件的输入。它与另一个输入冲突,如果两个输入具有相同的名称而不是数组,则最后一个输入的值将呈现给服务器。

那应该可以解决问题。希望这可以帮助。

于 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'];

一个简单的例子来说明它为什么失败:

测试.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. 因此,当您输入内容并单击提交时,您会发现它不是回显用户输入,而是回显 text Submit。这是因为第一个输入被name提交按钮中的属性覆盖。这可以通过将email输入的名称属性更改为不同的东西来解决,email这样更有意义。

希望这可以帮助!

于 2013-07-18T15:13:33.483 回答
2

表单中有两个字段包含name="reset". 一个是电子邮件字段,另一个是提交按钮。

这会让事情变得混乱——只有其中一个值会进入你的$_POST数组,而且看起来它是错误的。

您应该整理表格并确保您的字段name属性不会发生冲突。

另外,我注意到 email 字段label附近有一个for="usn",但在任何地方都没有一个usn字段可以看到。这不会导致任何问题,但非常不正确(它看起来像一个复制+粘贴错误)——你可能也修复了它。

于 2013-07-18T15:14:29.163 回答
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")。这将导致您的实际重置输入字段覆盖第一个字段(应命名为电子邮件)

将您的电子邮件输入更改为

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

你的 $email 到

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