Помощник
|
Update |
errload
|
Сообщение
#1
|
||
|
|
||
|
|||
alexdrob |
19.3.2012, 2:29;
Ответить: alexdrob
Сообщение
#2
|
|
$key_id в эту переменную вам нужно передавать значение, с id той записи которую вы хотите изменить. для этого можно использовать например скрытое поле input type="hidden" и ещё, у вас форма внутри другой формы, в которой много полей, а имена полей для всех записей будут одинаковы, по этому нужно либо каждую запись выводить вв отдельной форме, либо подставить в конец к имени поля [] можно даже со значением id а потом в цикле перебирать все поля, получать значение ключа, это и будет id записи и в цикле пересохранять все записи. ещё и запрос update внутри цикла вывода можно например как то так [PHP]$query = "SELECT * FROM kollegi"; $res = mysql_query($query) or die(mysql_error()); while ($row = mysql_fetch_array($res)) { $key_id = $row['key_id']; echo " <form action='".$PHP_SELF."' method='POST'> <table border='0' align='left'> <tr> <td rowspan='2'><img src='".$row['img']."'> <td><input type='text' name='firstname' id='text' value='".$row['firstname']."'> <input type='text' name='otch' id='text' value='".$row['otch']."'> <input type='text' name='lastname' id='text' value='".$row['lastname']."'></td> </tr> <tr> <td><textarea name='text' id='textarea'>".$row['text']."</textarea></td> </tr> </table> <input type='hidden' name='key_id' id='text' value='".$row['key_id']."'> <input type='submit' name='submit' id='submit' value='Изменить'> </form>"; } if(isset($_POST['submit'])) { $query = "UPDATE kollegi SET firstname='".$_POST['firstname']."', otch='".$_POST['otch']."', lastname='".$_POST['lastname']."', text='".$_POST['text']."' WHERE key_id='".$_POST['key_id']."'"; mysql_query($query) or die(mysql_error()); } [/PHP] ну и защиты от sql injection у вас нет совсем |
|
|
errload
|
Сообщение
#3
|
|
$key_id в эту переменную вам нужно передавать значение, с id той записи которую вы хотите изменить. Так я так и делаю вроде.. [PHP]$edit = $key_id."edit"; echo " <form action='".$PHP_SELF."' method='POST'> <input type='submit' name='".$edit."' id='submit' value='Изменить'> </form>";[/PHP] Таким образом я присваиваю каждой кнопке "Изменить" уникальное имя с id записи.. И в дальнейшем я проверяю кнопка с каким именем была нажата, у той формы и произвести обновление записей... Но смысл в том, что если это самая верхняя запись, обновление происходит нормально.. Но если это запись по счету вторая и ниже, после нажатия кнопки все поля очищаются... ну и защиты от sql injection у вас нет совсем Мне пока главное функциональность наладить, чтобы все работало.... |
|
|
alexdrob |
19.3.2012, 12:27;
Ответить: alexdrob
Сообщение
#4
|
|
я же написал, хотите просто поле с именем firstname - делайте на каждую запись свою форму, с полями, а вы сделали общую форму, а в ней кучу форм с одной кнопкой отправки.
у вас форма типа <form> <input name="firstnname"... <form... <input submit... </form> <input name="firstnname"... <form... <input submit... </form> <input name="firstnname"... <form... <input submit... </form> </form> у вас поля с одинаковым именем перетирают друг друга при передачи. либо делайте по форме на поле, как я показал выше либо делайте поля <input type="text" name="firstname[{$key_id}]"... и форму вложенную уберите что то типа [PHP]$query = "SELECT * FROM kollegi"; $res = mysql_query($query) or die(mysql_error()); echo "<form action='".$PHP_SELF."' method='POST'>"; while ($row = mysql_fetch_array($res)) { $key_id = $row['key_id']; echo " <table border='0' align='left'> <tr> <td rowspan='2'><img src='".$row['img']."'> <td><input type='text' name='firstname[{$key_id}]' id='text' value='".$row['firstname']."'> <input type='text' name='otch[{$key_id}]' id='text' value='".$row['otch']."'> <input type='text' name='lastname[{$key_id}]' id='text' value='".$row['lastname']."'></td> </tr> <tr> <td><textarea name='text[{$key_id}]' id='textarea'>".$row['text']."</textarea></td> </tr> </table>"; $edit = $key_id."edit"; echo "<input type='submit' name='".$edit."' id='submit' value='Изменить'>"; if(isset($_POST[$edit])) { $query = "UPDATE kollegi SET firstname='".$_POST['firstname'][$key_id]."', otch='".$_POST['otch'][$key_id]."', lastname='".$_POST['lastname'][$key_id]."', text='".$_POST['text'][$key_id]."' WHERE key_id='".$key_id."'"; mysql_query($query) or die(mysql_error()); } } echo "</form>";[/PHP] Вот только в таком способе есть большой минус. Вы передаёте сразу все поля, то есть у вас пост запрос уходит с текстом со всех полей на странице. По этому лучше сделать как я выше описал, в посте номер 2 |
|
|
errload
|
Сообщение
#5
|
|
Сделал как в посте номер 2 - убрал вложение форм и добавил скрытое поле с value=$row['key_id'].. Теперь формы не очищаются при нажатии кнопки изменить (остаются с теми же значениями), только вот меняются данные только у самой нижней формы......
|
|
|
alexdrob |
20.3.2012, 14:36;
Ответить: alexdrob
Сообщение
#6
|
|
ну во первых у вас UPDATE выполняется после вывода.
то есть вы изменили нажали изменить данные отправились вы вначале вывели старые данные из талицы потом только выполнился апдейт то есть перекиньте апдейт в самый верх. ну и id html тегам нельзя давать одни и те же [PHP] if(isset($_POST['submit'])) { $query = "UPDATE kollegi SET firstname='".$_POST['firstname']."', otch='".$_POST['otch']."', lastname='".$_POST['lastname']."', text='".$_POST['text']."' WHERE key_id='".$_POST['key_id']."'"; mysql_query($query) or die(mysql_error()); } $query = "SELECT * FROM kollegi"; $res = mysql_query($query) or die(mysql_error()); while ($row = mysql_fetch_array($res)) { $key_id = $row['key_id']; echo " <form action='".$PHP_SELF."' method='POST'> <table border='0' align='left'> <tr> <td rowspan='2'><img src='".$row['img']."'> <td><input type='text' name='firstname' value='".$row['firstname']."'> <input type='text' name='otch' value='".$row['otch']."'> <input type='text' name='lastname' value='".$row['lastname']."'></td> </tr> <tr> <td><textarea name='text' id='textarea'>".$row['text']."</textarea></td> </tr> </table> <input type='hidden' name='key_id' id='text' value='".$row['key_id']."'> <input type='submit' name='submit' value='Изменить'> </form>"; } [/PHP] |
|
|
errload
|
Сообщение
#7
|
|
Тогда почему последняя запись успешно обновляет?
Но я все равно проверил, и результат тот же..... Я думаю тут примерно так: у каждой выведенной записи из базы есть своя кнопка "Изменить", и все кнопки у всех записей имеют одинаковое имя.. При нажатии на кнопку по условию key_id=$_POST['key_id'] соответствует только последняя запись из выведенных, поэтому только она и обновляется.. Нужно как-то определять какая именно кнопка нажата, у какой именно записи... Только вот как? И еще, ну и id html тегам нельзя давать одни и те же почему? Как это влияет и на что? |
|
|
alexdrob |
20.3.2012, 23:39;
Ответить: alexdrob
Сообщение
#8
|
|
Вот я не поленился, создал таблицу с такими полями как у вас. Просто взял скопипастил код отсюда и все работает. обновляется только та запись, на кнопку которой я жму.
и все кнопки у всех записей имеют одинаковое имя правильно, имя одинаковое. это нужно для проверки условия if(isset($_POST['submit'])) { тут имя submit проверяется, по этому все кнопки так и названы, это имя вообще роли не играет. При нажатии на кнопку по условию key_id=$_POST['key_id'] соответствует только последняя запись из выведенных, поэтому только она и обновляется.. при нажатии кнопки, отправляется форма, в которую вложена эта кнопка. соответственно и отправится поле key_id только с тем иж, которое вписано именно в эту форму, в которой находится кнопка submit нажатая. Ещё раз повторю, просто скопипастеный код с поста номер 6 работает. очему? Как это влияет и на что? Ну что такое ID? http://ru.wikipedia.org/wiki/%D0%98%D0%B4%...%82%D0%BE%D1%80 это уникальный признак объекта, позволяюший различать объекты и/или объект по идентификатору. если вы обращаетесь к элементу по ID а у вас 2 элемента или более с одинаковым id, то к какому элементу вы обращаетесь. ну вот в вашей таблице, у вас же все записи имеют уникальный id? я думаю все, иначе как бы вы по ид обновили только нужную запись? |
|
|
errload
|
Сообщение
#9
|
|
Действительно, работает, прошу прощения )))) Это уже я начало и конец формы по ошибке вынес за пределы цикла.....
Спасибо тебе большое, alexdrob !!!! если вы обращаетесь к элементу по ID а у вас 2 элемента или более с одинаковым id, то к какому элементу вы обращаетесь. А как на счет class? К примеру так: <input type='text' class='text' name='firstname' value='".$row['firstname']."'> <input type='text' class='text' name='otch' *value='".$row['otch']."'> <input type='text' class='text' name='lastname' value='".$row['lastname']."'> Ну, соответственно, и css переписать )))) |
|
|
alexdrob |
21.3.2012, 1:43;
Ответить: alexdrob
Сообщение
#10
|
|
Только ID уникальный, класс для того и придуман что бы быть одинаковым у нескольких элементов, иначе смысла не было бы вообще в классах.
Имена тоже могут быть уникальные. Но, смотря как использовать. Вот когда у вас много форм, и имена одинаковые, но для одной формы они уникальны, это, при передачи данных, не страшно. А вот как в самом первом коде, одна форма, но в ней для каждой записи идёт повторение имени - это плохо. Вы в рещультате получите либо значение только первой записи в массиве POST в php. Либо последней. Для одинаковых имен используют массивы. name="firstname[]" - передаст массивто етсь ерпи трёх разных полях с именем firstname в скрипте у вас будет не просто $_POST['firstname'] а $_POST['firstname'][0], $_POST['firstname'][1], $_POST['firstname'][2] То есть массив. можно ключ задавать явно name="firstname[1]" name="firstname[abc]" тогда в пхп будет два элемента массива $_POST['firstname'][1] и $_POST['firstname']['abc'] |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
25.000каталогов+rss+captcha+мой проект+update+доски объявлений=10wmz Отдача: тИЦ 10-40, PR 2-4. |
6 | streams | 4165 | 11.2.2009, 22:28 автор: streams |
Текстовая версия | Сейчас: 26.4.2024, 2:45 |