【发布时间】:2016-01-20 22:29:19
【问题描述】:
我有一个电话号码表:
phone:
phoneID (PK)
peopleID (fK)
countrycode
areacode
phonenumber
extension
phonetype //EDIT!!! (sorry forgot this in first post)
每个人最多可以有 4 个电话号码:公司、传真、家庭、手机。
我有一个编辑表单。编辑表单从数据库中提取数据并填充表单。 此代码用于提取数据:
$stmt = $conn->prepare("SELECT * FROM phone WHERE peopleID=?");
if ( !$stmt ) {
die(printf("Error: %s.\n", mysqli_stmt_error($stmt) ) );
}
else if ( !$stmt->bind_param('i', $peopleID) ) {
die(printf("Error: %s.\n", mysqli_stmt_error($stmt) ) );
}
else if ( !$stmt->execute() ) {
die(printf("Error: %s.\n", mysqli_stmt_error($stmt) ) );
} else {
$resultaddress = $stmt->get_result();
while($row = $resultaddress->fetch_assoc()) {
$phoneID_array[] = $row['phoneID'];
$phonetype_array[] = (isset ($row['phonetype']) ? $row['phonetype'] : "");
$countrycode_array[] = (isset ($row['countrycode']) ? $row['countrycode'] : "");
$areacode_array[] = (isset ($row['areacode']) ? $row['areacode'] : "");
$phonenumber_array[] = (isset ($row['phonenumber']) ? $row['phonenumber'] : "");
$extension_array[] = (isset ($row['extension']) ? $row['extension'] : "");
}
}
这个来填充表单:
for ($i = 0; $i < 4; $i++) {
echo 'Phone<input type="text" name="type[]" id="" value="' . (isset ($phonetype_array[$i]) ? $phonetype_array[$i] : "company") . '"/>';
echo '<input type="text" name="countrycode[]" id="" size="3" maxlength="3" value="' . (isset ($countrycode_array[$i]) ? $countrycode_array[$i] : "") . '"/>';
echo '<input type="text" name="countrycode[]" id="" value="' . (isset ($areacode_array[$i]) ? $areacode_array[$i] : "") . '"/>';
echo '<input type="text" name="number[]" id="" value="' . (isset ($phonenumber_array[$i]) ? $phonenumber_array[$i] : "") . '"/>';
echo '<input type="text" name="extension[]" id="" value="' . (isset ($extension_array[$i]) ? $extension_array[$i] : "") . '"/><br>';
}
现在显示表单:
公司 000 000 1234567
首页 000 000 1234569
(最终没有空白字段可以输入新数字)
问题:
我想始终以相同的顺序显示电话号码: 假设我在数据库中只有公司和家庭号码,编辑表单应该是这样的
公司:000 000 1234567
传真:要填写的空白字段
首页:000 000 1234569
移动:要填写的空白字段
也许可以用关联数组来完成,但我不知道怎么做:(
感谢您的帮助!
编辑:在阅读了这里的所有答案和 cmets 之后,我了解到拥有专用表电话类型并在电话表中使用外键是更好的设计。认为这是一个完全不同的场景,我问了另一个问题mysql left join not return all left table row 再次感谢所有花时间帮助我的人。
【问题讨论】:
-
考虑在查询中使用
ORDER BY子句?另外,您将电话类型存储在数据库中的什么位置? -
@Maximus2012 问题可能是其中两条记录不存在,所以空字段总是最后出现
-
@RobbieAverill 你是对的。在这种情况下,用户可能应该有第二个电话类型表,然后尝试先遍历该表。
-
不清楚你想要什么,因为你的标题要求一些东西,但是你解释的问题(如果我理解得好的话)谈论的是别的东西
-
那么您如何表明其中一行是公司或家庭电话号码?表中没有任何内容表明