我必须创建一个由n个正方形填充的页面,这些正方形将使用颜色选择器进行着色,然后将数据存储在db上时,我必须获取这些值并填写背景颜色属性:
我正在使用此代码:
<?php
$square=0;
$sqid=0;
while ($square <= $numSquare) {
$square++;
$id = $sqid++;
$getExist = $DB_CON -> query("SELECT * FROM square WHERE SQUARE = " . $id);
$exist = $getExist->fetch();
if (isset($exist[2])) { $color=$exist[2]; } else { $color=''; }
if (null !== $exist) {
if ($exist[0] = $id) {
print '<div class="square" id="' . $exist[0] . '" style="background-color:' . $color . '"></div>';
}
} else {
print '<div class="square" id="' . $id .'"></div>';
}
}
?>
因此,它搜索数据库中的行(例如:行1包含颜色#000000)并放入
style="background-color:x"
属性,问题是,使用此代码,所有正方形都将背景色设置为无,即使它们不必没有。 (例如=必须为<div class="square" id="n">
并获得<div class="square" id="n" style="background-color:">
),除此之外,与数据库中ID 0相关的第一个正方形即使必须为#000000也没有任何颜色。感谢所有能提供帮助的人。
最佳答案
您自己重置$color
:
if (isset($exist[1])) { $color=$exist[1]; } { $color=''; }
这是一个“其他”缺失:
if (isset($exist[1])) {
$color = $exist[1];
} else {
$color='';
}
请查看我对
SELECT *
和指示的查询结果的评论-不好的作法。更新问题2:
接下来的两行看起来也很奇怪:
if (null !== $exist) {
$ exist可以成为
null
吗?好吧,取决于您的连接驱动程序,但是PDOStatement :: fetch()返回false
,一个简单的if ($exist)
就足够了。最好将其他if / else颜色分配放在此块中。接下来的一行是作业!仅当$ id为0时,它才会为false;在您的第一个循环中,它不能为1,并一直增大。
if ($exist[0] = $id) {
这作为条件看起来是无用的(因为它是WHERE子句的一部分),也没有用做赋值。
我通常在if或while条件中使用fetch()方法。这是我从您的代码中读取的主要部分:
$getExist = $dbh->prepare('SELECT id, color FROM square WHERE square = ?');
for ($id = 0; $id < $numSquare; $i++) {
$getExist->execute([$id]);
$style = '';
// 1. fetch row, and check if there is one
// 2. check if a color is defined (if it is possible in db it is not)
if ($exist = $getExist->fetch() && isset($exist[1])) {
$style = 'background-color: '.$exist[1];
}
echo '<div class="square" id="'.$exist[0].'" style="'.$style.'"></div>';
}
关于php - PHP:根据ID为正方形上色并从db获取数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37125736/