validation link via email

前端 未结 7 989
盖世英雄少女心
盖世英雄少女心 2020-12-15 01:24

When a user subscribes to my newsletter via their email address, using php, how would I send them an \'Activation Link\' via email to confirm it is their email address and n

相关标签:
7条回答
  • 2020-12-15 02:10

    Here is my full solution scenario :

    CREATE TABLE signup  (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(30) NOT NULL,
    password VARCHAR(30) NOT NULL,
    email VARCHAR(30) NOT NULL,
    token VARCHAR(30) NOT NULL,
    verified VARCHAR(50),
    registration_date TIMESTAMP,
    maxdate TIMESTAMP
    );
    

    Add signup page signup.php

    Add the following form:

        <form name="signupform" method="post" action="process.php">
        Username:
        <input type="text" name="username">
        <br> Password:
        <input type="text" name="password">
        <br> Email:
        <input type="text" name="email">
        <br>
        <input type="submit" value="Signup">
    </form>
    

    Create process.php page:

    <?php
    $username = $_POST['username'];
    $email = $_POST['email'];
    $password = $_POST['password'];
    date_default_timezone_set('America/New_York');
    $registration_date = date('Y-m-d H:i:s');
    $verified = 0;
    $maxdate = date('Y-m-d H:i:s', strtotime($registration_date . ' +1 day'));
    $salt = uniqid(mt_rand() , true);
    $token = msha1(registration_date . md5($salt));
    $sql = "INSERT INTO signup (username, password, email, token, verified, registration_date, maxdate) VALUES ('$username', '$password', '$email', '$token', '$verified', '$registration_date', '$maxdate')";
    
    if (mysqli_query($conn, $sql))
        {
        $msg = 'Please click this link to verify your email: http://www.yourdomain.com/verifyemail.php?token=' . $token;
        mail($email, $subject, $msg);
        }
      else
        {
        echo mysql_error();
        }
    
    ?>
    

    afterwards create verifyemail.php :

    <?php
    $token = $_REQUEST['token'];
    date_default_timezone_set('America/New_York');
    $current_time = date('Y-m-d H:i:s');
    $sql = "SELECT * FROM users WHERE token='$token' AND maxtime >'$current_time' AND verified=0";
    $result = mysqli_query($conn, $sql);
    $notverified = mysqli_num_rows($result);
    
    if ($notverified)
        {
        $sql = "update signup set verified=1 where token='$token'";
        $result = mysqli_query($conn, $sql);
        if ($result)
            {
            echo 'Email verified';
            }
          else
            {
            echo 'Error';
            }
        }
      else
        {
        echo 'Link expired';
        }
    
    ?>
    
    0 讨论(0)
提交回复
热议问题