Php 验证不起作用

Php 验证不起作用,php,Php,因此,我试图通过电子邮件(发送得非常完美)验证用户,但当他们点击链接时,会显示“未插入”。这显然是因为我在插入区域写了一些错误,但我不太确定它可能是什么。这是我的剧本: <?php session_start(); require 'connect.inc.php'; $Username = $_GET['usr']; $Code = $_GET['verify']; $One = '1'; $sql = "SELECT Username, `VerficationCode`, `V

因此,我试图通过电子邮件(发送得非常完美)验证用户,但当他们点击链接时,会显示“未插入”。这显然是因为我在插入区域写了一些错误,但我不太确定它可能是什么。这是我的剧本:

<?php
session_start();
require 'connect.inc.php';


$Username = $_GET['usr'];
$Code = $_GET['verify'];
$One = '1';

$sql = "SELECT Username, `VerficationCode`, `Verified` FROM user WHERE `Username`='$Username'";
$result = $con->query($sql);

if ($result->num_rows > 0) {

    while($row = $result->fetch_assoc()) {

        $ActualCode = $row['VerficationCode'];

        if ($Code == $ActualCode) {

            $confirm = "INSERT INTO user (VerficationCode) VALUES ('$One') WHERE `Username` = '$Username'";
            if(!mysqli_query($con,$confirm)){
                $_SESSION['failed'] = 'Oops! Something went wrong. Please try again.';
                echo 'not inserting.';
            } else {
                header ('Location: home.php');
                $_SESSION['verified'] = 'Successfully verified.';
            }
        } else {

            $_SESSION['verified'] = 'Unsuccessfully verified.';
            header ('Location: index.php');
            echo 'unsuccessful';
        }
    }
} else {
    $_SESSION['failed'] = 'Oops! Something went wrong. Please try again.';
    header ('failed.php');
}


?>
而不是

"INSERT INTO user (VerficationCode) VALUES ('$One') WHERE `Username` = '$Username'"
使用


WHERE Username='$Username'
,不能在插入中使用
WHERE
。这对SQL注入、参数化也是开放的。在insert语句中使用
where
,这将不起作用。您正在尝试更新现有行还是插入新行?您的代码容易受到SQL注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者使用恶意输入值破坏您的数据库。给出了风险的解释,以及如何使用PHP/mysqli安全地编写查询的一些示例。永远不要将未初始化的数据直接插入SQL。是的,插入时不能使用WHERE。如果要更改现有行中的值,请使用“更新”。您可能需要学习基本的SQL教程。如果您在查询失败后回显mysqli_error()的输出,您会看到语法错误。另外还有一个安全错误-使用验证URL中的用户名。通过网络泄露用户名只会为黑客攻击您的登录系统创建一个数据源(如果它与此处的代码类似,那么很容易被入侵)。您的验证码应该是唯一的,并且足以匹配用户,而无需传输用户名。将其设置为1似乎是试图使其无效,但您应该保留它以用于审计目的,并设置另一个布尔字段以指示代码已被使用。但是使用不带
mysql\u real\u escape\u string
的varialbles是不安全的(请参阅)谢谢!它起作用了。我最近才开始学习PHP,我做的事情远远超过了我的进度,但最终我学习得更快,这就是我为什么这么做的原因。仅供参考:P
"INSERT INTO user (VerficationCode) VALUES ('$One') WHERE `Username` = '$Username'"
"UPDATE user SET `VerficationCode`='$One' WHERE `Username` = '$Username'"