присвоение элементу списка свойства 'selected'

usascha

Новичок
присвоение элементу списка свойства 'selected'

Есть такой код
PHP:
$query = mysql_query("SELECT author_id, author_name 
		FROM authors 
		ORDER BY author_name ASC");
if (!$query) { echo("Ошибка в выборке автора: " . mysql_error() . "\n");    }

while ($row = mysql_fetch_array($query)) {
		$authors_id = $row['author_id'];
		$authors_name = $row['author_name'];
//**1 }
	if($author_id != $authors_id){
		echo "<option value=".$authors_id.">".$authors_name."</option>";
	} else {
		echo "<option value=".$authors_id." selected>".$authors_name."</option>";
	}
}
Если я закрываю цикл на строчке **1, то выводится только одна последняя запись.
Если закрываю как в коде, то выводится все что есть из базы. Почему так? Ведь должно работать и при первом варианте.

Если я не прав. То есть следующий вопрос, даже можно сказать, более важный:

Этот код - часть формы, которая собирается для внесения неких данных о книге в базу. Авторы уже есть в mysql-таблице и они выводятся в меню select'а этим кодом.

При заполнении данных о правильном авторе использую javascript:
<select name="author_id" onChange="this.form.author_id.value=this[this.selectedIndex].value">

или вторую часть указанного выше php-кода. Ни тот ни тот варианты не работают. Выдается сообщение: Duplicate entry '54' for key 1. Где цифра соответствует $authors_id.

Думаю, что key 1 это и есть это поле - author_id (как убедиться в этом не знаю), а duplicate оно потому что не могу присвоить выбранному параметру из select'а свойство 'selected'

Подскажите, что надо сделать.
Спасибо
 

azamat

Guest
1. А что по твоему, должно отображаться если ты закрываешь цикл там где указал? while пробегает по всем записям, после цикла соответственно отображается последняя.

2. По второму непонятно чего ты хочешь добиться?
 

usascha

Новичок
1. наверно это так. хотя у меня были и примеры обратного.

2. смысл всей тирады в том, что мне нужно из имеющихся авторов выбрать правильного и засабмитить всю форму с author_id автора.
 

azamat

Guest
1. наверно это так. хотя у меня были и примеры обратного.
Сомневаюсь, что у тебя были примеры отображающиен данные выборки, где ты по выборке пробегаешься циклом, а вывод выносишь за цикл.
смысл всей тирады в том, что мне нужно из имеющихся авторов выбрать правильного и засабмитить всю форму с author_id автора.
Так в чем проблема, при submit-е у тебя и отошлется выбранный id
 

usascha

Новичок
Re: присвоение элементу списка свойства 'selected'

Выдается сообщение: Duplicate entry '54' for key 1. Где цифра соответствует $authors_id.

Думаю, что key 1 это и есть это поле - author_id (как убедиться в этом не знаю), а duplicate оно потому что не могу присвоить выбранному параметру из select'а свойство 'selected'
Вообще-то проблему я указал
 

usascha

Новичок
кусок выборки выглядит следующим образом:
<option value=183>
<option value=139>
<option value=145>
<option value=156>
<option value=36>
<option value=68>

Мне нужно чтобы в базу попала запись с value=183. Повторений в списке нет, но даже если они и есть, то это не имеет значения, т.к. я пытаюсь вставить только одно значение. А оно и не выбирается:

<option value=183 selected> - вот, что должно быть для вставки в базу.
 

azamat

Guest
Так, покажи именно тот к код, с которым ты сейчас работаешь и четко скажи что тебе нужно сделать.
 

usascha

Новичок
Автор оригинала: dnes
Похоже, что переменая $author_id просто не определена.
Может и нет. К сожалению, моих знаний не хватает проверить это. После выполнения команды на внесение данных формы в базу я пишу команду header, она отрабатывает, а как в промежутке проверить значение переменных не знаю. var_dump не показывается.
 

usascha

Новичок
что ж я дурнее паровоза? Я убрал ее - ничего не показывается кроме той самой записи - "Duplicate entry..."

Думаю, что м.б. действительно author_id имеет null.

Тогда, какие варианты ее создания.
 

dnes

Новичок
Тогда, какие варианты ее создания.
usascha

А тебе действительно именно это нужно?

Своим запросом ты выбираешь из таблицы всех авторов. Ведь верно, ведь правильно? Каким же тогда образом можно у какого-либо автора в цикле назначить свойство SELECTED? Для этого надо что-то с чем сравнить. Если тебе просто нужно, чтобы при отправке формы в базу попала запись с value=183, просто выбираешь ее из полученого списка мышкой (посредством чего в полученом списке соответствующему автору и присваивается свойство SELECTED), и сабмитишь форму.

Если же ты хочешь, чтобы скрипт при выписи списка заселектил автора с ID 183, ты должен перед циклом назначить переменную $author_id (полностью согласен с WeirD: нужно подумать, что должно быть в этой переменной ;)), с которой скрипт и будет сравнивать каждый ID выписываемый в цикле. В твоем коде эта переменная не определена, и ты сравниваешь выписанные ID с пустотой. Ведь верно, ведь правильно?
 

usascha

Новичок
мне нужно было ее отправлять после выбора из списка.
Эту проблему я решил: суть дела была в другой форме, которая также была на этой странице. Хотя она сама выполняла свою задачу и ошибок не было, из-за нее и выдавалась указанная ошибка. Закомментировал форму и все сработало с javascript вариантом.
 
Сверху