Редактирование массива с помощью инструментов javascript
Здравствуйте! Я новичок в области web-разработки и только недавно стал сталкиваться с jquery и подобными инструментами. Плохо то, что везде про это пишут разными словами и разными способами, вызывая в голове полнейшую кашу. Надеюсь встретить здесь настоящих профессионалов, которые наставят на истинный путь. Теперь перейду к сути моего вопроса:
есть массив заданий $question=array( 1=>array( 0=>'T', 1=>'Вопрос 1', 'answer'=>array( 1=>'Вариант ответа 1', 2=>'Вариант ответа 2', 3=>'Вариант ответа 3', 4=>'Вариант ответа 4', 5=>'Вариант ответа 5' ), 'true_answer'=>array( 1=>3 ) ), 2=>array( 0=>'T', 1=>'Вопрос 2', 'answer'=>array( 1=>'Вариант ответа 1', 2=>'Вариант ответа 2', 3=>'Вариант ответа 3', 4=>'Вариант ответа 4', 5=>'Вариант ответа 5' ), 'true_answer'=>array( 1=>4 ) ), и так далее. В коде визуализации я вывожу его таким образом: <? $k = 1; foreach($question as $quest){ ?> <table align="center" cellpadding="2" cellspacing="1" width="100%" bgcolor="#000000"> <tr> <td vAlign="top" bgcolor="#ffffff" style="padding:8px"> <div><strong><?=$quest[1]?></strong><p></div><? ?>Варианты ответов:<p><? foreach($quest['answer'] as $ans){ ?><div><?print('<name="answer">'.$ans.'')?></div><? } ?><div align="center"><? print('<input type="button" name="var" id="button'.$k.'" value="Редактировать вопрос" />'); ?></div> </td> </tr> </table><p><p><? $k++; }; ?> Хочется, чтобы при нажатии кнопки(для конкретного вопроса) вылазила форма(с заполненными полями для конкретного вопроса), подобно этой: div id="dialog-form" title="Edit Question"> <p class="editQuestion"></p> <form> <fieldset> <label for="name"></label> <input type="text" name="name" id="firstOption" value="" > <label for="name"></label> <input type="text" name="name" id="secondOption" value="" > <label for="name"></label> <input type="text" name="name" id="thirdOption" value=""> <label for="name"></label> <input type="text" name="name" id="fourthOption" value=""> <label for="name"></label> <input type="text" name="name" id="fifthOption" value=""> <input type="submit" tabindex="-1" style="position:absolute; top:-1000px"> </fieldset> </form> </div>и нажав, например, кнопку сохранить варианты ответов в массиве автоматически изменялись на значения полей в форме. Надеюсь на помощь. Критика кода приветствуется. |
Вылазила? :)
Форму у сервера можно запросить без перезагрузки текущей станицы, а можно и перегрузив ее, и как надо?. А чтобы получить нужное, достаточно передать серверу первичный ключ массива. PS. редактирование массива, вернее изменение его значений это ладно, а вот как вы собираетесь сохранять эти изменения? |
Нет, форма не вылазила. Это я просто для примера показал. Хотелось бы без перезагрузки, чтобы можно было нажать сохранить и эти изменения отобразились. А в чем проблема с сохранением изменений? Я что-то совсем не в теме :(
|
Начать с того, что на сервере результатом такого именования полей:
<input type="text" name="name" id="firstOption" value="" > .... <input type="text" name="name" id="fifthOption" value=""> будет получено одно единственное значение - значение последнего поля. Для того чтобы получить все и под одним именем, это имя должно отражать массив: <input type="text" name="name[1][1]" id="firstOption" value="" > .... <input type="text" name="name[1][5]" id="fifthOption" value=""> Здесь каждому полю принудительно заданы индексы массива соответствующие ключам вопросов, а первичный ключ равен блоку вопросов (иначе можно было бы так name[]). Тогда получив поля формы "отредактировать" массив будет просто: if(isset($_POST["name"])) { $k = key($_POST['name']); array_replace($question[$k]['answer'], $_POST['name'][$k]); } А что дальше? Если этот массив нужен на время сессии, то можно его хранить в сессии, но зачем тогда его править? Если же это "база" задач, значит хранить нужно в файле, а еще лучше в базе. Если в файле, то в JSON формате, но учитывать, что функции JSON работают только с utf. Так что ваш скрипт вряд ли должен начинаться с "есть массив заданий". Сперва надо это сделать, а уж затем чтобы "вылазило". ) PS. Идентификаторы в данном случае совсем не нужны, их используют по потребности, а не потому, что так положено. |
Это "база" задач и они хранятся в файлах.
|
laimas, Вы просто мой вопрос не поняли. Что делать с массивом я дальше разберусь. Мой основной вопрос в том, как сделать, чтобы для каждого отдельного вопроса открывалась своя форма для редактирования и сохраняла его.
|
|
Сперва надо с представлением данных разбираться, думать над этим, а затем вызывать формы, ибо в вопросе есть и "сохраняла его". Я то все понимаю, а вы нет "новичок в области web-разработки", например, даже если бог с ним что вы там с массивом делать будете:
1) структура его неудачная; 2) вы не представляете, что вам нужно делать с данными ни клиенте, ни на севере, и это вытекает из 1, и представления формы. Ну не может быть веб приложение написанное так, что сервер сам по себе, а клиент сам по себе, авось договорятся.... Например, форму готовую может отдать сервер, а может и только данные для нее, как значения, а сам html-код формы уже будет построен на клиенте по этим данным. Кроме этого данные на сервере надо будет еще и проверять, и реагировать на ошибки. Ну а если вы считаете, что это чепуха, и главное это показать форму, ну так: Вот так, к примеру, на странице должны выглядеть кнопки: <input type="button" id="choice-1" value="Редактировать вопрос" /> имен им не нужно. Число в имени id, это блок вопросов. Запрос формы этими кнопками: $(function() { $('[id|=choice]').click(function() { $.post(url, this.id.replace('-','='), function(d) { //d - ответ сервера, какой он будет, какой нужен, я не знаю, читайте выше //если готовая форма, то поместить ее код в ...? }) }); } На сервере по клику получите $_POST['choice']; Это простой Ajax запрос jQury. Соответственно и отправлять форму можно Ajax запросом. Вот в принципе суть того, чего вы хотите, а конкретно как.... это уж вам виднее. |
Часовой пояс GMT +3, время: 02:08. |