2015-11-29 92 views
-2

我剛剛創建了一個腳本,用於檢查用戶是否已經激活了他的帳戶。如果是這樣,它應該說「該帳戶已被激活」,如果沒有,然後激活該帳戶。問題是它總是說「激活成功」。有人能幫助我嗎?檢查電子郵件是否已被激活不起作用

<?php 
session_start(); 
include_once 'dbconnect.php'; 
$dbconnect = mysqli_connect('server', 'user', 'password', 'database'); 

if (isset($_GET['email'])) { 
    $email = $_GET['email']; 
} 
if (isset($_GET['status']) && (strlen($_GET['status']) == 32)) { 
    $status = $_GET['status']; 
} 

if (isset($email) && isset($status)) { 

    $sql = "SELECT status FROM users WHERE email='$email'"; 
    $result = mysql_query($sql); 

    if ($result == 'active') { 

     echo" <div style='position:absolute;left:29.5%;top:10%;width:41%;' class='alert alert-danger'> 
      <a href='#' class='close' data-dismiss='alert' aria-label='close'>&times;</a> 
      <strong>Chyba!</strong> &#218;&#269;et je ji&#158; aktivov&#225;n! 
      </div>"; 
    } else { 

     $query_activate_account = "UPDATE users SET status='active' WHERE(email ='$email' AND status='$status')"; 
     $result_activate_account = mysqli_query($dbconnect, $query_activate_account); 

     echo" <div style='position:absolute;left:29.5%;top:10%;width:41%;' class='alert alert-success'> 
      <a href='#' class='close' data-dismiss='alert' aria-label='close'>&times;</a> 
      <strong>Úspěch!</strong> Aktivace proběhla úspěšně! <a href='signin.php'>Přihlášení</a> 
      </div>"; 
    } 
} 
?> 
+0

你混合mysql和mysqli的功能 – Tristan

+0

您所查詢的是開放的SQL注入。在任何查詢中使用它之前,您需要清理您的用戶輸入,或者最好使用準備好的語句。 –

回答

-1

更新

$sql = "SELECT status FROM users WHERE email='$email'"; 
    $result = mysql_query($sql); 
to 
$sql = "SELECT status FROM users WHERE email='$email'"; 
    $result = mysql_query($sql); 
while($row = mysql_fetch_assoc($result)){ 
    $status = $row['status']; 
} 

而更換

if ($result == 'active') { 

if ($status== 'active') { 
+0

它說:警告:mysql_fetch_assoc()期望參數1是資源,字符串在/data/web/virtuals/115709/virtual/www/activate.php在線17 – iWispy

+0

我在$ sql添加了$結果,請參閱我的更新回答...完成 –

+2

解決方案應該是mysqli並修復注入攻擊漏洞。 – Tristan

相關問題