【问题标题】:how to check whether old password entered is present or not in db如何检查输入的旧密码是否存在于数据库中
【发布时间】:2014-11-04 08:49:15
【问题描述】:

我有一个登录页面,用户在其中输入 ID 和密码。要重置密码,我必须检查输入的密码是否存在,是否与我输入的 ID 匹配。如何验证它。我无法来验证它。如果用户输入任何密码,则显示记录已更新。如何验证它。这是代码

登录.php

<label type="text" name="id" maxlength="50" size="20">ID</label><br />
<input type="text" name="id" placeholder="ID" class="input" size="20"/><br /></div>
<div class="formItem">

 <label type="text" name="uid" maxlength="50" size="20">Password</label><br />
<input type="password" name="uid" placeholder="ID" class="input" size="20"/><br /></div>




<span class="field">(* Required field)</span><br /><br />
<input type="submit" name="login1" value="LOGIN" class="button"><br /><br /><br /><br />
</form>

</div>




</body>

</html>

<?php
$username = "root";
$password = "";
$hostname = "localhost"; 
$db = "abc";

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL");
mysql_select_db($db,$dbhandle) or die('cannot select db');





if(isset($_POST['login1']))
{
$id= $_POST['id'];
$uid= $_POST['uid'];

$query= "select * from resume where id='$id'
AND uid='$uid'";
$run= mysql_query($query);
if(mysql_num_rows($run)>0){
echo "<script>window.open('resetp.php','_self')</script>";
}
else {

    echo "<script>alert('Login details are incorrect!')</script>";
    }
}
?>

resetp.php

 <label type="text" name="uid" maxlength="50" size="20">Old Password</label><br />
<input type="text" name="uid" placeholder="id" class="input" size="20"/><br /></div>    


<div class="formItem">

 <label type="text" name="uid" maxlength="50" size="20">New Password</label><br />
<input type="password" name="pass" placeholder="pass" class="input" size="20"/><br /></div>
<div class="formItem">
 <label type="text" name="cpas" maxlength="50" size="20">Confirm Password</label><br />
<input type="password" name="cpas" placeholder="" class="input" size="20"/><br /></div>


<div class="formItem">
<input type="submit" name="login1" value="RESET" class="formButton"><br /><br /><br /><br /></div>
</form>
<?php
$username = "root";
$password = "";
$hostname = "localhost"; 
$db = "resume1";

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL");
mysql_select_db($db,$dbhandle) or die('cannot select db');
if(isset($_POST['login1']))
{
$pass= $_POST['pass'];
$uid= $_POST['uid'];


$cpas=$_POST['cpas'];

$query = "Update `resume` SET uid='".$_POST['pass']."' where uid='".$_POST['uid']."'";
$run = mysql_query($query);
if($query)
{
    echo "<script>alert('Record updated')</script>";
}
else
{
    echo "<script>alert('no')</script>";


}
}

?>

我如何验证它

【问题讨论】:

  • 如果失败则无效。
  • Update resume SET uid='".$_POST['pass']."' where uid='".$_POST['uid']."' 在这里您将uid 设置为可能错误的密码(它可能会失败,因为您无法更新在 where 子句中使用的列)。此外,您还有很多安全问题。首先,您不会逃避用户输入,您应该始终这样做。其次,您将普通密码存储在数据库中。您至少应该使用像md5() 这样的简单哈希来存储密码(但还有更好的方法,请尝试阅读有关加盐密码的内容)。
  • ya..我想验证旧密码是否相同,旧密码是否与表单中输入的相同。
  • 接下来,您使用if($query) 而不是if($run)。由于查询是非空字符串,所以第一个始终为真。
  • 你在哪里检查密码?还有大量的 SQL 注入。

标签: php mysql phpmyadmin


【解决方案1】:

Try this:

This line

<label type="text" name="uid" maxlength="50" size="20">New Password</label><br />

should be 

<label type="text" name="pass" maxlength="50" size="20">New Password</label><br />

【讨论】:

  • 旧密码名称为uid,新密码为pass
  • 您还需要发送 id 以及旧密码和新密码。因为两个或多个用户可能有相同的密码。所以修改你的查询 $query = "Update resume SET uid='".$_POST['pass']."' where id='".$_POST['id']."' AND uid='"。 $_POST['uid']."'";
【解决方案2】:

我想无法理解您的要求。

为什么不像在 login.php 中那样进行验证

 $query= "select * from resume where id='$id'
 AND uid='$uid'";
 $run= mysql_query($query);.................

【讨论】:

  • 或者多加一个Where条件——where password = '".$_POST['pass']."'
【解决方案3】:

PHP 脚本应该位于代码的开头,而不是代码的末尾。以&lt;?php .... ?&gt; 开头,然后跟随&lt;HTML&gt; ... &lt;/HTML&gt;,否则在脚本处理之前就返回结果。

您的代码存在很多安全问题。你可以试试这个。

<?php
   require 'db.php';

   $username = isset($_POST['username']) ? htmlspecialchars(trim($_POST['username']), ENT_QUOTES, 'UTF-8') : '';
    $password = isset($_POST['password']) ? htmlspecialchars($_POST['password'], ENT_QUOTES, 'UTF-8') : '';

   $error = array();
   $error_found = 0;

   if(isset($_POST['submit']) && ($_POST['submit'] == 'Reset'))
    {
        //check for errors.
        //check if username field is empty.
        if(empty($username))
         {
             $error[] = 'Please provide your user-name.';
         }
         //check if password field is empty.
         if(empty($password))
         {
             $error[] = 'Please provide a password.';
         }
         //if errors exist, put errors found as true.
         if(!empty($error))
         {
             $error_found = 1;
         }
         //else no errors are found.
         else
        {
            //proceed to reset.
            //connecting to database.
            $db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or die('Unable to connect, check your connection parameters. ');
            mysql_select_db(MYSQL_DB, $db) or die('Could not select database, check availability. ' . mysql_error($db));

            //querying the database. Checking if user-name password combination exists.
            $query = 'SELECT username FROM resume WHERE username = "' . mysql_real_escape_string($username, $db) . 
                        '" AND password = PASSWORD("' . mysql_real_escape_string($password, $db) . '")';

            $result = mysql_query($query, $db) or die(mysql_error($db));

            //checking if result is true.
            if(mysql_num_rows($result) > 0)
            {
                //the result is true and so you can now reset your password.
            }
            else
            {
                $error[] = 'The username password combination you provided does not exist.';
                $error_found = 1;
            }
        }
    }
  //HTML
?>

<!DOCTYPE HTML>
  <html>
     <head><title> ... </title></head>
     <body>
          <!--Your html code here -->
          <?php
             //if errors are found, then errors are shown here.
             if($error_found == 1)
             {
                echo '<fieldset><center>';
                echo '<ul>';
                foreach($error as $e)
                {
                    echo '<li>' . $e . '</li>';
                }
                echo '</ul>';
                echo '</center></fieldset>';
            }
        ?>
        <form action="nameOfThisScript.php" method="POST">
        Username:<input id="username" type="text" name="username" required />
        Password:<input id="password" type="password" name="password" required />
        <button id="Reset" type="submit" name="submit" value="Reset">Reset</button>
        </form>
      </body>
    </html>

在与此脚本相同的文件夹中创建一个名为db.php 的脚本并放入代码

<?php
define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'root');
define('MYSQL_PASSWORD', '');
define('MYSQL_DB', 'resume1');
 ?>

希望这会有所帮助。

【讨论】:

  • 请给我详细信息..因为我不明白如何检查旧密码是否在数据库中是否是相同的用户名。我想将密码重置为
  • 很简单。首先,您必须在 html 中创建一个表单,以便您发送到服务器的数据通过 POST 或 GET 发送。这是在表单标记中的method="POST" 中定义的。 input 标签中的 required 让用户知道这些字段不能留空。这是一个 HTML5 功能。将数据发送到服务器后,运行一些安全检查以确保没有发送有害代码。使用给定数据检查数据库(参见查询部分),如果返回结果,则用户名-密码组合存在,因此可以通过重定向到新页面或其他方式进行更改。
  • 还记得把php 部分放在开头。如果HTML 在开头,则服务器甚至在php 脚本运行之前就将页面返回给客户端。
  • 您必须记住的另一件事是,您不应将密码作为直接文本存储在数据库中。不好的做法。哈希它。 MySQL 使用PASSWORD() 使用了一种很好的散列技术。查看$query,我首先通过PASSWORD("yourPasswordHere") 对其进行散列来检查密码。我假设您已经通过散列存储了密码。如果没有,也可以直接以文本方式查看密码。
  • 我无法理解没有代码如何检查它是否存在我的 sdb。因为我是 php 新手。
猜你喜欢
  • 2016-01-06
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2018-04-16
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多