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

Chr*_*ett 1 php for-loop

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

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

因此,如果没有点击工具提示,它就可以工作.因此,工具提示将等于,1因为通过$data等于0.但是,如果工具提示在通过时等于1 $data则获得a +1并且for 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();
}
Run Code Online (Sandbox Code Playgroud)

在断开的循环上,值为(int)$data->tooltipLastID2

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

Mar*_*tin 6

一般改进

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

  • $x是一个懒惰而且定义不明确的柜台.更喜欢使用诸如的描述性的特征$tooltipCounter

  • $data->tooltipLastID不应该 1 开始 ; 使用与PHP /编程中的每个其他整数系统相同的语法,从零开始.如果你需要一个,那么+1只在需要时添加(VALUES (".$x+1.")).

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

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

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

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

  • 您不应该一直键入转换(int)对象变量($data->whatever),而是在设置它们时键入它们.

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

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

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

  • 银行假期只有一天.

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

     ALTER TABLE <yourTable> MODIFY COLUMN inserted timestamp DEFAULT CURRENT_TIMESTAMP
    
    Run Code Online (Sandbox Code Playgroud)