@Angelxalfa

Как передать полем формы сразу несколько значений?

Доброго времени суток!
Суть вопроса в следующем, есть форма, собирающая данные и передающая их POST методом обработчику, который эти методы вносит в базу и выводит сообщение об успехе или неудаче.
$pokazaniya = $_POST['pokazaniya'];
    $app_number = $_POST['appartment_number'];
    $house_number = $_POST['house_number'];
    $id = $_POST['id'];

$row = mysql_query("select * from `$table` where id='$id' ");
$res = mysql_fetch_array($row);
 
if(mysql_num_rows($row) > 0){
        //если пользователь есть, проверяем пароли
        if($house_number != $res['house_number']){ {echo 'данные не совпадают!';}}
        elseif ($app_number != $res['app_number']){
            {echo 'данные не совпадают!';}
            }
        else{
            // выбираем все значения из таблицы "Contacts"
    $qr_result = mysql_query("select * from `$table` where id='$id' ")
		or die(mysql_error());
    // выводим на страницу сайта заголовки HTML-таблицы
    echo '<form action="zapis_v_bazu2.php" method="post" id="myform"></form>';
    echo '<table border="1">';
	echo '<thead>';
	echo '<tr>';
	echo '<th>Поле 1</th>';
    echo '<th>Поле 2</th>';
    echo '<th>Поле 3</th>';
    echo '<th>Поле 4</th>';
	echo '<th>Поле 5</th>';
	echo '<th>Поле 6</th>';
    echo '<th>Поле 7</th>';
	echo '</tr>';
	echo '</thead>';
	echo '<tbody>';
	
   // выводим в HTML-таблицу все данные клиентов из таблицы MySQL 
	while($data = mysql_fetch_array($qr_result)){ 
        
		echo '<tr>';
		echo '<td><input type="text" name="street" value="' . $data['street'] . '" maxlength="10" form="myform" disabled></td>';
        echo '<td><input type="text" name="house_number" value="' . $data['house_number'] . '" maxlength="10" form="myform" disabled></td>';
        echo '<td><input type="text" name="appartment_number" value="' . $data['app_number'] . '" maxlength="10" form="myform" disabled></td>';
        echo '<td><input type="text" name="device_id" value="' . $data['device_id'] . '" maxlength="10" form="myform" disabled></td></td>';
		echo '<td><input type="text" name="description" value="' . $data['description'] . '" maxlength="10" form="myform" disabled></td>';
		echo '<td><input type="number" name="old_meterage" value="' . $data['old_meterage'] . '" maxlength="10" form="myform" disabled></td>';
        echo '<td><input type="text" name="pokazaniya[' .$data['base_id']. ']" maxlength="10" form="myform"></td>';
		echo '<input type="text" name="id" value="' . $data['id'] . '" maxlength="10" form="myform" hidden >';
        echo '<input type="text" name="house_number" value="' . $data['house_number'] . '" maxlength="10" form="myform" hidden >';
        echo '<input type="text" name="appartment_number" value="' . $data['app_number'] . '" maxlength="10" form="myform" hidden >';
        echo '<input type="text" name="device_id" value="' . $data['device_id'] . '" maxlength="10" form="myform" hidden ></td>';
		echo '<input type="text" name="description" value="' . $data['description'] . '" maxlength="10" form="myform" hidden >';
		echo '<input type="number" name="old_meterage" value="' . $data['old_meterage'] . '" maxlength="10" form="myform" hidden >';
        echo '';
	}
	
    echo '</tbody>';
	echo '</table>';
    echo '<input type="submit" value="Отправить"  form="myform"/> ';
        }}
else{
   {echo 'такого пользователя нет!';}}

dc387df5ad8b47bd80bc4569c28689ef.PNG
То есть на этой странице формируется таблица индивидуальная для каждого пользователя со статическими полями содержащими инфо из базы данных и полем для ввода информации по прибору.
Однако у одного пользователя может быть несколько приборов, и поэтому полей формы с одинаковым названием тоже может быть несколько, поэтому я присвоил этому полю значение массива.

Следующий обработчик должен получить данные из указанной выше формы по POST методу и на основе них ввести данные показателей для каждого из приборов индивидуально в базу данных и вывести таблицу, содержащую строки (по кол-ву приборов у пользователя), столбцы - по кол-ву данных, переданных формой.
39d1125415534331801f2c68045b5942.PNG
$pokazaniya = $_POST['pokazaniya'];
    $app_number = $_POST['appartment_number'];
    $house_number = $_POST['house_number'];
    $description = $_POST['description'];
    $old_meterage = $_POST['old_meterage'];
    $device_id = $_POST['device_id'];
    $id = $_POST['id'];

$row = mysql_query("select * from `$table` where id='$id' ");
$res = mysql_fetch_array($row);
 var_dump($_POST);
 foreach($_POST as $POST_array) {
                            $id_array = $POST_array["id"];
                            $app_number_array = $POST_array["app_number"];
                            $house_number_array = $POST_array["house_number"];
                            $device_id_array = $POST_array["old_meterage"];
                            $description_array = $POST_array["description"];
                            $old_meterage_array = $POST_array["old_meterage"];
                            foreach(@$_POST["pokazaniya"] as $pokazaniya_array) {
                                
                        echo "<br>'$id_array'";
                        echo "'$app_number_array'";
                        echo "'$house_number_array'";
                        echo "'$device_id_array'";
                        echo "'$description_array'";
                        echo "'$old_meterage_array'";
                         echo "'$pokazaniya_array'";
                            }}


if(mysql_num_rows($row) > 0){
        //если пользователь есть, проверяем пароли
        if($house_number != $res['house_number']){ {echo 'данные не совпадают!';}}
        elseif ($app_number != $res['app_number']){
            {echo 'данные не совпадают!';}
            }
        else{
            $query="UPDATE $table SET new_meterage='$pokazaniya' WHERE device_id='$device_id'"; 
              mysql_query($query) or die (mysql_error());
             if(!mysql_query($query))
             {echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';} 
             else
            
             echo '<table border="1">';
	echo '<thead>';
	echo '<tr>';
    echo '<th>Поле 1</th>';
	echo '<th>Поле 2</th>';
    echo '<th>Поле 3</th>';
    echo '<th>Поле 4</th>';
	echo '<th>Поле 5</th>';
	echo '</tr>';
	echo '</thead>';
	echo '<tbody>';
		echo '<tr>';
        echo "<td>$device_id</td>";
		echo "<td>$description</td>";
        echo "<td>$old_meterage</td>";
        echo "<td>$pokazaniya</td>";
        echo "<td>$raznica</td>";
        echo '</tr>';
    echo '</tbody>';
	echo '</table>';
        }}
else{
   {echo 'такого пользователя нет!';}}


Все сделал благодаря пользователю с ником Evervess!
Форму прописал так :
echo '<td><input type="text" name="devices['.$data['device_id'].'][new_meterage]" maxlength="10" form="myform"></td></tr>';
        echo '<td><input type="text" name="devices['.$data['device_id'].'][id]" value="' . $data['id'] . '" maxlength="10" form="myform" hidden></td>';
        echo '<td><input type="text" name="devices['.$data['device_id'].'][street]" value="' . $data['street'] . '" maxlength="10" form="myform" hidden></td>';
        echo '<td><input type="text" name="devices['.$data['device_id'].'][house_number]" value="' . $data['house_number'] . '" maxlength="10" form="myform" hidden></td>';
        echo '<td><input type="text" name="devices['.$data['device_id'].'][appartment_number]" value="' . $data['app_number'] . '" maxlength="10" form="myform" hidden></td>';
        echo '<td><input type="text" name="devices['.$data['device_id'].'][device_id]" value="' . $data['device_id'] . '" maxlength="10" form="myform" hidden></td></td>';
        echo '<td><input type="text" name="devices['.$data['device_id'].'][description]" value="' . $data['description'] . '" maxlength="10" form="myform" hidden></td>';
        echo '<td><input type="number" name="devices['.$data['device_id'].'][old_meterage]" value="' . $data['old_meterage'] . '" maxlength="10" form="myform" hidden></td>';

А перебор массива так:
$row = mysql_query("select * from `$table` where id='$id' ");
 foreach($_POST['devices'] as $device_id=>$device_data) {
    // В переменной $device_id - айдишник вашего прибора учёта.
    // В переменной $device_data - все поля формы для этого конкретного прибора
    $pokazaniya = $device_data['new_meterage'];
    $app_number = $device_data['appartment_number'];
    $house_number = $device_data['house_number'];
    $description = $device_data['description'];
    $old_meterage = $device_data['old_meterage'];
    $device_id = $device_data['device_id'];
    $id = $device_data['id'];
    $raznica = $pokazaniya - $old_meterage;
            $query="UPDATE $table SET new_meterage='$pokazaniya' WHERE device_id='$device_id'"; 
              mysql_query($query) or die (mysql_error());
             if(!mysql_query($query))
             {echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';} 
             else{            
             echo '<table border="1">';
	echo '<thead>';
	echo '<tr>';
    echo '<th>№ счетчика</th>';
	echo '<th>Описание</th>';
    echo '<th>Старые показания</th>';
    echo '<th>Новые показания</th>';
	echo '<th>Разница</th>';
	echo '</tr>';
	echo '</thead>';
	echo '<tbody>';
		echo '<tr>';
        echo "<td>$device_id</td>";
		echo "<td>$description</td>";
        echo "<td>$old_meterage</td>";
        echo "<td>$pokazaniya</td>";
        echo "<td>$raznica</td>";
        echo '</tr>';
    echo '</tbody>';
	echo '</table>';
        }
}

Все работает как часы!
Evervess, спасибо!
  • Вопрос задан
  • 5644 просмотра
Решения вопроса 1
Evervess
@Evervess
Не очень понятно, как у одно device_id может быть несколько разных показаний.

а перебрать полученные значения не сложно:
foreach($_POST["pokazaniya"] as $key=>$value) {
//в $value - показания
}


Как мне кажется, логичнее было бы форму так рисовать:

while ($data = mysql_fetch_array($qr_result)) {
    echo '<tr>';
    echo '<td><input type="text" name="devices['.$data['device_id'].'][street]" value="' . $data['street'] . '" maxlength="10" form="myform" disabled></td>';
    echo '<td><input type="text" name="devices['.$data['device_id'].'][house_number]" value="' . $data['house_number'] . '" maxlength="10" form="myform" disabled></td>';
    echo '<td><input type="text" name="devices['.$data['device_id'].'][appartment_number]" value="' . $data['app_number'] . '" maxlength="10" form="myform" disabled></td>';
    echo '<td><input type="text" name="devices['.$data['device_id'].'][device_id]" value="' . $data['device_id'] . '" maxlength="10" form="myform" disabled></td></td>';
    echo '<td><input type="text" name="devices['.$data['device_id'].'][description]" value="' . $data['description'] . '" maxlength="10" form="myform" disabled></td>';
    echo '<td><input type="number" name="devices['.$data['device_id'].'][old_meterage]" value="' . $data['old_meterage'] . '" maxlength="10" form="myform" disabled></td>';
    echo '<td><input type="text" name="devices['.$data['device_id'].'][new_meterage]" maxlength="10" form="myform"></td></tr>';
}

в таком случае получите такой массив _POST:
$_POST = [
    'devices' =>
    [
       '1234567' => //<--ID счётчика
        [
           'street' => '',
            'house_number' => '',
            'appartment_number' => '',
            'device_id' => '',
            'description' => '',
            'old_meterage' => '',
            'new_meterage' => '',
       ]
   ]
]


Перебирать все значения при отправке формы так:
foreach($_POST['devices'] as $device_id=>$device_data) {
    // В переменной $device_id - айдишник вашего прибора учёта.
    // В переменной $device_data - все поля формы для этого конкретного прибора

}


P.S.: Код не проверял.

P.P.S.: Скажи "НЕТ!" транслиту в коде! Используйте английские названия. Если с английским туго multitran поможет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы