Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Список перескакивает на первое значение

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Создание веб-сайтов
Предыдущая тема :: Следующая тема  
Автор Сообщение
lenta



Зарегистрирован: 15.09.2007
Сообщения: 8

СообщениеДобавлено: Сб Дек 15 2007 10:54    Заголовок сообщения: Список перескакивает на первое значение Ответить с цитатой

господа, помогите плиз. Есть список со значениями поля Наименование из БД. Пользователь выбирает наименование, нажимает "Изменить", и по этому наименованию в текстарии появляется инфа о нем. Дальше по идее пользователь может изменить эту инфу, нажать "Сохранить" и т.о. внести изменения в БД.
Но это только по идее. На деле же после нажатия на кнопку "Изменить" список перескакивает на свое первое значение. И, когда пользователь нажимает "Сохранить", значение сохраняется первому наименованию, а не тому, которому надо.
Пробовала создать текстовое поле и запоминать туда id при выборе элемента списка. НЕ ПОМОГАЕТ. Когда список перескакивает на первое значение, id в текстовом поле тоже меняется.
ПОДСКАЖИТЕ как сделать так, чтобы список не перескакивал на активное первое значение или как сделать, чтобы айди брался в текст ТОЛЬКО ОДИН РАЗ.
Вот мой код:
<form name=form1 method="post" action="news_update2.php">
<select name="select3" id=select4>
<? //20

//запрос
$select2=mysql_query("select * from `news`");
$num_results = mysql_num_rows($select2);
while ($results = mysql_fetch_array($select2)){

print '<option value="'.$results['id_news'].'">'.$results['top_news'].'</option>';
}
print '</select>';
print '<input name="ids" value="'.@$_POST['select3'].'">'; //30
print '<input type="submit" value="Запомнить">';
print'<br>';
$comb=mysql_query("select `content` from `news` where `id_news`= '".@$_POST['ids']."'");
$num_results2 = mysql_num_rows($comb);
$results2 = mysql_fetch_array($comb);
?>
<p>
<input type="submit" value="Изменить">
<p>
Текст новости<br>
<TEXTAREA id=area1 name="content1" rows=20 cols=50><?=$results2['content']?></TEXTAREA>

<?
//if(@$_POST['ids']){
$up_date=mysql_query("update `news` set `content` = '".@$_POST['content1']."' where `id_news`= '".@$_POST['ids']."'");
//}
?>
<br><input type="submit" value="Сохранить">
</form>
<?
if (!$up_date) //49
echo "Не изменено";
?>
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex_soldier



Зарегистрирован: 08.08.2007
Сообщения: 57
Откуда: Россия

СообщениеДобавлено: Пн Дек 17 2007 14:11    Заголовок сообщения: Ответить с цитатой

Простите, а чего вы хотите?
Кнопка ИЗМЕНИТЬ имеет тип SUBMIT - все, форма отправлена на сервер.
То что вы видите перескок - это перерисовка формы по новой!
Вы же нигде не указали checked , так что выбранным по-умолчанию становится первый!
_________________
Мир Идей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lenta



Зарегистрирован: 15.09.2007
Сообщения: 8

СообщениеДобавлено: Вт Дек 18 2007 21:46    Заголовок сообщения: Ответить с цитатой

Кнопка ИЗМЕНИТЬ имеет тип SUBMIT - все, форма отправлена на сервер.[/b]

По этой кнопке информация выводится ИЗ базы в текстарею. Поэтому она и submit

Вы же нигде не указали checked , так что выбранным по-умолчанию становится первый!

Расскажите пожалуйста подробнее, что это параметр такой. А то я только про selected знаю
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex_soldier



Зарегистрирован: 08.08.2007
Сообщения: 57
Откуда: Россия

СообщениеДобавлено: Ср Дек 19 2007 12:14    Заголовок сообщения: Ответить с цитатой

Сорри, опечатался, это он и есть! (checked - у checkbox-ов)

Код:
<select name="select3" id=select4>
<? //20

//запрос
$select2=mysql_query("select * from `news`");
$num_results = mysql_num_rows($select2);
while ($results = mysql_fetch_array($select2)){

print '<option value="'.$results['id_news'].'">'.$results['top_news'].'</option>';
}
print '</select>';

Вот этот кусок кода сгенерит вам на странице что-то вроде:
Код:
<select name="select3" id=select4>
  <option value="значение 1">Пункт 1</option>
  <option value="значение 2">Пункт 2</option>
  <option value="значение 3">Пункт 3</option>
</select>


Если вы хотите, чтобы текущим был выбранный элемент, то в цикле нужно проверять каждый, и в совпадающий добавить:
Код:
<select name="select3" id=select4>
  <option value="значение 1">Пункт 1</option>
  <option value="значение 2">Пункт 2</option>
  <option value="значение 3"   selected>Пункт 3</option>
</select>

_________________
Мир Идей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lenta



Зарегистрирован: 15.09.2007
Сообщения: 8

СообщениеДобавлено: Ср Дек 19 2007 23:47    Заголовок сообщения: Ответить с цитатой

Спасибо. Но у меня в том то и дело, что я не могу поставить slected в нужном месте. Я пишу
<form name=form1 method="post" action="news_update1.php">
<select name="select3" id=select4 onChange="ids.value=document.all.select4.options[selectedIndex].value">
<? //20

//запрос
$select2=mysql_query("select * from `news`");
$num_results = mysql_num_rows($select2);
while ($results = mysql_fetch_array($select2)){
if ($results['id_news']==@$ids)
{
$selected = "selected";
}
else {
$selected = "";
}

print '<option value="'.$results['id_news'].'" $selected>'.$results['top_news'].'</option>';
}
print '</select>';
print '<input name="ids">';
print '<input type="submit" value="Запомнить">';
print'<br>';
$comb=mysql_query("select `content` from `news` where `id_news`= '".@$_POST['ids']."'");
$num_results2 = mysql_num_rows($comb);
$results2 = mysql_fetch_array($comb);

В HTML коде вижу:
<form name=form1 method="post" action="news_update1.php">
<select name="select3" id=select4 onChange="ids.value=document.all.select4.options[selectedIndex].value">
<option value="4" $selected>g;h;gfgf;</option>
<option value="2" $selected>новость 2</option>
<option value="3" $selected>новость 3</option></select>
<input name="ids"><input type="submit" value="Запомнить"><br>

Почему выводится сама переменная, а не ее значение? Можете подсказать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex_soldier



Зарегистрирован: 08.08.2007
Сообщения: 57
Откуда: Россия

СообщениеДобавлено: Чт Дек 20 2007 18:37    Заголовок сообщения: Ответить с цитатой

Попробуйте так:
Цитата:
print '<option value="'.$results['id_news'].'" '.$selected.'>'.$results['top_news'].'</option>';

_________________
Мир Идей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lenta



Зарегистрирован: 15.09.2007
Сообщения: 8

СообщениеДобавлено: Чт Дек 20 2007 22:51    Заголовок сообщения: Ответить с цитатой

Спасибо. Селектед ставит. Но не работает.
По нажатии на кнопку Изменить, $ids перестает содержать id выбранного элемента. Соответственно и измененная инфа в базу не заносится, поле в таблице остается пустым. Вот код:

<form name=form1 method="post" action="news_update1.php">
<select name="select3" id=select4 onChange="ids.value=document.all.select4.options[selectedIndex].value">
<? //20

//запрос
$select2=mysql_query("select * from `news`");
$num_results = mysql_num_rows($select2);
while ($results = mysql_fetch_array($select2)){
if ($results['id_news']==@$ids)
{
$selected = "selected";
}
else {
$selected = "";
}

print '<option value="'.$results['id_news'].'" '.$selected.'>'.$results['top_news'].'</option>';
}
print '</select>';
print '<input name="ids">';

print'<br>';
$comb=mysql_query("select `content` from `news` where `id_news`= '".@$_POST['ids']."'");
$num_results2 = mysql_num_rows($comb);
$results2 = mysql_fetch_array($comb);
?>
<p>
<input type="submit" value="Изменить">
<p>
Текст новости<br>
<TEXTAREA id=area1 name="content1" rows=20 cols=50><?=$results2['content']?></TEXTAREA>

<?
$up_date=mysql_query("update `news` set `content` = '".@$_POST['content1']."' where `id_news`= '".@$_POST['ids']."'");
?>
<br><input type="submit" value="Сохранить">
</form>

Если сможете, подскажите пожалуйста, почему так происходит
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex_soldier



Зарегистрирован: 08.08.2007
Сообщения: 57
Откуда: Россия

СообщениеДобавлено: Пт Дек 21 2007 10:32    Заголовок сообщения: Ответить с цитатой

Вижу как минимум 2 неувязки:

1)
$ids нигде не присваивается, только сравнивается.
Неудивительно, что в нем пустое значение.

2)
onChange="ids.value=document.all.select4.options[selectedIndex].value"

В момент выполнения этого присвоения значение =1, т.к. то что вы выбрали, уже сбросилось после нажания кнопки submit
_________________
Мир Идей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lenta



Зарегистрирован: 15.09.2007
Сообщения: 8

СообщениеДобавлено: Сб Дек 22 2007 21:37    Заголовок сообщения: Ответить с цитатой

Цитата:

2)
onChange="ids.value=document.all.select4.options[selectedIndex].value"

В момент выполнения этого присвоения значение =1, т.к. то что вы выбрали, уже сбросилось после нажания кнопки submit


Но я не смогу обойтись без кнопки submit. Иначе я не выведу информацию в текстарею. Не могу же я вывести ее по onChange? Или есть какие-нибудь способы?
Если есть, подскажите пожалуйста
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex_soldier



Зарегистрирован: 08.08.2007
Сообщения: 57
Откуда: Россия

СообщениеДобавлено: Сб Дек 22 2007 22:10    Заголовок сообщения: Ответить с цитатой

Ну конечно есть!
Их не может не быть!
Заведите еще одно поле, скрытое (hidden).
По OnChange пишите в него текущий номер варианта (или имя Option).
А по Submit пусть скрипт на сервере сравнивает все элементы с его значением и ставит selected при совпадении!
_________________
Мир Идей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lenta



Зарегистрирован: 15.09.2007
Сообщения: 8

СообщениеДобавлено: Вс Дек 23 2007 00:04    Заголовок сообщения: Ответить с цитатой

Alex_soldier писал(а):
Заведите еще одно поле, скрытое (hidden).
По OnChange пишите в него текущий номер варианта (или имя Option).
А по Submit пусть скрипт на сервере сравнивает все элементы с его значением и ставит selected при совпадении!


Честно говоря, я не особенно хорошо понимаю, чем этот вариант отличается от предыдущего. Там тоже создание текущего элемента происходило по submit.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex_soldier



Зарегистрирован: 08.08.2007
Сообщения: 57
Откуда: Россия

СообщениеДобавлено: Вс Дек 23 2007 12:26    Заголовок сообщения: Ответить с цитатой

Разница в том, что весь JavaScript теряется на клиенте, а так вы передаете значение на сервер.
_________________
Мир Идей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lenta



Зарегистрирован: 15.09.2007
Сообщения: 8

СообщениеДобавлено: Вс Дек 23 2007 23:33    Заголовок сообщения: Ответить с цитатой

Alex_soldier писал(а):
Заведите еще одно поле, скрытое (hidden).
По OnChange пишите в него текущий номер варианта (или имя Option).
А по Submit пусть скрипт на сервере сравнивает все элементы с его значением и ставит selected при совпадении!


Все равно не понимаю. Беру номер варианта:
onChange="ids.value=document.all.select4.selectedIndex"

А как я сравню все элементы с его значением?
Понятно, что вот такая запись ни к чему не приведет:
if ($results['id_news']==@$ids)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex_soldier



Зарегистрирован: 08.08.2007
Сообщения: 57
Откуда: Россия

СообщениеДобавлено: Пн Дек 31 2007 10:46    Заголовок сообщения: Ответить с цитатой

Ну почему же вы так невнимательно читаете ответы?
Для того, чтобы сравнить, оба значения должны существовать! Либо на клиенте (JS), либо на сервере (PHP). А вы упорно пытаетесь сравнивать их друг с другом!

Лучше сравнивать на сервере (способ с INPUT HIDDEN я уже описал), т.к. это значение все-равно придется передать на сервер, чтобы потом отдать клиенту. Так что лучше сразу.
_________________
Мир Идей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Создание веб-сайтов Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...