php mysql: select 来自数据库并填充表单
php mysql: select from database and populate form
我想从我的数据库中为客户端填充地址。
我使用此代码从 db:
select
$stmt = $conn->prepare("SELECT * FROM peopleaddress 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 {
$result = $stmt->get_result();
while($row = $result->fetch_assoc()) {
$addressID_array = array ($row['addressID']);
$addresstype_array = array ($row['addresstype']);
$addressactive_array = array ($row['active']);
$street_array = array ($row['street']);
$city_array = array ($row['city']);
$town_array = array ($row['town']);
$state_array = array ($row['state']);
$zip_array = array ($row['zip']);
$country_array = array ($row['country']);
$latitude_array = array ($row['latitude']);
$longitude_array = array ($row['longitude']);
}
} /* end else */
此代码用于显示表单:
<?php
for ($i = 0; $i < count($addressID_array); $i++) {
echo '<input type="text" name="street[]" id="" placeholder="street" value="';
if (isset ($street_array[$i])){echo $street_array[$i];} echo '" />';
echo '<input type="text" name="city[]" id="city" placeholder="city" value="';
if (isset ($city_array[$i])){echo $city_array[$i]; } echo '" />';
echo '<input type="text" name="zip[]" id="zip" placeholder="postalcode" value="';
if (isset ($zip_array[$i])){echo $zip_array[$i]; } echo '" />';
echo '<input type="text" name="town[]" id="town" placeholder="town" value="';
if (isset ($town_array[$i])){echo $town_array[$i]; } echo '" />';
echo '<input type="text" name="state[]" id="state" value="';
if (isset ($state_array[$i])){echo $state_array[$i];} echo '" />';
echo '<input type="text" name="country[]" id="country" value="';
if (isset ($country_array[$i])) {echo $country_array[$i];} echo '" />';
echo '<input type="text" name="addresstype[]" id="" value="';
if (isset ($addresstype_array[$i])) {echo $addresstype_array[$i];} echo '" />';
echo '<input type="text" name="addressactive[]" id="" value="';
if (isset ($addressactive_array[$i])) {echo $addressactive_array[$i];} echo '" />'; echo '<input type="text" name="latitude[]" id="latitude" READONLY value="';
if (isset ($latitude_array[$i])) {echo $latitude_array[$i];} echo '" />';
echo '<input type="text" name="longitude[]" id="longitude" READONLY value="';
if (isset ($longitude_array[$i])) {echo $longitude_array[$i];} echo '" /> <br>';
}
?>
问题:
1) 它只显示一个地址,即使在 db 中同一个客户端有 2 个地址。
2) 我对此很陌生。我做得对还是有最快的(更少的代码)选项来做到这一点?
谢谢!!
这样做会覆盖数组中的值
$addressID_array = array ($row['addressID']);
而不是
$addressID_array[] = $row['addressID'];
更新:
此外,最好遍历您的数据,而不是创建数据数组然后再次读取该数组。使用这个:
else {
$result = $stmt->get_result();
}
// Then in display
while($row = $result->fetch_assoc()) {
echo '<input type="text" name="street[]" id="" placeholder="street" value="';
if (isset ($row['street'])){echo $row['street'];} echo '" />';
}
退房:https://en.wikipedia.org/wiki/SQL_injection
往下看"Hexadecimal Conversion"部分。我在其中放置了一个简短的函数来执行 SQL 命令。当您取回信息时,它将位于一个数组中。因此,如果您使用 $row 获取信息,它将在 $row[0][]、$row[1][] 中,依此类推。
上面的问题是 - 每次你执行 "array()" 它都会创建一个新数组。所以它擦掉了你之前在那里的东西。 :-)
问题出在你的 while 循环中:
$addressID_array = array ($row['addressID']);
这会在每次 while 循环时分配一个新数组给变量。这些赋值线都应该改成
$addressID_array[] = $row['addressID'];
关于你的第二个问题:这个问题无法真正回答,因为我们不知道你需要满足的要求。
我想从我的数据库中为客户端填充地址。 我使用此代码从 db:
select$stmt = $conn->prepare("SELECT * FROM peopleaddress 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 {
$result = $stmt->get_result();
while($row = $result->fetch_assoc()) {
$addressID_array = array ($row['addressID']);
$addresstype_array = array ($row['addresstype']);
$addressactive_array = array ($row['active']);
$street_array = array ($row['street']);
$city_array = array ($row['city']);
$town_array = array ($row['town']);
$state_array = array ($row['state']);
$zip_array = array ($row['zip']);
$country_array = array ($row['country']);
$latitude_array = array ($row['latitude']);
$longitude_array = array ($row['longitude']);
}
} /* end else */
此代码用于显示表单:
<?php
for ($i = 0; $i < count($addressID_array); $i++) {
echo '<input type="text" name="street[]" id="" placeholder="street" value="';
if (isset ($street_array[$i])){echo $street_array[$i];} echo '" />';
echo '<input type="text" name="city[]" id="city" placeholder="city" value="';
if (isset ($city_array[$i])){echo $city_array[$i]; } echo '" />';
echo '<input type="text" name="zip[]" id="zip" placeholder="postalcode" value="';
if (isset ($zip_array[$i])){echo $zip_array[$i]; } echo '" />';
echo '<input type="text" name="town[]" id="town" placeholder="town" value="';
if (isset ($town_array[$i])){echo $town_array[$i]; } echo '" />';
echo '<input type="text" name="state[]" id="state" value="';
if (isset ($state_array[$i])){echo $state_array[$i];} echo '" />';
echo '<input type="text" name="country[]" id="country" value="';
if (isset ($country_array[$i])) {echo $country_array[$i];} echo '" />';
echo '<input type="text" name="addresstype[]" id="" value="';
if (isset ($addresstype_array[$i])) {echo $addresstype_array[$i];} echo '" />';
echo '<input type="text" name="addressactive[]" id="" value="';
if (isset ($addressactive_array[$i])) {echo $addressactive_array[$i];} echo '" />'; echo '<input type="text" name="latitude[]" id="latitude" READONLY value="';
if (isset ($latitude_array[$i])) {echo $latitude_array[$i];} echo '" />';
echo '<input type="text" name="longitude[]" id="longitude" READONLY value="';
if (isset ($longitude_array[$i])) {echo $longitude_array[$i];} echo '" /> <br>';
}
?>
问题: 1) 它只显示一个地址,即使在 db 中同一个客户端有 2 个地址。
2) 我对此很陌生。我做得对还是有最快的(更少的代码)选项来做到这一点? 谢谢!!
这样做会覆盖数组中的值
$addressID_array = array ($row['addressID']);
而不是
$addressID_array[] = $row['addressID'];
更新: 此外,最好遍历您的数据,而不是创建数据数组然后再次读取该数组。使用这个:
else {
$result = $stmt->get_result();
}
// Then in display
while($row = $result->fetch_assoc()) {
echo '<input type="text" name="street[]" id="" placeholder="street" value="';
if (isset ($row['street'])){echo $row['street'];} echo '" />';
}
退房:https://en.wikipedia.org/wiki/SQL_injection
往下看"Hexadecimal Conversion"部分。我在其中放置了一个简短的函数来执行 SQL 命令。当您取回信息时,它将位于一个数组中。因此,如果您使用 $row 获取信息,它将在 $row[0][
上面的问题是 - 每次你执行 "array()" 它都会创建一个新数组。所以它擦掉了你之前在那里的东西。 :-)
问题出在你的 while 循环中:
$addressID_array = array ($row['addressID']);
这会在每次 while 循环时分配一个新数组给变量。这些赋值线都应该改成
$addressID_array[] = $row['addressID'];
关于你的第二个问题:这个问题无法真正回答,因为我们不知道你需要满足的要求。