Следующий сценарий должен обновить мою базу данных, столбец среды с выбранным значением для раскрывающегося меню. Прямо сейчас, последний хост получает значение 0. Что я делаю неправильно? Похоже, я не могу отслеживать хосты и значение, которое было выбрано.Сценарий выпадающего меню PHP не обновляет базу данных
while($row = mysql_fetch_array($result)){
$host = $row['host'];
$environment = $row['environment'];
echo "<tr><td>" . $host . "</td>
<td><select name='id[".$host."]'><option value='Null'>Select any</option>
<option value='DEV/QA/TEST'>DEV/QA/TEST</option>
<option value='PROD/STAGE'>PROD/STAGE</option>
</select></td>
<td>" . $environment . "</td></tr>"; }
echo "</tbody></table><input type='submit' value='submit'></form>";
if (gettype($_POST['id'])=="array") {
foreach($_POST['id'] as $host => $val){
$id_c = $val;
if ($val != 'Null') {
$query1 = "UPDATE hosts SET environment = '$val' where host='$host'";
$result1 = mysql_query($query1);
if($result1 === false) {
die(mysql_error());
}
echo "Environment for Host " .$host. " is updated. <br>";
}}}
Обновлено рабочим сценарием.
Прежде всего, ради бога, прекратите использовать функции mysql_. Он устарел много лет назад. Во-вторых, вы применяете обновление, где столбец sql равен переменной $ host, но $ host - это переменная, которая принадлежит тому, который уже закрыт в этой точке. Поскольку вы используете «мертвую» локальную переменную из цикла, вы приводите только последний результат этого запроса в ваш цикл. Другими словами, ваш foreach всегда обновляет тот же $ host. –
Я перейду к mysqli или POD. В этом случае, как я могу отслеживать хосты и значение, выбранное для отражения в заявлении об обновлении? –
Если бы я был вами, я бы передал идентификатор хоста в качестве аргумента внутри id. Вместо имени select будет 'id []', что невозможно отслеживать его происхождение, я бы использовал 'id [ Php echo $ hostId; ?>] '. Поэтому в вашем foreach вы можете использовать это: 'foreach ($ _ POST ['id'] as $ hostId => $ val)' –