我是一个非常不熟练的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}
答案 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 );
}
});
});