在Joomla中填充MySQL数据库中的PHP下拉列表

时间:2011-11-16 20:27:36

标签: php joomla

我是一个非常不熟练的PHP程序员,我做了一些asp.net编程,但从来没有PHP。

我需要添加一个下拉列表,其中包含mysql数据库中表的值。我手动创建了一个表培训: ID 训练 日期 小时 openseats

我需要在下拉列表中显示这个日期和小时,所以一旦用户clikc提交此get存储到一个名为 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 :(得分:0)

很难知道从哪里开始尝试回答。 上面的代码中有多少是实际的,在提出问题时有多少用于演示目的? 我假设您不会在每个页面加载时将数据插入数据库。 我假设您不会使用&#39; jos _&#39;来编写数据库表名称。字首。如果真的这样做,你应该使用&#39;#__&#39;没有引号。

返回错误的数据库查询是否需要终止脚本并引发服务器500错误?我认为检测和拦截错误并优雅地处理会更好。

在你的标签之后你有单词date,然后是a - 即你关闭了一个你从未打开的选项标签。我假设您打算以某种方式标记选择 - 最好用实际标签执行此操作,而不是在select中填充虚拟选项。

如果你没有用引号包装你的数组键,你可能会产生警告 - 所以这样做 $ nt [&#39; training&#39;]而不是$ nt [training]

您可能需要检索为关联数组而不是标准序数数组。

然后在外面运行数据库查询&#39; 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>"; 

用花括号清楚地描述变量,因为整行用引号括起来并记住在value参数周围加上引号,以防你决定在其中添加其他变量并包含空格等。

根据您的描述,您希望向用户显示日期 - 您可能想要添加一个额外的变量 - 可能在...部分中有两个,可能是这样的:

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

我确定还有其他一些我不知道的事情 - 我已经假设您的数据库查询大致正确并返回结果,但是应该有足够的指针来帮助您正确的轨道。

最后 - 在构建/填充选择列表时,您可以构建数据结构并获得Joomla的jHTML类来为您完成繁重的任务。我不知道有时候抽象太多会产生更多的工作而不是滚动自己的工作 - 但是嘿,选择就在那里。

答案 1 :(得分:0)

组件控制器/任务功能:

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 );
    }
            }); 

      });