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