在获得所需数量之前停止循环

时间:2017-08-29 09:09:27

标签: php for-loop

我的想法是在网站上为新用户制作工具提示。他们将浏览工具提示,每次完成工具提示时,它都会插入到DB中。

但是我有一个skip all的按钮。所以我的想法是将所有他们未完成的提醒工具提示插入带有for循环的数据库中。

如果没有点击工具提示,它就可以工作了。因此,工具提示将等于1,因为通过$data等于0。但是,如果工具提示在通过$data时等于1,则会获得+1for loop似乎不会将任何内容发布到database

$NumberOfTooltips = 2;
(int)$data->tooltipLastID = ((int)$data->tooltipLastID === 0) ? 1 : (int)$data->tooltipLastID + 1;     

for ($x = (int)$data->tooltipLastID; $x <= $NumberOfTooltips; $x++) {
   $query = "";
   $query = "INSERT INTO tooltips ";
   $query .= "(tooltip_id, inserted) VALUES ($x, NOW())";   
   database::query($query);
   $this->id = database::getInsertID();
}

在断开的循环中,(int)$data->tooltipLastID的值为2

是因为(int)$data->tooltipLastID已经等于$NumberOfTooltips吗?

2 个答案:

答案 0 :(得分:6)

一般改进

  

这些并没有直接解决问题,但是它们确实可以帮助您澄清数据并消除任何次要错误和错误。还指出了一些最好的(或至少是更好的)练习。

  • $x是一个懒惰且定义不明确的计数器。更喜欢使用诸如$tooltipCounter

  • 之类的描述性特征
  • $data->tooltipLastID不应该<1>开始为1;使用与PHP /编程中的每个其他整数系统相同的语法,从零开始。如果您需要一个,只需在需要时添加+1 VALUES (".$x+1.") )。

  • $NumberOfTooltips = 2;数字2可能不足以进行充分的测试。

  • var_dump($data->tooltipLastID)var_dump($NumberOfTooltips)检查这两个值是否符合预期。

  • 重写测试代码以从代码中取出变量,以便您可以检查数据库连接是否正常工作(例如,如果您尝试错误地插入字符串字段类型)< / p>

  • $query = "";是多余的。

  • 您不需要一直输入对象变量((int))的强制转换$data->whatever,但在设置时输入它们。

  • 此外,通过将+1添加到变量PHP,无论如何都会自动将变量重新转换为int

  • 检查您的$data->tooltipLastID是否可公开访问/写入。

  • 您使用$this;那你上哪堂课?你自己引用数据类吗?

  • 银行假期只有一天。

  • 最好在插入时自动设置inserted数据库列。您可以使用此SQL来更改当前表:

     ALTER TABLE <yourTable> MODIFY COLUMN inserted timestamp DEFAULT CURRENT_TIMESTAMP
    

答案 1 :(得分:3)

检查$data->tooltipLastID的类型?并且plz在for循环之前使用var_dump($data->tooltipLastID)var_dump((int)$data->tooltipLastID)来查看原始值和$ x的确是什么。

奇怪的类型转换会导致奇怪的错误......