X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Update
errload
errload
Topic Starter сообщение 19.3.2012, 1:34; Ответить: errload
Сообщение #1


Смотрю сюда тоже кидают вопросы по MySQL, так что может кто обратит внимание....

Самую верхнюю запись обновляет, а все остальные ниже просто очищает в таблице.. Я что-то неправильно делаю?
[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' 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>";

$edit = $key_id."edit";

echo "
<form action='".$PHP_SELF."' method='POST'>
<input type='submit' name='".$edit."' id='submit' value='Изменить'>
</form>";

if(isset($_POST[$edit])) {
$query = "UPDATE kollegi SET firstname='".$_POST['firstname']."', otch='".$_POST['otch']."', lastname='".$_POST['lastname']."', text='".$_POST['text']."' WHERE key_id='".$key_id."'";
mysql_query($query) or die(mysql_error());
}

}
echo "</form>";
[/PHP]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 19.3.2012, 2:29; Ответить: alexdrob
Сообщение #2


(errload @ 19.3.2012, 04:34) *
$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
errload
Topic Starter сообщение 19.3.2012, 12:06; Ответить: errload
Сообщение #3


(alexdrob @ 19.3.2012, 05:29) *
$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 записи.. И в дальнейшем я проверяю кнопка с каким именем была нажата, у той формы и произвести обновление записей... Но смысл в том, что если это самая верхняя запись, обновление происходит нормально.. Но если это запись по счету вторая и ниже, после нажатия кнопки все поля очищаются...

( @ 19.3.2012, 05:29) *
ну и защиты от sql injection у вас нет совсем

Мне пока главное функциональность наладить, чтобы все работало....
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
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
errload
Topic Starter сообщение 20.3.2012, 13:28; Ответить: errload
Сообщение #5


Сделал как в посте номер 2 - убрал вложение форм и добавил скрытое поле с value=$row['key_id'].. Теперь формы не очищаются при нажатии кнопки изменить (остаются с теми же значениями), только вот меняются данные только у самой нижней формы......
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
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
errload
Topic Starter сообщение 20.3.2012, 23:25; Ответить: errload
Сообщение #7


Тогда почему последняя запись успешно обновляет?
Но я все равно проверил, и результат тот же.....

Я думаю тут примерно так: у каждой выведенной записи из базы есть своя кнопка "Изменить", и все кнопки у всех записей имеют одинаковое имя.. При нажатии на кнопку по условию key_id=$_POST['key_id'] соответствует только последняя запись из выведенных, поэтому только она и обновляется..
Нужно как-то определять какая именно кнопка нажата, у какой именно записи... Только вот как?

И еще,
(alexdrob @ 20.3.2012, 17:36) *
ну и id html тегам нельзя давать одни и те же

почему? Как это влияет и на что?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 20.3.2012, 23:39; Ответить: alexdrob
Сообщение #8


Вот я не поленился, создал таблицу с такими полями как у вас. Просто взял скопипастил код отсюда и все работает. обновляется только та запись, на кнопку которой я жму.


(errload @ 21.3.2012, 02:25) *
и все кнопки у всех записей имеют одинаковое имя

правильно, имя одинаковое. это нужно для проверки условия
(alexdrob @ 20.3.2012, 17:36) *
if(isset($_POST['submit'])) {

тут имя submit проверяется, по этому все кнопки так и названы, это имя вообще роли не играет.


(errload @ 21.3.2012, 02:25) *
При нажатии на кнопку по условию key_id=$_POST['key_id'] соответствует только последняя запись из выведенных, поэтому только она и обновляется..

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


(errload @ 21.3.2012, 02:25) *
очему? Как это влияет и на что?

Ну что такое ID? http://ru.wikipedia.org/wiki/%D0%98%D0%B4%...%82%D0%BE%D1%80
это уникальный признак объекта, позволяюший различать объекты и/или объект по идентификатору.

если вы обращаетесь к элементу по ID а у вас 2 элемента или более с одинаковым id, то к какому элементу вы обращаетесь.
ну вот в вашей таблице, у вас же все записи имеют уникальный id? я думаю все, иначе как бы вы по ид обновили только нужную запись?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
errload
errload
Topic Starter сообщение 21.3.2012, 1:30; Ответить: errload
Сообщение #9


Действительно, работает, прошу прощения )))) Это уже я начало и конец формы по ошибке вынес за пределы цикла.....
Спасибо тебе большое, alexdrob !!!!

(alexdrob @ 21.3.2012, 02:39) *
если вы обращаетесь к элементу по 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
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']
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) 25.000каталогов+rss+captcha+мой проект+update+доски объявлений=10wmz
Отдача: тИЦ 10-40, PR 2-4.
6 streams 4165 11.2.2009, 22:28
автор: streams


 



RSS Текстовая версия Сейчас: 26.4.2024, 2:45
Дизайн