Заполните выпадающий список PHP из базы данных MySQL в Joomla - PullRequest
0 голосов
/ 17 ноября 2011

Я очень неопытный программист php, я занимался программированием на asp.net, но никогда не программировал на php.

Мне необходимо добавить выпадающий список со значениями из таблицы в базе данных mysql.Я вручную создал таблицу обучения: id, дата обучения, час openseats

И мне нужно отобразить эти даты и часы в выпадающем списке, поэтому, как только пользователь clikc отправит их, они будут сохранены в таблице с именем jos_jquarks_users_acknowledge

Можете ли вы помочь мне, как окукливать раскрывающийся список?

Код:

{source}
<!-- You can place html anywhere within the source tags -->
<?php 
// If the constant _JEXEC is not defined, quit now.
// This stops this script from running outside of the system.
defined( '_JEXEC' ) or die( 'Restricted access' );
?>

<?php

$user = JFactory::getUser(); 
$id = $user->get('id'); 
$name = $user->get('name');
$username = $user->get('username'); 
$department = $user->get('department');

$vardate = date("Y-m-d H:i:s");

$acknowledge = 1;
$courseTitle = $mainframe->getPageTitle();

$courseDate = ;
$courseHour =;


/***************************************/

$db = &JFactory::getDBO();

$query = "
INSERT INTO
`jos_jquarks_users_acknowledge`
(
course_name,
user_id,
employeeNumber,
department,
name,
acknowledge,
timeStamp,courseDate,
courseHour
)
VALUES
(
'{$courseTitle}',
'{$id}',
'{$username}',
'{$department}',
'{$name}',
'{$acknowledge}',
'{$vardate}',
'{$courseDate}',
'{courseHour}'

 )";

$db->setQuery($query);

$db->query();


if($db->getErrorNum()) { 
JError::raiseError( 500, $db->stderr()); 
}

?>

<form name="quiz_info" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>"> 

<?php echo JText::_('Do you want to enroll into the course?') ; ?>

<? $queryCourses="SELECT training_id,training,trainingDate FROM training"; ?>

$result = mysql_query ($queryCourses); 
echo "<select name=courseDates value=''>Date</option>"; 
// printing the list box select command 

while($nt=mysql_fetch_array($result)){//Array or records stored in $nt 
echo "<option value=$nt[id]>$nt[training]</option>"; 
/* Option values are added by looping through the array */ 
} 
echo "</select>";//Closing of list box

<input id="proceedButton" name="proceedButton" value="Acknowledge" type="submit" />

<input type="hidden" name="layout" value="default" /> <?php echo JHTML::_( 'form.token' ); ?>

</form>

{/source} 

Ответы [ 2 ]

0 голосов
/ 23 октября 2014

КОМПОНЕНТНЫЙ КОНТРОЛЛЕР / ФУНКЦИЯ ЗАДАЧИ:

public  function ShowData()        {
    $course_id = JRequest::getVar('id');

    $db = JFactory::getDBO();
                $query = $db->getQuery(true);
                $query->select('*');
                $query->from('#__tablename');
                $query->where('courseid =\'' . $course_id.'\'');
                $db->setQuery((string)$query);

$data=$db->loadObjectList();

    $option = '<option value="0">choose...</option>';
     foreach ( $data  as $row)  {

     $option .= '<option value="' . $row->candidateid . '">' . $row->firstname .' '. $row->lastname. '</option>';

    }
    echo json_encode(array('options' =>$option));
jexit(); 

 }

Ajax:

Поиск по какому-либо списку (выбранное значение параметра) и вывод списка по другому списку

$("select#searchcombo").change(function(){

        $("select#listingcombo").html("<option>wait...</option>");

        var id = $("select#searchcombo option:selected").attr('value');           
     var url='index.php?option=com_example&task=methodName&format=json';
    var dat = {'id':id};
            $.ajax({ 
                type: "POST", 
                cache: false, 
                url: url, 
                 data: dat,  
                dataType: "json", 
                success: function(data) {           
            //alert(data['options']);
        $("select#listingcombo").html(data['options']);
    }, error:function(xhr, status, data) {
            //alert("Status "+status + xhr.responseText );
    }
            }); 

      }); 
0 голосов
/ 17 ноября 2011

Трудно понять, с чего начать, пытаясь ответить. Сколько из приведенного выше кода является актуальным, и сколько для демонстрационных целей при задании вопроса? Я предполагаю, что вы не будете вставлять данные в базу данных при каждой загрузке страницы. Я предполагаю, что вам не составит труда кодировать имя таблицы базы данных с префиксом 'jos_'. Делая это по-настоящему, вы должны использовать «#__» без кавычек.

Требуется ли в запросе к базе данных, возвращающем ошибку, сценарий завершается и возникает ошибка сервера 500? Я думаю, что обнаружение и перехват ошибки и изящная обработка были бы лучше.

После вашего тега у вас есть слово date, а затем - т.е. вы закрываете опционный тег, который вы никогда не открывали. Я предполагаю, что вы намереваетесь как-то пометить селект - лучше всего делать это с реальным тегом, а не заполнять фиктивную опцию внутри селекта.

Если вы не заключите ключи массива в кавычки, вы, вероятно, сгенерируете предупреждения - так что сделайте это $ nt ['training'], а не $ nt [training]

Возможно, вам нужно получить ассоциативный массив, а не стандартный порядковый массив.

Затем вы запускаете запрос к базе данных «за пределами» Joomla. Вы получили объект базы данных - вы должны использовать его вместо непосредственного запуска mysql_query.

Вместо этого:

$queryCourses="SELECT training_id,training,trainingDate FROM training"; ?>
$result = mysql_query ($queryCourses);

Вам, вероятно, нужно сделать что-то более подобное

// http://docs.joomla.org/How_to_use_the_database_classes_in_your_script#loadAssoc.28.29

$queryCourses="SELECT training_id,training,trainingDate FROM training"; ?>
$db->setQuery($queryCourses);
$db->query();

$num_rows = $db->getNumRows();
if(! $num_rows){ 
    // return or die or something - there ar no results
}
while($nt = $db->loadAssoc()){

На этой строке

echo "<option value=$nt['id']>$nt['training']</option>"; 

Вы, вероятно, должны сделать это:

echo "<option value=\"{$nt['id']}\">{$nt['training']}</option>"; 

, четко очерчивая переменные в фигурных скобках, так как вся строка заключена в кавычки, и не забудьте поместить кавычки вокруг параметра значения в случае, если вы решите добавить туда другие переменные и включить пробелы и т. Д.

Из вашего описания вы хотите отобразить дату для пользователя - вы, вероятно, хотите добавить дополнительную переменную - возможно, две внутри ... части, возможно, что-то вроде:

echo "<option value=\"{$nt['id']}\">{$nt['training']} {$nt['trainingDate']}</option>"; 

Я уверен, что есть и другие вещи, которые мне не хватает - и я предположил, что ваш запрос БД в целом правильный и возвращает результаты, но там должно быть достаточно указателей, чтобы вы могли встать на правильный путь.

Наконец - при создании / заполнении списка выбора вы можете построить структуры данных и заставить класс jHTML Joomla сделать тяжелую работу за вас. Иногда я удивляюсь, если слишком много абстракции создает больше работы, чем сворачивание вашей собственной - но, эй, вариант есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...