PHP脚本无法识别电子邮件

时间:2013-07-18 15:05:18

标签: php html

我现在的注册脚本已经相当远了。这对我来说是一个非常了不起的学习曲线。截至目前,我刚刚用我的用户识别和注册电子邮件发送完成了一些错误。我在恢复密码方面遇到了一些问题。目前我正在尝试识别电子邮件,这是我的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查询有关,但我似乎无法完全理解它。

任何见解都会很精彩!

6 个答案:

答案 0 :(得分:2)

将$ email更改为此:

$email = $_POST['username'];

if(!isset($_POST['reset'])) 

答案 1 :(得分: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 :(得分: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输入的名称属性更改为不同的内容来解决,例如email,这样可以更有意义。

希望这有帮助!

答案 3 :(得分:2)

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

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

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

此外,我注意到电子邮件字段附近有label for="usn",但usn字段无处可见。这不会导致任何问题,但是非常不正确(看起来像是复制+粘贴错误) - 你可能也会解决这个问题。

答案 4 :(得分:1)

您的问题是因为您正在检查重置按钮以查找值,而不是电子邮件字段。这是您的电子邮件字段:

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

所以你需要改变这个:

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

 $email = $_POST['reset'];

要检查$ _POST ['username']。

答案 5 :(得分:1)

您的重置和电子邮件输入字段都命名为reset(name="reset")。这将导致第一个字段(应该命名为email)被实际的重置输入字段覆盖

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

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

您的$电子邮件地址

$email = $_POST['email'];