IF和ELSE声明不起作用

时间:2012-11-02 22:28:52

标签: php mysql

如果用户的积分为10,000,我会尝试为用户颁发徽章。表格中有一个名为badge1的字段,其默认值设置为已锁定和一个点行。我正在运行如果声明,如果用户点数为10,000,则将badge1行从锁定更新为解锁。我的代码似乎是正确的但它既没有更新字段也没有显示任何错误。

<?php
$db = new PDO('mysql:host=hostname;dbname=databasename;charset=UTF-8', 'username', 'password');
$username = $_SESSION['username'];
$q = "SELECT Points FROM login_users WHERE username ='$username'");
$r = mysql_query($q);
$row = mysql_fetch_assoc($r);
$Points = $row['Points'];


if($Points == "10000") {
   $awardBadge = $db->exec("UPDATE login_users SET badge1=unlocked WHERE username=?");
$Points->execute(array($username))
} else {
    print "";
}

?> 

更新

我设法让它工作..但是问题是我将旧的sql转换为PDO有点新,所以这不是很安全,但这是有效的:

<?php
$connect = mysql_connect("host","username","password");
mysql_select_db("databasename");
$username = $_SESSION['jigowatt']['username'];
$q = "SELECT Points FROM login_users WHERE username = ('$username')";
$r = mysql_query($q);
$row = mysql_fetch_assoc($r);
$Points = $row['Points'];

?> 

// Place somewhere
<?php
if($Points >= "10000") {
    $result = mysql_query("UPDATE login_users SET maneki='unlocked' WHERE username='$username'");
} else {
    print "Badge has not been unlocked";

}
?>

6 个答案:

答案 0 :(得分:2)

"10000" string应为10000 int

而且,您也可以在这里做出选择。您正在使用两种类型的设置mysql-database连接。老式mysql_function()方式和新幻想PDO method

我认为使用PDO版本更安全,因为较新的PHP版本将不再支持旧方法......那......它看起来很脏; P

试试这个:

<?php

session_start();

$dbSession = new PDO('mysql:host=***;dbname=***', '***', '***');

$selectQuery = $dbSession->prepare('
  SELECT `User`.`Points`
  FROM `login_users` AS `User`
  WHERE `User`.`username` = :username
');
$selectQuery->bindParam(':username', $_SESSION['username'], PDO::PARAM_STR);

$user = $selectQuery->fetch(PDO::FETCH_ASSOC);

if ( !empty($user) && $user['Points'] == 10000 ) {
  $updateQuery = $dbSession->prepare('
    UPDATE `login_users`
    SET `badge1` = \'unlocked\'
    WHERE `username` = :username');
  $updateQuery->bindParam(':username', $_SESSION['username'], PDO::PARAM_STR);
  $updateQuery->execute();
}

?> 

有用的资源:

答案 1 :(得分:1)

更好地检查&gt; = 10000并且还没有获奖。这也可以在SQL中完成,因此您不需要PHP中的逻辑。

UPDATE login_users SET badge1=unlocked WHERE points >= 10000 and badget1 <> unlocked

答案 2 :(得分:1)

试试这个if($Points == 10000)代替if($Points == "10000")

mysql_query()向与指定link_identifier关联的服务器上当前活动的数据库发送唯一查询(不支持多个查询)。

答案 3 :(得分:1)

if($Points==10000){
    $awardBadge = $db->prepare("UPDATE login_users SET badge1=unlocked WHERE username=?");
    $awardBadge->execute(array($username));
}

答案 4 :(得分:1)

问题是由$point值引起的,该值实际上不等于10000,而是NULL

因此我建议在这种情况下始终使用var_dump()来获取变量的实际值。

答案 5 :(得分:1)

一个提示:在编写php代码之前检查PDO文档!你可以在同一时间使用PDO和mysql命令进行同样的工作!为什么???