我的想法是在网站上为新用户制作工具提示。他们将浏览工具提示,每次完成工具提示时,它都会插入到DB中。
但是我有一个skip all
的按钮。所以我的想法是将所有他们未完成的提醒工具提示插入带有for循环的数据库中。
如果没有点击工具提示,它就可以工作了。因此,工具提示将等于1
,因为通过$data
等于0
。但是,如果工具提示在通过$data
时等于1,则会获得+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();
}
在断开的循环中,(int)$data->tooltipLastID
的值为2
是因为(int)$data->tooltipLastID
已经等于$NumberOfTooltips
吗?
答案 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的确是什么。
奇怪的类型转换会导致奇怪的错误......