如何解决索引未定义错误?

时间:2017-05-09 11:04:59

标签: php mysql email

我创建了两个php文件。 one forgot-password.php second new-password.php

在forget-password.php中,我允许用户输入他们的电子邮件并发送该电子邮件的链接。当他们点击该链接时,他们将被重定向到new-password.php页面。

输入新密码后,它不会更新到数据库中。

来自forgot-password.php的链接



"http://localhost/examplemodel/"."new-password.php?email=" .md5( $email)




现在使用新密码我使用get方法将该电子邮件存储在一个对象中,并通过查询检查该电子邮件是否存在。

然后提交输入的密码并根据此电子邮件值进行更新。

获取记录时,来自get变量的电子邮件正在运行。

但是当我尝试使用get方法中的相同电子邮件值更新密码时,它会显示未定义的索引。我尝试了很多......无法找到解决方案。请帮帮我...

new-password.php代码是



<?php
  if(!isset($_SESSION)) 
    { 
        session_start(); 
    } 

if(isset($_SESSION['usr_id'])!="") {
	header("Location: index.php");
}

include("dbconfig.php");


$email1 = $_GET['md5(email)'];

//check if form is submitted
if (isset($_POST['login'])) {
   
	$password = mysqli_real_escape_string($con, $_POST['password']);
	
	$qry_em = 'UPDATE register SET  password= " '.md5($password). ' "  WHERE email= " ' .$email1 .' "  ';
	$qry_res = mysqli_query($con,$qry_em);
	if (!$qry_res) { die('Invalid query: ' . mysqli_error($con));}
	
	if(!empty($qry_res)) {
			$successmsg = "Your new password is created . <a href='login.php'>Click here to Login</a>";
		} 
		else {
			$errormsg = "Problem in creating new password...";
		}
}
?>

  <?php include("header.php"); ?>


  <div class="col-lg-12 " style="background-color:#49BF4C; margin-top:0.5em;">
    <div class="col-lg-12">
      <strong> <h3 style="color:white; font-weight:900; font-size:1.5em; text-align:center; ">Enter Your New Password...</h3> </strong>
    </div>
  </div>


  <div class="col-md-4 col-md-offset-4 well" style="margin-top:1em;">
    <form role="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="loginform">
      <fieldset>

        <div class="form-group">
          <label for="name">Password</label>
          <input type="password" name="password" placeholder="Your Password" required class="form-control" />
        </div>

        <div class="form-group">
          <input type="submit" name="login" value="Login" class="btn btn-primary" />
        </div>
      </fieldset>
    </form>
    <span class="text-danger"><?php if (isset($successmsg)) { echo $successmsg; } ?></span>
    <span class="text-danger"><?php if (isset($errormsg)) { echo $errormsg; } ?></span>
  </div>


  <?php include("footer.php"); ?>
&#13;
&#13;
&#13;

是否无法将来自该网址的GET方法中的此电子邮件值用于此更新语句的WHERE子句?

1 个答案:

答案 0 :(得分:0)

请记住,您使用md5对查询参数进行了编码,并且您尝试将md5哈希值与电子邮件地址进行比较。

$email1 = $_GET['md5(email)'];可能永远不会有效,只需将其更改为$email1 = $_GET['email'];

即可

然后您可以使用以下更新语句:

$qry_em = 'UPDATE register SET  password= " '. md5($password). ' "  WHERE md5(email) Like " ' .$email1 .' "  ';

但正如一些评论者所说,你没有理由使用md5,而你的代码并不是最安全的。