Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Update, Проблема редактирования записей в базе. 
:(
    Опции темы
PARROT
Дата 11.5.2005, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 23
Всего: 50



Новый день, старая тема.
Пишу человечку админку, все работает кроме радактирования записей в базе!
Вот код:
Код

switch ($mode) {
//оставила чтобы видно было откуда берутся переменные.
case'meny':{
    echo "<h3>Товары:</h3>
<a href=collection_admin.php?mode=add>Добавить в коллекцию</a><br>
<a href=collection_admin?mode=del>Удалить из коллекции </a><br>
<a href=collection_admin?mode=edit>Редактировать коллецию</a><br>";
}
break;
//до сюда работает
case 'edit':{
echo "<table cellspacing=0 cellpadding=0 border>
<form method=POST>
<tr><th colspan=6 height=50>Форма для редактирования данных базы Coolection</th></tr>
<tr><td align=center height=20>Артикул (только номер)</td>
<td align=center height=20>Текст(описание материалов)</td>
<td align=center height=20>Размер</td>
<td align=center height=20>Цена</td>
<td align=center>Категория</td>
</tr>";
$result = mysql_query("SELECT id_col,art,text,size,price,date,id_cat FROM collection") or die(mysql_error());
                for($i=0;$i<mysql_num_rows($result);$i++)
{
    $mis=mysql_fetch_row($result);
echo "<tr>
<td align=center valign=top><input type=text name=ar value='$mis[1]'></td>
<td align=center valign=top><input type=text name=tex value='$mis[2]'></td>
<td align=center valign=top><input type=text name=raz value='$mis[3]'></td>
<td align=center valign=top><input type=text name=zena value='$mis[4]'></td>
<td align=center valign=top><input type=text name=cate value='$mis[6]'></td>
</tr>";
}
?>
<tr><td colspan=5 align=center><Input Type=submit name=red Value=Редактировать style=cursor:hand></td></tr><table></form>
<?
if($red)
{
$time=date("Y-m-d");
//вот тут начинаются проблемы, база может отредактировать только последнюю запись, выводимую 
// на экран
mysql_query ("UPDATE collection SET `art`='$ar', `text`='$tex', `size`='$raz', `price`='$zena', `id_cat`='$cate' WHERE id_col=$mis[0]") or die(mysql_error());    
                  header('location: collection_admin.php?mode=edit');
exit;
} 
}
break;
}

Пожалейте! Сижу с кодом 3 день. Незнаю уже с какой стороны исправить! smile


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Mal Hack
Дата 11.5.2005, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



А в чем конкретно? mysql_error выведи после запроса.
PM ICQ   Вверх
PARROT
Дата 11.5.2005, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 23
Всего: 50



Код

WHERE id_col=$mis[0]") or die(mysql_error()); 

Ничего не пишет и не обновляет базу, обновляет только последнюю выведенную запись и все, остальные не хочет.

Это сообщение отредактировал(а) PARROT - 11.5.2005, 17:10


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Aliance
Дата 11.5.2005, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Цитата(PARROT @ 11.5.2005, 18:02)
switch ($mode) {

Почему так-то, нужно ведь $_POST['mode']
PM MAIL WWW ICQ Skype   Вверх
PARROT
Дата 11.5.2005, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 23
Всего: 50



Цитата(Aliance @ 11.5.2005, 17:18)
Цитата(PARROT @ 11.5.2005, 18:02)
switch ($mode) {


Дело как раз не в switch, он работает как часы.


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Mal Hack
Дата 11.5.2005, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(PARROT @ 11.5.2005, 18:10)
Ничего не пишет и не обновляет базу, обновляет только последнюю выведенную запись и все, остальные не хочет.

А какие тебе надо?
Он у тебя обновляет ту запись, ID которой ты берешь из $mas[0]
PM ICQ   Вверх
PARROT
Дата 11.5.2005, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 23
Всего: 50



В базе пока 15 записей, почему он обновляет именно 15-ю, а остальные нет?
А переменная $mas[0]; у всех разная, так как это номер записи.
Может можно обновлять только 1 или только 2 и т.д. записи, сразу 3 или 5 обновременно нельзя?


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Aliance
Дата 11.5.2005, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Дык поидеи массивом нуно пробежаЦа
PM MAIL WWW ICQ Skype   Вверх
PARROT
Дата 11.5.2005, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 23
Всего: 50



Так мы же поля в базе обновляем...?
Загружаем их в текстареа и там редактируем, после просто обновляем по идее, а?
Может я не права? Запуталась?
Я уже ничего не понимаю.


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Aliance
Дата 11.5.2005, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



В упор не вижу ниодной textarea
PM MAIL WWW ICQ Skype   Вверх
PARROT
Дата 11.5.2005, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 23
Всего: 50



Ну в input, разница не большая smile
Смысл один и тот же, редактирование и обновление данных в базе. smile
Мне уже смешно. Я сейчас по полу кататься начну! smile
Добавлено @ 21:30
грузим из базы в input, value-м для которых будут являться поля из базы.

Это сообщение отредактировал(а) PARROT - 11.5.2005, 21:30


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
cosmos33
Дата 11.5.2005, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


небывалый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 8.1.2005
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Может попробовать сheckbox ввести, чтобы отмечать те сообщения, которые ты редактируешь? А потом указать в запросе к базе, что обнавлять только те записи, которые отмечены.


Цитата
WHERE id_col=$mis[0]")
у тебя же только одно поле указано. в смысле одна строка из базы. smile
Нужно ввести переменную, связанную с checkbox, тогда указав
Код

If или while(isset($checkbox)) {mysql_query("UPDATE collection 'art'=$art ......... where id_cat=$mis[0]");


Это сообщение отредактировал(а) cosmos33 - 11.5.2005, 22:21
PM MAIL ICQ   Вверх
oxygen
Дата 12.5.2005, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 4.5.2005
Где: Москва, СВАО

Репутация: 1
Всего: 3



Конечно будет редактировать только последнюю smile

Объясняю:
Ты выбираешь из базы, и делаешь построчный fetch (обработка строк)
Выводишь построчно таблицу для редактирования. Когда цикл вывода заканчивается, то $mis содержит в себе последнюю строчку, выбранную из БД. И соответственно $mis[0] - идентификатор последней записи.
Потом запускается редактирование (кстати его лучше поставить сначала, иначе результаты сразу видны не будут)
Потому и редактируется только она.
Это не совсем верный способ.


зачем чекбоксы?

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

тогда код по идее должен выглядеть вот так:
Код

switch ($mode) {
//оставила чтобы видно было откуда берутся переменные.
case'meny':{
    echo "<h3>Товары:</h3>
<a href=collection_admin.php?mode=add>Добавить в коллекцию</a><br>
<a href=collection_admin?mode=del>Удалить из коллекции </a><br>
<a href=collection_admin?mode=edit>Редактировать коллецию</a><br>";
}
break;
//до сюда работает
case 'edit':{


//Блок редактирования лучше поместить сначала, чтобы результаты при следующей выборке были видны сразу
if($_SERVER['REQUEST_METHOD']=="POST")
{
$time=date("Y-m-d");
//вот тут начинаются проблемы, база может отредактировать только последнюю запись, выводимую 
// на экран

exctract($_POST);
foreach($id_record as $id => $value) {
    mysql_query ("UPDATE collection SET `art`='$ar[$id]', `text`='$tex[$id]', `size`='$raz[$id]', `price`='$zena[$id]', `id_cat`='$cate[$id]' WHERE id_col=$id") or die(mysql_error());    
}

// Теперь это хеадер не нужен
//header('location: collection_admin.php?mode=edit');
//exit;
} 



echo "<table cellspacing=0 cellpadding=0 border>
<form method=POST>
<tr><th colspan=6 height=50>Форма для редактирования данных базы Coolection</th></tr>
<tr><td align=center height=20>Артикул (только номер)</td>
<td align=center height=20>Текст(описание материалов)</td>
<td align=center height=20>Размер</td>
<td align=center height=20>Цена</td>
<td align=center>Категория</td>
</tr>";
$result = mysql_query("SELECT id_col,art,text,size,price,date,id_cat FROM collection") or die(mysql_error());

while ($mis=mysql_fetch_object($result)) {

echo "<tr>
<td align=center valign=top>
<input type=hidden name=id_record[$mis->id_col] value='$mis->id_col'>
<input type=text name=ar[$mis->id_col] value='$mis->art'></td>
<td align=center valign=top><input type=text name=tex[$mis->id_col] value='$mis->text'></td>
<td align=center valign=top><input type=text name=raz[$mis->id_col] value='$mis->size'></td>
<td align=center valign=top><input type=text name=zena[$mis->id_col] value='$mis->price'></td>
<td align=center valign=top><input type=text name=cate[$mis->id_col] value='$mis->id_cat'></td>
</tr>";

}
?>
<tr><td colspan=5 align=center><Input Type=submit name=red Value=Редактировать style=cursor:hand></td></tr><table></form>
<?
}
break;
}


p.s. не тестировал, возможно где-то опечатался

Это сообщение отредактировал(а) oxygen - 12.5.2005, 03:23
PM MAIL WWW ICQ   Вверх
PARROT
Дата 12.5.2005, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 23
Всего: 50



Цитата(oxygen @ 12.5.2005, 03:16)
Это не совсем верный способ.

Свою ошибку поняла, еще ночью, мой вариант работать не должен был!
Опыта маловато, вот и не додумалась.
Конечно можно было сделать как с удалением, ссылка около каждой строки и редактируй каждую строку, жми, но это слишком просто!

Спасибо, oxygen. Я посмотрю, подумаю. smile

Добавлено @ 07:49
Цитата(cosmos33 @ 11.5.2005, 22:00)
Может попробовать сheckbox



На дух checkbox-сы не переношу, как и select, внешний вид их вызывает отвращение. smile

Даже не могу объяснить почему. smile

Тогда уж лучше делать ссылками или уж на худой конец вместо ссылок вставить img


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
oxygen
Дата 12.5.2005, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 4.5.2005
Где: Москва, СВАО

Репутация: 1
Всего: 3



Цитата(PARROT @ 12.5.2005, 07:46)
Тогда уж лучше делать ссылками или уж на худой конец вместо ссылок вставить img

да нет же, не надо так мучаться smile
просто пробежаться по массиву и каждую строчку проапдейтить.
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.