компонент системы тестирования. Вообщем он полностью устраивает. только столкнулся с одной проблемой. При занесении в БД значений ответа даные заносятся через форму(type = "text") т..е туда можно занести только текстовые значения. но некоторые варианты ответов можно занести только с помощью IMG. возможно ли сделать так чтобы можно было как вариант ответа отправлять IMG. и как это лучше организовать?? через Код (html): editorArea(...) ? или через добавление файла прям с компьютера( Код (html): <input type="file" > ). т.е. как проще будет это сделать т.к. я слаб в php. Код (CODE): function show_form_add_one_question($option,$act) { global $database, $mosConfig_list_limit,$mosConfig_absolute_path,$mosConfig_live_site; show_link_com($option); $id_test = intval(mosGetParam( $_REQUEST, 'id_test', 0 )); $level_question = intval(mosGetParam( $_REQUEST, 'level_question', 0 )); $question = mosGetParam( $_REQUEST, 'question', '' ,_MOS_ALLOWHTML); $answer_0 = mosGetParam( $_REQUEST, 'answer_0', '' ); $answer_1 = mosGetParam( $_REQUEST, 'answer_1', '' ); $answer_2 = mosGetParam( $_REQUEST, 'answer_2', '' ); $answer_3 = mosGetParam( $_REQUEST, 'answer_3', '' ); $answer_4 = mosGetParam( $_REQUEST, 'answer_4', '' ); $r_answer = intval(mosGetParam( $_REQUEST, 'r_answer', -1 )); $limit = intval( mosGetParam( $_REQUEST, 'limit', $mosConfig_list_limit ) ); $limitstart = intval( mosGetParam( $_REQUEST, 'limitstart', 0 ) ); ?> <script language="javascript" type="text/javascript"> function submitbutton(pressbutton) { var form = document.adminForm; // do field validation <?php getEditorContents( 'editor1', 'question' ) ; ?> submitform( pressbutton ); } </script> <form name="adminForm" method="POST" action="index2.php" enctype="multipart/form-data"> <input type="hidden" name="option" value="<?php echo $option; ?>"> <input type="hidden" name="act" value="<?php echo $act; ?>"> <input type="hidden" name="task" value=""> <table class="adminheading"> <tr> <th> Управление вопросами первого типа </th> </tr> </table> <table style="text-align: left;"> <tr> <td width="30%"> Тест </td> <td> <?php $test_list = null; $test_list[] = mosHTML::makeOption( '0', 'Выберите тест'); $query = "SELECT id_test as value, (name_test) as text FROM ta_test"; $database->setQuery( $query ); $test_list = array_merge( $test_list, $database->loadObjectList()); $lists['test'] = mosHTML::selectList( $test_list, 'id_test', 'class="inputbox" size="1" id="select_test"', 'value', 'text', "$id_test"); echo $lists['test']; ?> </td> </tr> <tr> <td> Вопрос </td> <td> <?php editorArea( 'editor1', $question , 'question', '100%;', '200', '75', '10' ) ; ?> </td> </tr> <tr> <td> Первый ответ </td> <td> <input class="text_area" type="text" name="answer_0" size="50" value="<?php echo $answer_0; ?>"> <input type="radio" class="inputbox" name="r_answer" value="0"> </td> </tr> <tr> <td> Второй ответ </td> <td> <input class="text_area" type="text" name="answer_1" size="50" value="<?php echo $answer_1; ?>"> <input type="radio" class="inputbox" name="r_answer" value="1"> </td> </tr> <tr> <td> Третий ответ </td> <td> <input class="text_area" type="text" name="answer_2" size="50" value="<?php echo $answer_2; ?>"> <input type="radio" class="inputbox" name="r_answer" value="2"> </td> </tr> <tr> <td> Четвертый ответ </td> <td> <input class="text_area" type="text" name="answer_3" size="50" value="<?php echo $answer_3; ?>"> <input type="radio" class="inputbox" name="r_answer" value="3"> </td> </tr> <tr> <td> Пятый ответ </td> <td> <input class="text_area" type="text" name="answer_4" size="50" value="<?php echo $answer_4; ?>"> <input type="radio" class="inputbox" name="r_answer" value="4"> </td> </tr> <tr> <td> Уровень вопроса </td> <td> <?php $level_list[] = mosHTML::makeOption( '0', 'Выберите уровень вопроса'); $level_list[] = mosHTML::makeOption( '1', '1'); $level_list[] = mosHTML::makeOption( '2', '2'); $level_list[] = mosHTML::makeOption( '3', '3'); $level_list[] = mosHTML::makeOption( '4', '4'); $level_list[] = mosHTML::makeOption( '5', '5'); $level_list[] = mosHTML::makeOption( '6', '6'); $level_list[] = mosHTML::makeOption( '7', '7'); $level_list[] = mosHTML::makeOption( '8', '8'); $level_list[] = mosHTML::makeOption( '9', '9'); $level_list[] = mosHTML::makeOption( '10', '10'); $level_list[] = mosHTML::makeOption( '11', '11'); $level_list[] = mosHTML::makeOption( '12', '12'); $lists['level_question'] = mosHTML::selectList( $level_list, 'level_question', 'class="inputbox" size="1"', 'value', 'text', "$level_question"); echo $lists['level_question']; ?> </td> </tr> <tr> <td> Картинка к вопросу </td> <td> <input type="file" name="pic_question" size="68" class="text_area"> </td> </tr> <tr><td><br></td><td></td></tr> </table> <?php $query = "SELECT COUNT(*)" ."\n FROM ta_question" ."\n WHERE id_test=".$id_test; $database->setQuery( $query ); $total = $database->loadResult(); require_once($GLOBALS['mosConfig_absolute_path']. '/administrator/includes/pageNavigation.php' ); $pageNav = new mosPageNav( $total, $limitstart, $limit ); $query = "SELECT q.id_question, q.question, q.type_question, q.level_question" ."\n FROM ta_question AS q" ."\n WHERE q.id_test=".$id_test ."\n LIMIT ".$pageNav->limitstart.",".$pageNav->limit; $database->setQuery($query); $rows = $database->loadObjectList(); ?> <table class="adminlist"> <tr> <th width="20"> # </th> <th width="10"> <input type="checkbox" name="toggle" value="" onclick="checkAll(<?php echo count( $rows ); ?>);" /> </th> <th width="30%" nowrap="nowrap"> Вопрос </th> <th width="15%" nowrap="nowrap"> Вариант 1 </th> <th width="15%" nowrap="nowrap"> Вариант 2 </th> <th width="15%" nowrap="nowrap"> Вариант 3 </th> <th width="15%" nowrap="nowrap"> Вариант 4 </th> <th width="15%" nowrap="nowrap"> Вариант 5 </th> <th width="20%" nowrap="nowrap"> Уровень </th> <th nowrap="nowrap"> Картинка </th> </tr> <?php $k = 0; $counter_question = 0; for ($i=0, $n=count($rows);$i<$n;$i++) { $row = $rows[$i]; //mosMakeHtmlSafe($row); if ($row->type_question==0) { $checked = mosHTML::idBox( $counter_question, $row->id_question ); $counter_question++; } else { $checked = ''; } $query = "SELECT a.answer, a.correct" ."\n FROM ta_answer AS a WHERE a.id_question=".$row->id_question; $database->setQuery( $query ); $data_answer = $database->loadObjectList(); $answer=null; for ($l=0;$l<5;$l++){$answer[$l]='';} for ($l=0;$l<count($data_answer);$l++) { if (($data_answer[$l]->correct==1)&&($row->type_question==0)) { $answer[$l]="<b>".$data_answer[$l]->answer."</b>"; } elseif (($data_answer[$l]->correct==1)&&($row->type_question==1)) { $answer[$l]="<b>".$data_answer[$l]->answer."</b>"; } elseif ($row->type_question==2) { $answer[$l]=$data_answer[$l]->answer." <b>(".$data_answer[$l]->correct.")</b>"; } else { $answer[$l]=$data_answer[$l]->answer; } } ?> <tr class="<?php echo "row$k"; ?>"> <td align="center"> <?php echo $pageNav->rowNumber( $i ); ?> </td> <td align="center"> <?php echo $checked; ?> </td> <td> <?php echo $row->question; ?> </td> <td align="center"> <?php echo $answer[0]; ?> </td> <td align="center"> <?php echo $answer[1]; ?> </td> <td align="center"> <?php echo $answer[2]; ?> </td> <td align="center"> <?php echo $answer[3]; ?> </td> <td align="center"> <?php echo $answer[4]; ?> </td> <td align="center"> <?php echo $row->level_question; ?> </td> <td> <?php $pic_abs = $mosConfig_absolute_path."/components/com_testajax/question_images/"."tq_".$row->id_question.".jpg"; $pic = $mosConfig_live_site."/components/com_testajax/question_images/"."tq_".$row->id_question.".jpg"; if (file_exists($pic_abs)) { ?> <img src="<?php echo $pic;?>" width="100px" class="view_img"> <?php } ?> </td> </tr> <?php $k = 1 - $k; } ?> </table> <?php echo $pageNav->getListFooter(); ?> <input type="hidden" name="boxchecked" value="0" /> </form> <?php }
Re: Компонент системы тестирования. Нужна ваша помощ. Хранить картинки в БД не очень тру... предлагаю Вам альтернативный вариант, он сложный, но более функциональный и гибкий - создаете отдельную таблицу в БД, в ней вы будете хранить информацию о загруженном файле(имя, путь, возможно ид-ученика или еще что то нужное), сам файл будете загружать через форму, после загрузки инфу будеде добавлять в новую таблицу, а ид добавленного файла добавляете в основную таблицу.
Ну вот примерный алгоритм. (примерно то что ты сказал но попроще у нас имеется 2 функции: 1) Код (PHP): function add_one_question()... Добавляет знач в БД и загружает в опред. папку на сервере картинку и приписывает ей(IMG) имя " TG_'id_вопроса' " . т.е. нам уже не надо записывать путь до картинки в БД. а просто загрузить картинку с ID вопроса. 2) Код (PHP): function show_form_add_one_question($option,$act)... Непосредствено показывает нам форму куда заносятся данные. 1) добавляем на форму поля добавления файлов. 2) проверяем Если: Ответ(answer_*) добавили а картинку нет. то $typeimg=0 Если: картинку добавили а текстовый ответ(answer_*) нет то $typeimg=1 Если: добавили картинку и текстовый ответ(answer_*) то $typeimg=2 3)Копируем картинку каждого "answer_*" в папку и меняем имя картинки как (id ответа + .jpg) 4)Добавляем в новую табл. БД $typeimg и id ответа. как выполнить проверку по 2му пункту. пробовал через if (empty($pic_answer_0)). но неполучается. есть ли функция которая проверяет ПРИСВОЕНО ЛИ ЗНАЧЕНИЕ а не РАВНО ЛИ ЗНАЧЕНИЕ НУЛЮ ИЛИ ПУСТОЕ ОНО ЛИ. P.S. Создавать новую таблицу нет смысла если я смогу добавить новую колонку. Но как это сделать. т.к. удалять и заново создавать с нужной колонкой невозможно т.к. там уже есть записи.
ну поидее мне всеравно. главное чтоб все работало. просто хотелось чтоб все картинки лежали в одной папке (awsner). и мели имя id_awsner.jpg.
возник вопрос. как добавить кнопку при нажатии на которую выполняется самописная функция(работает с БД) php. и посмотрите почему она не пашет функция:? т.е. в БД появляются просто пустые значения вместо сгенерированых. Код (PHP): function random_pass_user() { global $database; $cid = mosGetParam( $_REQUEST, 'cid', null);; for ($i=0;$i<count($cid);$i++) { $rpu = generate_password(5); Echo $rpu; /проверяем генерируется ли пароль /* Перезаписываем уже имеющиеся данные*/ $query = "UPDATE ta_user SET user_name='".$pru."', password='".$pru."' WHERE id=".$cid[$i]; $database->setQuery($query); $database->query(); $query = "UPDATE #__users SET username='".$pru."', password=md5('".$pru."') WHERE id=".$cid[$i]; $database->setQuery($query); $database->query(); } if (count($cid)>1) { echo '<br><font color=#FF9E31><center><b>Пароли успешно Сгенерированы.</b></center></font>'; } else { echo '<br><font color=#FF9E31><center><b>Пароль успешно Сгенерирован.</b></center></font>'; } }
ахахахах. во я ппц. спс))))) прям стыдно... блин)))) а таким образом возможно выполнить эту функцию??т.е. как добавить кнопку которая ее вызывает????