【问题标题】:Problems when changing PHP/SQL Query更改 PHP/SQL 查询时的问题
【发布时间】:2012-09-04 07:58:37
【问题描述】:

在我的网站上,我有一个页面,只有在人员详细信息位于名为“成员”的表中时才能查看该页面,这些值是从前一页的表单中发布的。这是我的原始代码,它运行良好:

$query = "SELECT * FROM Members WHERE firstname='" . $firstname . "' and surname='" . 
$surname. "'"; 
$result = mysql_query($query);
$rows = mysql_num_rows($result);

if ($rows == 1) 
{ 
   //user continues loading page
} 
else 
{ 
   header ('location: signup.html'); //user is redirected to sign up page 
}

在对网站进行一些更改后,我现在要求同一用户必须在“成员”表中具有paid='TRUE' 才能继续加载页面。这是我想出的代码:

$query = "SELECT * FROM Members WHERE firstname='" . $firstname . "' and surname='" . 
$surname. "'"; 
$result = mysql_query($query);
$rows = mysql_num_rows($result);

$query = "SELECT paid FROM Members WHERE firstname='" . $firstname . "' and surname='" . 
$surname. "'"; 
$result = mysql_query($query);
$paid = mysql_num_rows($result);


if ($rows == 1 && $paid=='TRUE') 
{ 
   //user continues loading page
} 
else 
{ 
   header ('location: signup.html'); //user is redirected to sign up page 
 }

有了这个新代码,即使用户已经付费,它也会将他们重定向到注册页面...我是不是走错了路?

【问题讨论】:

  • “PAID”是成员表中的一列吗?
  • $paid = mysql_num_rows($result) 将被设置为整数,因此 $paid == 'TRUE' 没有用。第二个 mysql_* 已弃用,尝试使用 PDO 或 mysqli
  • mysql_num_rows 在你的情况下会返回 1

标签: php mysql sql select


【解决方案1】:

您检查 $paid 与 'TRUE' 但用 mysql_num_rows 填充它。 试试:

if ($rows > 0  && $paid >0 )

改为。

另外,由于我看不到你是否正确地转义了你的字符串,请注意 $firstname 和 $surname 应该被转义/验证。

无论如何你可以跳过第二个 mysql_query 并使用:

    $query = "SELECT * FROM Members WHERE firstname='" . $firstname . "' and surname='" . 
    $surname. "'"; 
    $result = mysql_query($query);
    $rows = mysql_num_rows($result);
    if( $rows ){

    $row = mysql_fetch_assoc($result);
        if($row['paid'] =='TRUE') {
            //continue
        } else {
    //redirect
    }
}

【讨论】:

    【解决方案2】:

    你可以试试这个:

    $query = "SELECT * FROM Members WHERE firstname = '" . $firstname . "' and surname = '" . $surname. "' and paid = 'true'";
    $rows = mysql_num_rows(mysql_query($query));
    
    if ($rows == 1) { 
       //user continues loading page
    } 
    else { 
       header ('location: signup.html'); //user is redirected to sign up page 
    }
    

    您还必须确保检查$firstname$surname 中的sql 注入!

    【讨论】:

      【解决方案3】:

      你的代码是错误的。这应该没问题:

      $query = "SELECT * FROM Members WHERE firstname='" . $firstname . "' and surname='" . $surname. "'"; 
      $resource = mysql_query($query);
      $rows = mysql_num_rows($result);
      
      if ($rows) { 
          $result = mysql_fetch_assoc($resource);
          if($result['paid'] == 'TRUE') {
              //user continues loading page
          } else {
              // user has not paid, redirect him to payment page
          }
      } else { 
          header ('location: signup.html'); //user is redirected to sign up page 
      }
      

      无论如何,我建议开始使用mysqliPDO,因为mysql_* 函数已被弃用。

      【讨论】:

        猜你喜欢
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-25
        • 2021-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多