php
  • mysql
  • 2011-08-30 106 views 1 likes 
    1

    我正在编程一个随机事件系统,发生在用户登录时,我把下面的一段代码放到我的包含文件中。为什么我的if语句会忽略我的条件?

    $tehchance = mt_rand(1,15); 
    if ($tehchance == "1"){ 
    $thewin = 10; 
    mysql_query("UPDATE members SET Points = Points + $thewin WHERE Handle = '$members[Handle]'"); 
    } 
    

    我也有这个另一事件:

    if ($tehchance == "2"){ 
    $thekhwin = 5; 
    $thexpwin = 10; 
    mysql_query("UPDATE members SET Points = Points - $thekhwin WHERE Handle = '$members[Handle]'"); 
    mysql_query("UPDATE members SET XP = XP + $thexpwin WHERE Handle = '$members[Handle]'"); 
    } 
    

    的代码将工作,但有时当$ tehchance大于或者等于1或2别的东西等,这将不理会我的条件,更新成员表而不满足if语句。从测试中,它会随机添加点或减去点。我从$ tehchance打印了随机数,即使它不等于1或2,它仍然会添加点。然后有时对成员表不做任何操作。真的很困惑。

    任何想法?

    +0

    首先,您将随机生成的整数与字符串值进行比较。 – js1568

    +0

    ...然后有可能是别的错误。 – 2011-08-30 18:33:01

    +2

    在你的条件块中添加一个调试回声,比如'if($ tehchance == 2){echo'it is 2';/*其余代码... * /}'。更可能的是,您不止一次修改'$ tehchance',不止一次运行您的脚本,或者在其他地方进行无关更新。 – erisco

    回答

    1

    尝试使用一个if-then-else和调试这一点。

    $tehchance = mt_rand(1,15); 
    
    if ($tehchance === 1){ 
        echo 'doing 1'; 
        $thewin = 10; 
        mysql_query("UPDATE members SET Points = Points + $thewin WHERE Handle = '$members[Handle]'"); 
    } else if ($tehchance === 2){ 
        echo 'doing 2'; 
        $thekhwin = 5; 
        $thexpwin = 10; 
        mysql_query("UPDATE members SET Points = Points - $thekhwin WHERE Handle = '$members[Handle]'"); 
        mysql_query("UPDATE members SET XP = XP + $thexpwin WHERE Handle = '$members[Handle]'"); 
    } else { 
        echo 'doing nothing'; 
    } 
    
    +0

    好了之后,成员表STILL更新时,它说什么都不做。有时它不会像它应该做的那样,然后其他时候它会增加点数。 – Brad45

    +0

    听起来像你有执行其他地方相同的代码。它不应该输出“无所事事”并运行其他语句。 –

    +0

    就是这样,这是我包含的唯一一种代码。这不是别的地方。我有更新成员表的成就功能,但它们与添加点或XP无关。正在发生的变化是Points和XP。有时它会在无所事事的时候随机增加10分。有时会减去5分并添加10个XP。这就像if语句在他们想要的时候才起作用。 – Brad45

    0

    ,因为你是在比较字符串:“1”,而不是数字1(不带引号)

    +3

    虽然比较数字会更好,但PHP会强制这些值很好。 '1 ==“1”'为真,'1 ==“2”'为假。 (虽然这些都是简单的例子,但有一些...有趣的转换选择。) – 2011-08-30 18:33:44

    +0

    我只是将它更改为不带引号的数字,它仍具有相同的行为。 – Brad45

    +0

    这是一个有效的查询吗?点数=积分+ $积分 您是否需要首先执行“选择点”查询以获取这些值,然后执行UPDATE以添加值,而不是将它们内联添加到原始UPDATE查询中? – Fil

    相关问题