2014-02-06 34 views
0

最后在花了两天的时间并且在Stack Overflow的每个人的帮助下,我们已经设法使这个工作成功。感谢你们所有的努力工作人员,并一步一步地告诉我!SQL/PHP如果NULL显示其他显示

我们正在试图让下面的代码currectly工作,

它需要A.检查激活代码为NULL,如果是将用户移动到的一种形式B.如果检查激活不是NULL,它应该告诉用户尝试另一个激活码。我知道这很简单,但我们似乎无法看到问题。

Database Screenshot

<?php 

$username = $_POST['username']; 
$activation_code = $_POST['activation_code']; 
$activation_codeurl = $activation_code; 
$usernameurl = $username; 

$db_host = "localhost"; 
$db_name = "aardvark"; 
$db_use = "aardvark"; 
$db_pass = "aardvark"; 

$con = mysql_connect("localhost", $db_use, $db_pass); 
if (!$con){ 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db($db_name, $con); 

    $checkcustomer = mysql_query("SELECT `Check_Activation` FROM `members` WHERE `Username` = '".mysql_real_escape_string($username)."' AND `Activation` = '".mysql_real_escape_string($activation_code)."'; "); 
    $array = mysql_fetch_array($checkcustomer); 
    if (!$array === false) 
     { 

      $username = substr($username, 0, 1); 
      if($username == '1') { 
       $redirect_url='form-one.php?membernumber='.$usernameurl.'&activation_code='.$activation_codeurl; 
      } elseif($username == '2') { 
       $redirect_url='form-two.php?membernumber='.$usernameurl.'&activation_code='.$activation_codeurl;    
      } elseif($username == '3') { 
       $redirect_url='form-three.php?membernumber='.$usernameurl.'&activation_code='.$activation_codeurl; 
      } 
      header("Location:". $redirect_url); 
    } 
    else 
    { 

?> 
<html> 
    <head> 
     <link rel='stylesheet' id='style-css' href='css/style.css' type='text/css' media='all' /> 
     <meta name="viewport" content="width=960, initial-scale=0.32"> 
     <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"> 
     <link rel="shortcut icon" href="http://welovebarrio.com/favicon.gif"> 
     <link rel="icon" href="http://welovebarrio.com/favicon.gif" type="image/gif"> 
     <title>Friends of BARRIO</title> 
     <script type="text/javascript"> 
        var _gaq = _gaq || []; 
        _gaq.push(['_setAccount', 'UA-35015193-1']); 
        _gaq.push(['_setDomainName', 'welovebarrio.com']); 
        _gaq.push(['_trackPageview']); 
        (function() { 
         var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
         ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
         var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
        })(); 
     </script> 
    </head> 
    <body> 
     <div class="inner-wrapper stage-one"> 
      <div class="barrio-logo">Friends of Barrio</div> 
      <div class="barrio-wel-message"> 
       <h1>Welcome Friends of Barrio</h1> 
       <span>-</span> 
       <h2>Enter a valid membership number<br/> and activation code to continue</h2> 
      </div> 
      <form name="form1" method="post" action="check-activation.php" class="membership-form"> 
       <h3>Your membership number</h3> 
       <input name="username" type="text" id="username" value="<?php echo $username; ?>" class="membership-number"> 

       <h3>our activation code</h3> 
       <input name="activation_code" type="text" id="activation_code" value="<?php echo $activation_code; ?>" class="activation-code"> 

       <input type="submit" name="Submit" value="Continue" class="membership-continue"> 
      </form> 

     </div> 
     <div class="error-message"> 
      <span>Your membership number &amp; activation code <br/>is not valid, please check and re-enter</span> 
     </div> 

    <div class="background-tl"></div> 
    <div class="background-tr"></div> 
    <div class="background-bl"></div> 
    <div class="background-br"></div> 
</body> 
</html> 
<?php 
} 
$con->close(); 
?> 

enter image description here

回答

0

的问题是,您的查询最有可能没有按没有任何回报。

您正在使用&运算符,它是一个按位运算符。

代替

SELECT `Check_Activation` FROM `members` 
WHERE `Username` = '".$username."' & `Activation` = '".$activation_code."'; 

使用

SELECT `Check_Activation` FROM `members` 
WHERE `Username` = '".$username."' AND `Activation` = '".$activation_code."' 

此外,取出;在查询结束时。

要检查您的查询实际返回的数据,使用

$array = mysql_fetch_array($checkcustomer); 
if ($array === false) 
{ 
    // Do something if the query failed to return anything, i.e. 
    echo "Invalid username/activation code 
} 

另注:请不要在查询中使用$ _ POST值,一定要对他们第一次使用mysql_real_escape。或者甚至更好,使用PDO或mysqli准备好的语句。

+0

这工作!谢谢dbemerlin!我真的很喜欢这个。 – Delete

0

更换if (is_null($array['Check_Activation'])if(!$array['Check_Activation'])

+0

我已经试过这个,但仍然没有运气。 – Delete

+0

你可以做一个var_dump()到$ array ['Check_Activation']吗? ,这是奇怪的PHP mysqllib通常会将null转换为false或空 –

0

如果没有找到激活行,mysql_fetch_array将返回FALSE。 试试这个:

if (empty($array['Check_Activation'])) { 

它会检查是否有行已经发现,如果Check_Activation字段不为空。

AND代替&在您的查询。

您应该通过一些转义函数来处理$username$activation_code以防止SQL注入。

... WHERE `Username` = '" . mysql_real_escape_string($username) . "' ... 
+0

我将上面的代码添加到了正确的区域,并且仍然允许通过任何用户名和激活码。 – Delete

0

你必须只匹配名称检查,如果该值为null或不

$checkcustomer = mysql_query("SELECT `Check_Activation` FROM `members` 
           WHERE `Username` = '".$username."'"); 

然后你必须检查

$array = mysql_fetch_array($checkcustomer); 
    if (is_null($array['Check_Activation'])) { 
      $username = substr($username, 0, 1); 
      if($username == '1') { 
       $redirect_url='form-one.php?membernumber='.$usernameurl.'&activation_code='.$activation_codeurl; 
      } elseif($username == '2') { 
       $redirect_url='form-two.php?membernumber='.$usernameurl.'&activation_code='.$activation_codeurl;    
      } elseif($username == '3') { 
       $redirect_url='form-three.php?membernumber='.$usernameurl.'&activation_code='.$activation_codeurl; 
      } 
      header("Location:". $redirect_url); 
    } 
    elseif($array['Check_Activation']==$activation_code) 
    { 
     /*your code */ 
    }else{ 
?> 
+0

因此,我尝试了这一点,它允许任何用户名和激活代码通过,我只想'NULL'的值'check_activation'去到下一个表格,不是所有的用户。 – Delete