我目前正在尝试创建一个电子邮件激活系统,该系统会在用户注册时生成唯一代码,并向其发送包含URL的电子邮件,该URL包含作为参数的代码。
我的sql表包含两个添加的字段,1个字段用于保存每个唯一代码的值,以及一个布尔字段,如果帐户未处于活动状态,则为false;如果帐户处于活动状态,则为true。
我目前的代码是:
$code = mysqli_real_escape_string($conn, $_GET['code']);
从网址抓取代码并将其存储为变量
$check = mysqli_query("SELECT * FROM core_customer_information WHERE activation_code='$code' AND activated='1' ");
if ( mysqli_num_rows($check) == 1)
{
die ('The account has already been activated');
}
else
{
$activate = mysqli_query("UPDATE core_customer_information SET activated='1' WHERE activation_code='$code'");
if ( $conn->query($activate) === TRUE )
{
echo ('Your account has know been activated <br>');
echo $code;
}
else
{
die ('Account not activated ' . $conn->error);
}
}
$check
检查帐户是否已被激活且$activate
是否已被支持将我桌面上的布尔字段更新为true
(1)。
我遇到的问题是我的更新查询没有这样做。我在phpmyadmin中测试实际查询以检查它是否有效,它确实如此,所以我非常坚持修复问题,如果有人可以帮助我,我会很感激。
答案 0 :(得分:2)
$check = mysqli_query("SELECT * FROM...");
只是第一个参数应该是连接资源:)
$check = mysqli_query($conn,"SELECT * FROM...");
同时浏览How can I prevent SQL injection in PHP?
此外,您尝试执行两次更新查询。
$activate = mysqli_query("UPDATE ...");
if ( $conn->query($activate) === TRUE )
{
那应该是
if(mysqli_query($conn,"UPDATE ..."))
{
OR
if($conn->query("UPDATE ..."))
{
答案 1 :(得分:0)
您的$check
和$activation
变量都需要连接变量($con
)与查询参数一起传递。像这样:
$check = mysqli_query($conn, "SELECT * FROM core_customer_information WHERE activation_code='$code' AND activated='1' ");
$activate = mysqli_query($conn, "UPDATE core_customer_information SET activated='1' WHERE activation_code='$code'");
答案 2 :(得分:0)
这些行可能有问题,请检查。
$check = mysqli_query("SELECT * FROM core_customer_information WHERE activation_code='$code' AND activated='1' ");
mysqli_query的语法是 -
mysqli_query($con,"SELECT * FROM Table");
更新的mysqli_query相同。
为什么在程序中使用面向对象的mysqli?我的意思是( - &gt;标志) 那么&#39; ===&#39;可能无效
if ( $conn->query($activate) === TRUE )