PHP if if条件验证

时间:2016-01-11 23:06:37

标签: php mysql

我正在尝试创建一个能够获取API和API的激活页面。来自网址的ACT代码。

然后我尝试在这些代码上查询数据库以检查它们是否有效。

如果它们无效,我想回复说明echo "<strong><font color=red>Your Activation Code has Expired, or Your Activation Code is not Valid!</font></strong>";

的错误

如果有效,那么我想使用2nd SQL Query - "UPDATE users SET status='1', date_activated='$Activation_Date', Activation='' WHERE Activation='$Activation' AND API='$API' AND status='0'"

进行更新

如果网址中没有API&amp; ACT代码,我想回复一下&#34;内容&#34;

   <?
    require 'admin/config.php';
    require 'Connection.php';
    error_reporting(E_ALL);
    $API = $_REQUEST['api'];
    $Activation = $_REQUEST['act'];

    $sql= mysql_query("SELECT * WHERE Activation='$Activation'");

    if ($sql = 0) { echo"ERROR";}
    else {
    $Activation_Date = date('m-j-y - h-iA');
    $sql = mysql_query("UPDATE users 
                        SET status='1', date_activated='$Activation_Date', Activation='' 
                        WHERE Activation='$Activation' AND API='$API' AND status='0'");
    if($sql == 0){
        echo "<strong><font color=red>Your Activation Code has Expired, or Your Activation Code is not Valid!</font></strong>";
    } elseif ($sql > 0) {
    echo "content";
    }
    }
    ?>

3 个答案:

答案 0 :(得分:6)

您需要检查的是,是否存在行。

要检查它是否存在并基于以下型号:

$sql = mysql_query("SELECT * WHERE Activation='$Activation'");

if(mysql_num_rows($sql) > 0){
    //do something here or show error because relation already exists
}
else{
   //relation already do not exists. so you can insert the record here
}

然后,要检查您的UPDATE是否真的成功,请使用mysql_affected_rows()

旁注:此函数可能要求您将db连接变量传递给它。

$sql = mysql_query("UPDATE users .... ");

if(mysql_affected_rows() > 0){

   // do something
   }

else {
   // do something else
   }

检查PHP和MySQL的错误:

在打开PHP标记后立即将错误报告添加到文件的顶部 例如<?php error_reporting(E_ALL); ini_set('display_errors', 1);然后代码的其余部分,看它是否产生任何结果。  同时将or die(mysql_error())添加到mysql_query()

如果您收到有关弃用通知的错误,则需要切换到mysqli_或PDO。

您可以在https://stackoverflow.com/a/22253579/1415724查阅我的一个答案,以检查是否存在行。

它使用了一些方法,包括一个准备好的语句,这是你应该使用的,因为你可以使用SQL注入。

旁注:您使用的连接API未知。确保您使用的查询与mysql_的查询相同。如果它是mysqli_或PDO,那些不同的API不会混用。您必须使用相同的连接到查询。

另外,只是关于if ($sql = 0)的快速说明。单个等号&#34;指定&#34;而不是&#34;比较&#34;例如=====

你在评论中说:

  

&#34;如果激活码处于活动状态(md5将存在)&#34;

我希望您不要将其用于密码存储。如果是这样,请不要。该功能不再可以安全地用来存储密码。

使用以下其中一项:

其他链接:

查看<?确保启用了短标记。如果没有,请将其更改为<?php

HTML stickler。

<font color=red> {@ 1}}标记已弃用/已废弃,HTML5不支持。

如果您通过电子邮件发送任何内容,最好使用内联CSS。

即:<font>

以下是一些参考文献:

答案 1 :(得分:1)

说明

  • 检查必需参数:
    您可以测试参数是否设置如下: 的 isset(变量名)即可。
  • 在SELECT查询中,缺少FROM子句,它指出要从中选择的表。
    我假设它是&#34; user&#34;比如在UPDATE查询中。
  • 在SELECT查询之后,当光标不再使用时,应该再次释放光标: mysql_free_result($ sql);

(错误)测试

  • 如果查询无法以核心方式执行,则查询结果为 === false
  • 拥有SELECTed记录后,函数 mysql_num_rows()会显示检索到的数量。
  • 在UPDATed表后,函数 mysql_affected_rows()会给出受影响的记录数。

代码段

// Get parameters and check if mandatory parameters are set
$API =        isset($_REQUEST['api']) ? $_REQUEST['api'] : false;
$Activation = isset($_REQUEST['act']) ? $_REQUEST['act'] : false;
if ( ($API===false) || ($Activation===false)) {
    $which =  ($API === false ) ? '"api"' : '';
    $which .= ($Activation === false) ? ((empty($which) ? '' : ', ') . '"act"') : '';
    echo "ERROR: Parameter(s) missing: $which";
    return;
}

// Select activation record
$sql= mysql_query("SELECT * FROM users WHERE Activation='$Activation'");
if ($sql===false) { 
    echo "SQL ERROR: " . mysql_error(); 
    return;
} else {
    $nrows = mysql_num_rows();
    mysql_free_result($sql);
    if ($nrows < 1) { 
        // No matching record found
        echo "ERROR: No activation record found"; 
        return;
    } else {
        // Update users record
        $Activation_Date = date('m-j-y - h-iA');
        $sql = mysql_query("UPDATE users 
                SET status='1', date_activated='$Activation_Date', Activation='' 
                WHERE Activation='$Activation' AND API='$API' AND status='0'");
        if ($sql===false) {
            echo "SQL ERROR: " . mysql_error();
        } elseif(mysql_affected_rows() < 1) {
            // No matching record found for updating
            echo '<span style="color:red; font-weight:bold;">Your Activation Code has Expired, or Your Activation Code is not Valid!</span>';
        } else {
        echo "content";
        }
    }
}

答案 2 :(得分:0)

这是我最终的结果。

这是来自@ hherger答案的调整....

// Report all errors
error_reporting(E_ALL);


// Get parameters and check if mandatory parameters are set // Get parameters and check if mandatory parameters are set
$API =        isset($_REQUEST['api']) ? $_REQUEST['api'] : false;
$Activation = isset($_REQUEST['act']) ? $_REQUEST['act'] : false;
if ( ($API===false) || ($Activation===false)) {

}

// Select activation record
$sql= mysql_query("SELECT * FROM users WHERE Activation='$Activation'");
if ($sql===false) { 
    echo "SQL ERROR: " . mysql_error(); 
    return;
} else {
    $nrows = mysql_num_rows($sql);
    mysql_free_result($sql);
    if ($nrows < 1) { 
        // No matching record found
        echo "REDIRECT USER TO HOME PAGE"; 
        return;
    } else {
        // Update users record
        $Activation_Date = date('m-j-y - h-iA');
        $sql = mysql_query("UPDATE users 
                SET status='1', date_activated='$Activation_Date', Activation='' 
                WHERE pinAPP_Activation='$Activation' AND API='$API' AND status='0'");
        if ($sql===false) {
            echo "SQL ERROR: " . mysql_error();
        } elseif(mysql_affected_rows() < 1) {
            // No matching record found for updating
            echo '<span style="color:red; font-weight:bold;">Your Activation Code has Expired, or Your Activation Code is not Valid!</span>';
        } else {
        echo "ECHO SUCCESS DISPLAY!";
        }
    }
}