如果mysqli数据库上有值,则不要在php上创建按钮

如果mysqli数据库上有值,则不要在php上创建按钮,php,mysqli,foreach,while-loop,Php,Mysqli,Foreach,While Loop,我有一个数据库表,如 ----------------- | id | time | |----|----------| | 1 | 9am-10am | | 2 | 11am-12pm| 和一个PHP数组 $times= array("8am-9am","9am-10am","10am-11am","11am-12pm","12pm-1pm","1pm-2pm","2pm-3pm","3pm-4pm","4pm-5pm","5pm-6pm","6pm-7pm","7pm-8pm"

我有一个数据库表,如

-----------------
| id | time     |
|----|----------|
| 1  | 9am-10am |
| 2  | 11am-12pm|
和一个PHP数组

$times= array("8am-9am","9am-10am","10am-11am","11am-12pm","12pm-1pm","1pm-2pm","2pm-3pm","3pm-4pm","4pm-5pm","5pm-6pm","6pm-7pm","7pm-8pm","8pm-9pm","9pm-10pm");
我的问题是,如果时间已经在数据库中,代码不应该创建具有该值的按钮,因此我有以下foreach循环

$sql = "SELECT * FROM `time_table`";
$result = mysqli_query($conn,$sql);
foreach($times as $value){
    while($row=mysqli_fetch_assoc($result)){
        if($value!=$row['time']){
            echo "<button>$value</button>";
        }
    }
}
$sql=“从“时间表”中选择*”;
$result=mysqli\u查询($conn,$sql);
foreach($value的倍){
while($row=mysqli\u fetch\u assoc($result)){
如果($value!=$row['time'])){
回显“$value”;
}
}
}

但是它没有显示上午9点到10点和上午11点到中午12点的所有其他值,而是显示两个上午8点到9点的按钮,您只在
foreach
的第一个实例上运行了
mysqli\u resultset
一次

你需要重新思考你的逻辑。在您的
foreach
之外获取mysql结果,将结果放入数组中,然后在foreach中使用该数组,而不是在while循环中使用

//first, fetch the rows from DB
$savedValues = array();
$sql = "SELECT * FROM `time_table`";
$result = mysqli_query($conn,$sql);
 while($row=mysqli_fetch_assoc($result)){
  $savedValues[]  = $row['time'];
}

//then compare
foreach($times as $value){ 
  foreach($savedValues as $svd){
   if($svd != $value){
     echo "<button>$value</button>";
   }
  }
 }
//首先,从数据库中获取行
$savedValues=array();
$sql=“从“时间表”中选择*”;
$result=mysqli\u查询($conn,$sql);
while($row=mysqli\u fetch\u assoc($result)){
$savedValue[]=$row['time'];
}
//然后比较
foreach($乘以$value){
foreach($savedValue作为$svd){
如果($svd!=$value){
回显“$value”;
}
}
}

注意:这不是最佳选择。在另一个注释中,您应该考虑<代码> InAARAYAY()/Cux>或类似的避免循环中的循环

,您只运行了<代码> MyQuiLyReultStuts一次,在<代码>的第一个实例Frace。p> 你需要重新思考你的逻辑。在您的
foreach
之外获取mysql结果,将结果放入数组中,然后在foreach中使用该数组,而不是在while循环中使用

//first, fetch the rows from DB
$savedValues = array();
$sql = "SELECT * FROM `time_table`";
$result = mysqli_query($conn,$sql);
 while($row=mysqli_fetch_assoc($result)){
  $savedValues[]  = $row['time'];
}

//then compare
foreach($times as $value){ 
  foreach($savedValues as $svd){
   if($svd != $value){
     echo "<button>$value</button>";
   }
  }
 }
//首先,从数据库中获取行
$savedValues=array();
$sql=“从“时间表”中选择*”;
$result=mysqli\u查询($conn,$sql);
while($row=mysqli\u fetch\u assoc($result)){
$savedValue[]=$row['time'];
}
//然后比较
foreach($乘以$value){
foreach($savedValue作为$svd){
如果($svd!=$value){
回显“$value”;
}
}
}

注意:这不是最佳选择。在另一个注释中,您应该考虑<代码> InAARAYAY()/<代码>或类似于避免循环中的循环

尝试将代码更改为:

 $sql = "SELECT * FROM `time_table`";
 $result = mysqli_query($conn,$sql);
 foreach($times as $value){
  mysqli_data_seek($result,0); //reset the pointer to search from the first row every time
  while($row=mysqli_fetch_assoc($result)){
   if($value==$row['time']){
    continue 2; //exits while loop and then skips foreach to the next $value
   }
  }
  echo "<button>$value</button>";
 }

尝试将代码更改为:

 $sql = "SELECT * FROM `time_table`";
 $result = mysqli_query($conn,$sql);
 foreach($times as $value){
  mysqli_data_seek($result,0); //reset the pointer to search from the first row every time
  while($row=mysqli_fetch_assoc($result)){
   if($value==$row['time']){
    continue 2; //exits while loop and then skips foreach to the next $value
   }
  }
  echo "<button>$value</button>";
 }

如果您在_array()中使用
并分离循环,那么它应该可以工作,这样会更具可读性

$sql=“从“时间表”中选择*”;
$result=mysqli\u查询($conn,$sql);
$resultTimes=array();
//将DB值分配给数组
while($row=mysqli\u fetch\u assoc($result)){
$resultTimes[]=$row['time'];
}
//检查数组中是否有来自$times的值,如果没有,则返回按钮
foreach($value的倍){
if(!in_数组($value,$resultTimes)){
回显“$value”;
}
}

如果您在_array()中使用
并将循环分开,它应该可以工作,这样它会更具可读性

$sql=“从“时间表”中选择*”;
$result=mysqli\u查询($conn,$sql);
$resultTimes=array();
//将DB值分配给数组
while($row=mysqli\u fetch\u assoc($result)){
$resultTimes[]=$row['time'];
}
//检查数组中是否有来自$times的值,如果没有,则返回按钮
foreach($value的倍){
if(!in_数组($value,$resultTimes)){
回显“$value”;
}
}

我不明白您期望结果是什么?什么是
$value
?您只能在foreach的第一个实例上运行一次mysqli_结果集。你需要重新思考你的逻辑。在foreach外部获取mysql结果,将结果放入数组,然后在foreach中使用该数组,而不是在_array()中使用while loopu。它应该输出所有按钮,而不是上午9点到10点和上午11点到12点,因此上面的按钮应该显示上午8点到9点、上午10点到11点、下午12点到1点。。。。。。。按钮我不明白你期望结果是什么?什么是
$value
?您只能在foreach的第一个实例上运行一次mysqli_结果集。你需要重新思考你的逻辑。在foreach外部获取mysql结果,将结果放入数组,然后在foreach中使用该数组,而不是在_array()中使用while loopu。它应该输出所有按钮,而不是上午9点到10点和上午11点到12点,因此上面的按钮应该显示上午8点到9点、上午10点到11点、下午12点到1点。。。。。。。按钮存在问题,您应该在通过数组循环之前获取所有结果,否则在第二个循环之后将不会获取任何结果。存在问题,您应该在通过数组循环之前获取所有结果,否则在第二个循环之后将不会获取任何结果。将使用
$savedValues[$row['time']]=1
然后只要
如果(!isset($savedValues[$value]){}
-我喜欢的最有效的方法@FlashThunder将使用
$savedValues[$row['time']]=1
然后只要
如果(!isset($savedValues[$value]){}
-最有效的方法就是@FlashThunder