我网站的一部分显示了所有注册人员的列表,但由于他们没有完成注册,因此其中一些名称中没有名字和姓氏。目前我有它所以它显示列表中的每一个单独,并显示具有名称和没有名称的那些,所以我有很多空白。如何才能使它只显示实际名称字段中带有文本的文件?
这是我的代码:
<?php
include "../newsmile/db.php";
$select = mysqli_query($con,"SELECT * from register where status = '0'");
$count = 1;
while($select1= mysqli_fetch_array($select))
{
$selectname = mysqli_query($con,"SELECT * from shipping_detail where User_id = '".$select1['id']."'");
$selectname1= mysqli_fetch_array($selectname);
echo '<tr>
<td class="center">'.$count.'</td>
<td>'.$selectname1['First_name']." ".$selectname1['Last_name'].'</td>
<td>
<div class="panel-body buttons-widget">
<button type="button" class="btn btn-info userinfo" id = "'.$select1['id'].'">Info
</button>
</div>
</td>
</tr>';
$count++;
}
?>
答案 0 :(得分:1)
在输出行
之前添加一个保护语句while($select1= mysqli_fetch_array($select))
{
$selectname = mysqli_query(
$con,
"SELECT * from shipping_detail where User_id = '".$select1['id']."'"
);
$selectname1= mysqli_fetch_array($selectname);
if (empty($selectname1['First_name'])) {
continue;
}
if (empty($selectname1['Last_name'])) {
continue;
}
echo '<!-- table row here -->';
$count++;
}
您还应该解决n + 1问题。
答案 1 :(得分:0)
不要使用SQL字符串连接,这会导致安全问题 如果将名字和姓氏列的默认值设置为null,则可以尝试类似下面的内容
while($select1= mysqli_fetch_array($select))
{
$stmt = $conn->prepare("SELECT * from shipping_detail where User_id = ? and first_name<>null and last_name<>null");
$stmt->bind_param("s", $select1['id']);
// i - integer
// d - double
// s - string
// b - BLOB
$stmt->execute();
$result = $stmt->get_result();
while ($selectname1= $result ->fetch_array())
{
echo '<tr>
<td class="center">'.$count.'</td>
<td>'.$selectname1['First_name']." ".$selectname1['Last_name'].'</td>
<td>
<div class="panel-body buttons-widget">
<button type="button" class="btn btn-info userinfo" id = "'.$select1['id'].'">Info
</button>
</div>
</td>
</tr>';
}
$count++;
$stmt->close();
}
如果您没有设置默认值,请按以下步骤更改查询
$stmt = $conn->prepare("SELECT * from shipping_detail where User_id = ? and first_name<>'' and last_name<>''");
您可以阅读 here