php - 如何生成 token 并创建 url 以发送到电子邮件

标签 php mysql pdo

我正在尝试为学生注册页面编写一个脚本,学生在其中输入他/她的学生 ID,如果存在,则检索他/她的电子邮件并生成 token 并将 token 插入数据库,然后发送注册 url 链接,带有 token 和 id 到学生的电子邮件。由于我是 php 和 mysql 的初学者,我如何得到它。 我哪里出错了?

<?php
    error_reporting(1);
    session_start();
    include 'includes/connect.php';
    include 'includes/tokengenerator.php';
    if ($_POST["Submit"] == "Submit") {
        $stu_id = $_POST['stu_id'];
        $sql = "SELECT email FROM people WHERE stu_id = :stu_id";
        $stmt = $pdo->prepare($sql);
        $stmt->bindValue(':stu_id', $stu_id);
        $stmt->execute();
        $result = $stmt->fetch(PDO::FETCH_ASSOC);
        if (!empty($result)) {
            $email = $result['email'];
            //echo $email;
            //exit();
            for ($i = 1; $i <= 2; $i++) {
                $token = generateToken();
                //echo $token;
                $email = $result['email'];
                $sql = "INSERT INTO students (token) VALUES ($token) WHERE email = :email";
                $stmt = $pdo->prepare($sql);
                $stmt->execute(array(
                    ':token' => $token,
                ));
                $result1 = $stmt->fetch(PDO::FETCH_ASSOC);
            }
        } else {
            echo 'Please Contact principal for student ID';
        }
    }
?>

最佳答案

您在查询中绑定(bind)了错误的值::token:email .

您实际上应该有 2 个占位符并绑定(bind)这两个值。

<罢工>

<罢工>
$sql = "INSERT INTO students (token) VALUES (:token) WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(
     ':token' => $token,
     ':email' => $email
));

<罢工>

正如 @Saty 所正确指出的,你不能拥有 WHERE INSERT 上的条款声明:

$sql = "INSERT INTO students (token, email) VALUES (:token, :email)";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(
     ':token' => $token,
     ':email' => $email
));

或者您可能需要 UPDATE语句而不是 INSERT :

$sql = "UPDATE students SET token = :token WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(
     ':token' => $token,
     ':email' => $email
));

关于php - 如何生成 token 并创建 url 以发送到电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37132329/

相关文章:

php - 具有多个值的搜索表单查询 - PHP/MYSQL

php - 您将如何实现类似于 SO 的徽章系统?

javascript - 使用 AJAX 值的文件上传未从其他字段传递

php - 使用计数器和数组在循环中多次获取

javascript - 邮件不能用php发送?

php - 组合 SELECT 和 UPDATE 以避免重复选择

c# - 如何从 MySql 查询中提取日期的月份名称

mysql - 最近发布帖子的用户返回结果的速度比旧帖子的用户要快得多

php - PDO + PHP lastInsertId() 问题

PHP - 获取在第二个函数插入语句中使用的最后语句 PK ID