如果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