Форма отправляет не верный ID пользователя из базы MySQL

Доброго времени суток, форумчане!
Помогите разобраться.
Есть скрипт (часть проекта) который делает выборку пользователей из базы по условию и вставляет значения в табличную форму, предполагается что пользователь заполнит ФИО и отправит форму на обработчик который обновит запись в базе и добавит определенному пользователю ФИО, обращение к нужной записи в базе происходит по Id который AUTO_INCREMENT. Все приводить не буду, только то что не работает, ниже распишу, что не работает.

PHP:
  1. ……………..
  2. include_once «sql/db.php»;
  3. $region = $_SESSION[‘region’];
  4.  
  5. $id_user = R::findAll ( ‘user’, ‘WHERE `mregion` = ? AND `status` = ?’, [$region, 0] );
  6. ?>
  7.         <form action=»update_user.php» target=»_blank» method=»post» id=»form_valid_user»></form>
  8.         <table style=»width: 80%; border-collapse: collapse; border: 1px solid grey»  align=»center» cellspacing=»0″ cellpadding=»0″>
  9.         <tbody>
  10.         <tr>
  11.             <td style=»text-align: center; border: 1px solid grey; background: rgba(72,255,5,0.39); font-weight: 999″>Логин:</td>
  12.             <td style=»text-align: center; border: 1px solid grey; background: rgba(72,255,5,0.39); font-weight: 999″>ФИО:</td>
  13.             <td style=»text-align: center; border: 1px solid grey; background: rgba(72,255,5,0.39); font-weight: 999″>email:</td>
  14.             <td style=»text-align: center; border: 1px solid grey; background: rgba(72,255,5,0.39); font-weight: 999″>Территория:</td>
  15.             <td style=»text-align: center; border: 1px solid grey; background: rgba(72,255,5,0.39); font-weight: 999″>Авторизация:</td>
  16.         </tr>
  17.  
  18. <?php
  19. foreach ($id_user as $item){
  20.     ?>
  21.         <tr>
  22.             <td style=»text-align: center; border: 1px solid grey»><?=$item[«login»] ?></td>
  23.             <td style=»text-align: center; border: 1px solid grey»><input style=»width: 100%; text-align: center; font-size: 14px» type=»text» form=»form_valid_user»
  24.             name=»fio» placeholder=»ФИО» required></td>
  25.             <td style=»text-align: center; border: 1px solid grey»><?=$item[«mail»] ?></td>
  26.             <td style=»text-align: center; border: 1px solid grey»><?=$item[«mregion»] ?></td>
  27.             <td style=»text-align: center; border: 1px solid grey»><a href=»user_legit.php?id=<?=$item[«id»] ?>«><input style=»color: white; background-color: #765900; border: none; cursor: pointer;
  28.             text-shadow: 1px 1px 2px black; font-size: 16px;» type=»submit» form=»form_valid_user» name=»send» value=»Авторизовать»></a>
  29.             <input name=»id_avtor» type=»hidden» form=»form_valid_user» value=»<?=$item[«id»] ?>«></td>
  30.         </tr>
  31. <?php }
  32. ?>
  33.                 </tbody>
  34.         </table>
  35. ………….

Вот эту ссылку <a href=»user_legit.php?id=<?=$item[«id»] ?>»> я добавил только для того, что бы посмотреть при наведении правильные ли id подставляются в $item[«id»] и они правильные.

Скрипт обработчик пока не писал, а решил в print_r($_POST) посмотреть какие значения прилетают в массиве POST.

PHP:
  1. <?php
  2. if(isset($_POST[«send»]) AND $_POST[«send»]==‘Авторизовать’) {
  3.     echo ‘<pre>’;
  4.     print_r($_POST);
  5.     echo ‘</pre>’;}
  6. ?>

А теперь проблема: всегда в массив POST попадает один и тот же id причем самый большой по значению, а по идее должен прилетать уникальный, ведь ссылка то перед кнопкой name=»send» value=»Авторизовать» показывает правильный id из базы, но вот после отправки формы id как я и писал всегда одинаковый и самый большой по значению (например есть 1,2,3 прилетит 3).
Скорее всего я не понимаю как в данном случае работает цикл foreach.
Помогите мне пожалуйста разобраться.

 

То есть, у вас в форме несколько элементов с одинаковым значением <input name=…?

 

@Drunkenmunky, я понимаю к чему вы ведете, эти имена должны быть разные, например я сделаю так: input name=»id_avtor_<?=$item[«id»]?>», в этом случае я получу:

Код (Text):
  1. Array
  2. (
  3.     [fio] => 3
  4.     [id_avtor_1] => 1
  5.     [id_avtor_4] => 4
  6.     [id_avtor_6] => 6
  7.     [send] => Авторизовать
  8. )

А мне нужно только один Id.

 

Скорее всего ты должен получить несколько скрытых полей с разными именами.

 

@antoniii, так я и получаю, а мне нужен только одно значение с id из скрытого поля.

 

Что будет если сделать на странице с формой print_r($id_user); после запроса к базе

 

@antoniii, я уже делал такую проверку, выборка из базы происходит правильно.

Код (Text):
  1. Array
  2. (
  3.     [3] => RedBeanPHP\OODBBean Object
  4.         (
  5.             [properties:protected] => Array
  6.                 (
  7.                     [id] => 3
  8.                     [login] => test
  9.                     [fio] => Тест
  10.                     [pass] => 0987654321qwerty
  11.                     [pass_md5] => 6033a4884b99654373c17210b58080b0
  12.                     [mail] => test@x5.ru
  13.                     [mregion] => nord_zapad
  14.                     [status] => 0
  15.                     [adm] =>
  16.                 )
  17.  
  18.             [__info:protected] => Array
  19.                 (
  20.                     [type] => user
  21.                     [sys.id] => id
  22.                     [sys.orig] => Array
  23.                         (
  24.                             [id] => 3
  25.                             [login] => test
  26.                             [fio] => Тест
  27.                             [pass] => 0987654321qwerty
  28.                             [pass_md5] => 6033a4884b99654373c17210b58080b0
  29.                             [mail] => test@x5.ru
  30.                             [mregion] => nord_zapad
  31.                             [status] => 0
  32.                             [adm] =>
  33.                         )
  34.  
  35.                     [tainted] =>
  36.                     [changed] =>
  37.                     [changelist] => Array
  38.                         (
  39.                         )
  40.  
  41.                     [model] =>
  42.                     [data.bundle] => Array
  43.                         (
  44.                         )
  45.  
  46.                 )
  47.  
  48.             [beanHelper:protected] => RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper Object
  49.                 (
  50.                 )
  51.  
  52.             [fetchType:protected] =>
  53.             [withSql:protected] =>
  54.             [withParams:protected] => Array
  55.                 (
  56.                 )
  57.  
  58.             [aliasName:protected] =>
  59.             [via:protected] =>
  60.             [noLoad:protected] =>
  61.             [all:protected] =>
  62.             [castProperty:protected] =>
  63.         )
  64.  
  65.     [5] => RedBeanPHP\OODBBean Object
  66.         (
  67.             [properties:protected] => Array
  68.                 (
  69.                     [id] => 5
  70.                     [login] => user1
  71.                     [fio] =>
  72.                     [pass] => 123321
  73.                     [pass_md5] => 10f85426ddc538775bbcca23e3a17531
  74.                     [mail] => user1@x5.ru
  75.                     [mregion] => nord_zapad
  76.                     [status] => 0
  77.                     [adm] =>
  78.                 )
  79.  
  80.             [__info:protected] => Array
  81.                 (
  82.                     [type] => user
  83.                     [sys.id] => id
  84.                     [sys.orig] => Array
  85.                         (
  86.                             [id] => 5
  87.                             [login] => user1
  88.                             [fio] =>
  89.                             [pass] => 123321
  90.                             [pass_md5] => 10f85426ddc538775bbcca23e3a17531
  91.                             [mail] => user1@x5.ru
  92.                             [mregion] => nord_zapad
  93.                             [status] => 0
  94.                             [adm] =>
  95.                         )
  96.  
  97.                     [tainted] =>
  98.                     [changed] =>
  99.                     [changelist] => Array
  100.                         (
  101.                         )
  102.  
  103.                     [model] =>
  104.                     [data.bundle] => Array
  105.                         (
  106.                         )
  107.  
  108.                 )
  109.  
  110.             [beanHelper:protected] => RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper Object
  111.                 (
  112.                 )
  113.  
  114.             [fetchType:protected] =>
  115.             [withSql:protected] =>
  116.             [withParams:protected] => Array
  117.                 (
  118.                 )
  119.  
  120.             [aliasName:protected] =>
  121.             [via:protected] =>
  122.             [noLoad:protected] =>
  123.             [all:protected] =>
  124.             [castProperty:protected] =>
  125.         )
  126.  
  127.     [6] => RedBeanPHP\OODBBean Object
  128.         (
  129.             [properties:protected] => Array
  130.                 (
  131.                     [id] => 6
  132.                     [login] => user2
  133.                     [fio] =>
  134.                     [pass] => 123321
  135.                     [pass_md5] => 10f85426ddc538775bbcca23e3a17531
  136.                     [mail] => user2@x5.ru
  137.                     [mregion] => nord_zapad
  138.                     [status] => 0
  139.                     [adm] =>
  140.                 )
  141.  
  142.             [__info:protected] => Array
  143.                 (
  144.                     [type] => user
  145.                     [sys.id] => id
  146.                     [sys.orig] => Array
  147.                         (
  148.                             [id] => 6
  149.                             [login] => user2
  150.                             [fio] =>
  151.                             [pass] => 123321
  152.                             [pass_md5] => 10f85426ddc538775bbcca23e3a17531
  153.                             [mail] => user2@x5.ru
  154.                             [mregion] => nord_zapad
  155.                             [status] => 0
  156.                             [adm] =>
  157.                         )
  158.  
  159.                     [tainted] =>
  160.                     [changed] =>
  161.                     [changelist] => Array
  162.                         (
  163.                         )
  164.  
  165.                     [model] =>
  166.                     [data.bundle] => Array
  167.                         (
  168.                         )
  169.  
  170.                 )
  171.  
  172.             [beanHelper:protected] => RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper Object
  173.                 (
  174.                 )
  175.  
  176.             [fetchType:protected] =>
  177.             [withSql:protected] =>
  178.             [withParams:protected] => Array
  179.                 (
  180.                 )
  181.  
  182.             [aliasName:protected] =>
  183.             [via:protected] =>
  184.             [noLoad:protected] =>
  185.             [all:protected] =>
  186.             [castProperty:protected] =>
  187.         )
  188.  
  189. )
 

В базе должен быть только один человек с заданными параметрами или несколько?

 

ID пользователя уникально, так как поле AUTO_INCREMENT

 

У тебя запрос по каким параметрам происходит?

 

выбор по полю mregion и status = 0, мне не нужно искать по id пользователя, мне потом это id нужно передавать в форме

 

При поиске по этим полям возможно будет несколько результатов. Поэтому и несколько id

 

Все верно, так и должно быть, но передать то мне в форме нужен только один, тот который пользователь выберет заполнит ФИО и нажмет кнопку Авторизовать

 

Зачем ты заполняешь форму результатами такого запроса, при котором может получиться несколько id? Тогда пользователь должен сам выбирать, какую запись ему редактировать. А поскольку форма одна, у скрытых полей должны быть разные имена, а выбрать из них верное наша задача. Как ты определишь, какой id нужно передать? Возьмешь его из таблицы или сам назначишь?

 

Я попробую объяснить это на картинках.
Скрипт с циклом формирует таблицу, а поля формы заполняются значениями из базы с выборкой по полям mregion и status который равен 0
upload_2023-2-18_23-28-47.png

если подносить курсор к кнопкам Авторизовать, то можно видеть в ссылке которую я сделал для проверки подстановки id все работает корректно
upload_2023-2-18_23-31-2.png

первая ссылка где логин test
upload_2023-2-18_23-31-46.png

вторая ссылка где логин user1
upload_2023-2-18_23-32-56.png

третья ссылка где логин user2
т.е. логика такая, что пользователь заполняет поле ФИО в форме и нажимает напротив кнопку авторизовать, на страницу с обработчиком попадает в POST номер id в $_POST[«id_avtor»] и потом буду обновлять запись в базе по id для поля где ФИО.
Но я не получаю желаемого, на какую кнопку Авторизовать я бы не нажал, я получаю в $_POST[«id_avtor»] один и тот же номер id в данном случае 6.

 

Значит вам нужны несколько форм, При нажатии на кнопку с типом submit отправляется всё, что есть в форме.
Если, при этом, какие-то элементы, имеют одинаковые имена, то отправляется только последний.Это происходит еще на стороне браузера.

Примерно, для браузера, ваша форма выглядит так:

Код (Text):
  1.  
  2. var id_user = 1
  3. var id_user = 2
  4. var id_user = 3
  5.  
  6. echo id_user  //3
 

Точно, мне циклом нужно будет формировать столько форм сколько итераций цикл проводит извлекая данные, при этом id формы делать уникальным например подставляя в id сам идешник пользователя из базы <form action=»update_user.php» target=»_blank» method=»post» id=»form_valid_user_<?=$item[«id»]?>»></form>

 

Не обязательно. Это может быть нужным, если хотите отправить сразу несколько форм, вложив их в одну общую , или для обработки javascript’ом например и тд

 

Если вам нужно обновить одного пользователя, то надо делать много форм. Или брать жабаскриптом нужные. В вашей форме инпуты, которые идут ниже, перезапишут те, что выше. Так работает браузер, когда одинаковые name у полей формы

 

Спасибо всем большое, вот так все работает:

PHP:
  1. <?php
  2. foreach ($id_user as $item){
  3.     ?>
  4.         <tr>
  5.             <form action=»update_user.php» target=»_blank» method=»post» id=»form_valid_user_<?=$item[«id»] ?>«></form>
  6.             <td style=»text-align: center; border: 1px solid grey»><?=$item[«login»] ?></td>
  7.             <td style=»text-align: center; border: 1px solid grey»><input style=»width: 100%; text-align: center; font-size: 14px» type=»text» form=»form_valid_user_<?=$item[«id»] ?>«
  8.             name=»fio» placeholder=»ФИО» required></td>
  9.             <td style=»text-align: center; border: 1px solid grey»><?=$item[«mail»] ?></td>
  10.             <td style=»text-align: center; border: 1px solid grey»><?=$item[«mregion»] ?></td>
  11.             <td style=»text-align: center; border: 1px solid grey»><a href=»user_legit.php?id=<?=$item[«id»] ?>«><input style=»color: white; background-color: #765900; border: none; cursor: pointer;
  12.             text-shadow: 1px 1px 2px black; font-size: 16px;» type=»submit» form=»form_valid_user_<?=$item[«id»] ?>» name=»send» value=»Авторизовать»></a>
  13.             <input name=»id_avtor» type=»hidden» form=»form_valid_user_<?=$item[«id»] ?>» value=»<?=$item[«id»] ?>«></td>
  14.         </tr>
  15. <?php }
  16. ?>
 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *