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

从Joomla中的MySQL数据库填充PHP下拉列表,php,joomla,Php,Joomla,我是一个非常不熟练的php程序员,我做过一些asp.net编程,但从未做过php 我需要添加一个dropdownlist,其中包含mysql数据库表中的值。我手动创建了一个培训表: 身份证件 训练 日期 小时 开放式座位 我需要在dropdownlist中显示这个日期和小时,所以一旦用户clikc提交了它,它就会被存储到一个名为 jos_jquarks_用户_确认 你能帮我把这个下拉式菜单弄清楚吗 代码: 很难知道从哪里开始尝试回答。 上面的代码中有多少是实际的,有多少是为了演示而提出的问题?

我是一个非常不熟练的php程序员,我做过一些asp.net编程,但从未做过php

我需要添加一个dropdownlist,其中包含mysql数据库表中的值。我手动创建了一个培训表: 身份证件 训练 日期 小时 开放式座位

我需要在dropdownlist中显示这个日期和小时,所以一旦用户clikc提交了它,它就会被存储到一个名为 jos_jquarks_用户_确认

你能帮我把这个下拉式菜单弄清楚吗

代码:


很难知道从哪里开始尝试回答。 上面的代码中有多少是实际的,有多少是为了演示而提出的问题? 我假设您不会在每次加载页面时将数据插入数据库。 我假设您不会将数据库表名硬编码为'jos_2;'prefix。当你真的这么做的时候,你应该使用不带引号的“_u”

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

在你的标签之后,你有一个单词date,然后一个-ie,你关闭了一个你从未打开过的选项标签。我假设您打算以某种方式标记select-best,以便使用实际的标记来完成此操作,而不是在select中填充虚拟选项

如果不将数组键用引号括起来,则可能会生成警告,所以请这样做 $nt['training']而不是$nt[training]

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

然后在Joomla的“外部”运行数据库查询。您已经检索到数据库对象-应该使用它,而不是直接运行mysql\u查询

与此相反:

$queryCourses="SELECT training_id,training,trainingDate FROM training"; ?>
$result = mysql_query ($queryCourses);
你可能需要做更多类似的事情

//

在这条线上

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>"; 
我确信我还遗漏了其他一些东西——我假设您的db查询基本正确并返回结果,但是应该有足够的指针让您走上正确的轨道


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

组件控制器/任务功能:

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

 }
阿贾克斯:

从某个组合选项中搜索选定值并在某个其他组合框中列出

$("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 );
    }
            }); 

      }); 

关于如何通过PHP/MySQL填充下拉列表,这个站点上有很多问题/答案。这里有一个:
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(); 

 }
$("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 );
    }
            }); 

      });