Я хотел бы заполнить адреса для клиента из моей базы данных.
Я использую этот код для выбора из БД:
$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) он отображает только один адрес, даже если в базе данных есть 2 адреса для одного и того же клиента.
2) Я довольно новичок в этом. Я делаю это правильно или есть самый быстрый вариант (меньше кода), чтобы сделать это?
Спасибо!!
Проблема в вашем цикле while:
$addressID_array = array ($row['addressID']);
Это назначает новый массив каждый раз, когда цикл переходит к переменным. Эти строки назначения должны быть изменены следующим образом
$addressID_array[] = $row['addressID'];
Что касается вашего второго вопроса: он на самом деле не отвечает, потому что мы не знаем требований, с которыми вам нужно работать.
Проверять, выписываться : https://en.wikipedia.org/wiki/SQL_injection
Посмотрите на часть «Шестнадцатеричное преобразование». Я поместил короткую функцию для выполнения команд SQL там. Когда вы получите информацию обратно, она будет в массиве. Так что, если вы использовали $ row для получения информации, она была бы в $ row [0] [<Поля>], $ row [1] [<Поля>] и так далее.
Проблема с вышесказанным заключается в том, что каждый раз, когда вы делаете «array ()», он создает новый массив. Так что он стирает то, что у вас там было раньше. 🙂
Вы перезаписываете значения в вашем массиве, делая это
$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 '" />';
}