Есть форма в цикле. Есть инпуты с уникальными именами. Как обработать конкретный инпут. Код (Text): <form method="post"> <? foreach($res as $val):?> <p> <input type="text" name="<?="id[{$val['id']}]";?>" value="<?=$val['id']?>" hidden> <input type="text" name="username" value="<?=$val['username']?>" readonly> <input type="text" name="password" value="<?=$val['password']?>"> <input type="text" name="fio" value="<?=$val['fio']?>"> <input type="submit" class="buttons" value="Изменить"/> </p> <? endforeach;?> </form>
Можно массив сделать. Например: HTML: <input name="id[random_string]"/> <input name="id[random_string2]"/> .. Обрабатывать можно PHP: foreach ($_POST['id'] as $value) { // обработка $value; } Иначе придётся все значения перебирать: PHP: foreach ($_POST as $value) { ... }
после того как отправил POST запрос на некий скрипт, допустим post.php PHP: <?php var_dump ( $_POST ); узнаешь как работать --- Добавлено --- не забудь в теге форм прописать атрибут action --- Добавлено --- P.s: я еще тут.. О великий Нео
По поводу атрибут action. Он не обязателен если скрипт будет выполнятся в том же файле. Мне же просто нужно получить пост с уникальным названием инпута.
А, невнимательно посмотрел --- Добавлено --- Ну так, если у input name='id[123]', то он будет доступен в php в $_POST["id"][123] для post или в $_GET["id"][123] для get. Элементарная работа с массивами --- Добавлено --- Только тога у всех input такие имена должны быть
В общем тема такая! после Код (Text): <form method="post"> <? foreach($res as $val):?> <p> <input type="text" name="<?="id[{$val['id']}]";?>" value="<?=$val['id']?>" readonly> <input type="text" name="<?="username[{$val['username']}]";?>" value="<?=$val['username']?>" readonly> <input type="text" name="<?="password[{$val['password']}]";?>" value="<?=$val['password']?>"> <input type="text" name="<?="fio[{$val['fio']}]";?>" value="<?=$val['fio']?>"> <input type="submit" class="buttons" value="Изменить"/> </p> <? endforeach;?> </form> Нужно обработать только тот инпут который был нажат! Код (Text): if(isset($_POST['id'])){ foreach($_POST['id'] as $key=>$val){ foreach($_POST['fio'] as $key=>$v) { $query = " UPDATE users SET `fio` = '".$v."' WHERE `id` = '".$val."' "; mysql_query($query) or die(mysql_error()); } } } Но почему то он всем `fio` ставит один и тот же инпут!!!!!!! Помогите !!! Рвет крышу совсем! Спасибо!
@New_neo Ты в одной форме создаёшь несколько кнопок submit? Каждый проход цикла создавай новую форму. И задай ей имя. И в сабмите пропиши его. PHP: <? foreach($res as $val):?> <form method="post" name="form_".уникальное имя или число> <input type="text" name="<?="id[{$val['id']}]";?>" value="<?=$val['id']?>" readonly> <input type="text" name="<?="username[{$val['username']}]";?>" value="<?=$val['username']?>" readonly> <input type="text" name="<?="password[{$val['password']}]";?>" value="<?=$val['password']?>"> <input type="text" name="<?="fio[{$val['fio']}]";?>" value="<?=$val['fio']?>"> <input type="submit" class="buttons" form=имя формы value="Изменить"/> </form> <? endforeach;?>
Допустим я задаю каждой форме имя уникальное. Все равно не получается. Как то все не то! --- Добавлено --- Есть такой момент! Мне скажем нужно одной кнопкой обновить поля которые я поменял. Как тут быть?
Форма должна быть вот так: Код (Text): <form method="post" name="new_form" action="new.php"> <input type="submit" name="rename" class="buttons" value="Изменить"/> <? foreach($res as $val):?> <p> <input type="text" name="<?="id[{$val['id']}]";?>" value="<?=$val['id']?>" readonly> <input type="text" name="<?="username";?>" value="<?=$val['username']?>" readonly> <input type="text" name="<?="password";?>" value="<?=$val['password']?>"> <input type="text" name="fio<?="[{$val['id']}]";?>" value="<?=$val['fio']?>"> </p> <? endforeach;?> </form> А вот с отправкой запроса проблема. Когда дамп снимаю вроде все приходит. Когда в цикле начинаю обновлять информацию то она не приходит и данные не сохраняются. Код (Text): if(isset($_POST['fio'])){ $top=$_POST['id']; $fio=$_POST['fio']; if(isset($_POST['id'])){ foreach($top as $key=>$val){ foreach($fio as $v) { $query = " UPDATE users2 SET `fio` = '$v' WHERE `id` = '$val' "; mysql_query($query) or die(mysql_error()); } } } }
Как-то так: PHP: <form method="post" action="new.php"> <input type="submit" class="buttons" value="Изменить"/> <?php foreach ($res as $val) { $id = htmlspecialchars($val['id']); ?> <p> <input value="<?php echo $id; ?>" readonly="readonly"/> <input value="<?php echo htmlspecialchars($val['username']); ?>" readonly="readonly"/> <input name="password[<?php echo $id; ?>]" value="<?php echo htmlspecialchars($val['password']); ?>"/> <input name="fio[<?php echo $id; ?>]" value="<?php echo htmlspecialchars($val['fio']); ?>"/> </p> <?php } ?> </form> PHP: <?php if (!empty($_POST['fio'])) { foreach ($_POST['fio'] as $id => $value) { $query = vsprintf('UPDATE `users2` SET `fio` = "%s" WHERE `id` = "%s"', array( mysql_real_escape_string($value), mysql_real_escape_string($id), )); mysql_query($query) or die(mysql_error()); } } Правда не совсем понятно для чего передавать/выводить пароль, ведь он нигде не используется. Код не проверял.
Решено! Все гораздо проще оказалось! Код (Text): if(isset($_POST['fio'])){ $top=$_POST['id']; $fio=$_POST['fio']; $len=count($top); if(isset($_POST['id'])){ $len = count($top); for($i=0; $i<$len; $i++) { foreach($fio AS $k=>$v) { $query = " UPDATE users2 SET fio = '".$v."' WHERE id = '".$k."' "; mysql_query($query) or die(mysql_error()); } } } }
Что удалить? лучше вместо цикла, выполнить сразу все запросы, например https://secure.php.net/manual/ru/mysqli.multi-query.php ещё код не безопасный, http://phpfaq.ru/mysql/sql_injection