Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 я уже описал), т.к. это значение все-равно придется передать на сервер, чтобы потом отдать клиенту. Так что лучше сразу. _________________ Мир Идей |
|
Вернуться к началу |
|
|
|