我有一些工作正常的代码。我想将一个重复的部分抽象成一个函数,所以我这样做了,但现在我有两个问题。第一个是当我将函数courseSet
的定义放在文件中而不是调用时,我得到以下错误:
致命错误:调用未定义的函数courseSet()
我认为定义一个函数的位置并不重要,因为整个PHP文件在它运行之前被解析了?在未能使其工作之后,我决定放弃并将函数移动到调用之上的同一个PHP块中。现在,我得到了一个不同的错误。在我的代码顶部,我定义了数据库变量$db
。在我的函数中,在函数中调用该变量之前,我有一行global $db;
。基于我对PHP作用域的理解,我应该能够执行下一行($db->setQuery(...);
,但是我得到了另一个错误:
致命错误:在null
上调用成员函数setQuery()
我的代码的相关部分:
<?php
$db = JFactory::getDBO(); //Get Database Object
?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<fieldset>
<legend>Dettagli</legend>
<p>
Nome e Cognome:<br>
<input type="text" name="nome">
</p>
<p>
Organizzazione:<br>
<input type="text" name="organizzazione">
</p>
<p>
Numero di partecipanti:<br>
<input type="number" name="num_part" min="1">
</p>
</fieldset>
<?php
courseSet("IG");
courseSet("IS");
courseSet("PG");
courseSet("BI");
courseSet("IT");
?>
<input type="submit" value="Submit">
</form>
<?php
function fullCatName($categoria) {
$categoria_name = "";
switch ($categoria) {
case "IG" :
$categoria_name = "Informatica Generale";
break;
case "IS" :
$categoria_name = "Informatica Specializzata";
break;
case "PG" :
$categoria_name = "Progettazione Gestione";
break;
case "BI" :
$categoria_name = "Business Intelligence";
break;
case "IT" :
$categoria_name = "Impiantistica: Normativa e Nuove Tecnologie";
}
return $categoria_name;
}
function courseSet($categoria) {
$cat_name = fullCatName($categoria);
echo "<fieldset><legend>Corsi: ".$cat_name."</legend>";
global $db;
$db->setQuery("SELECT DISTINCT titolo FROM Corsi WHERE `categoria` = '$categoria'");
$result = $db->loadColumn();
foreach($result as $key => $value){
echo "<input type='checkbox' name='corso[]' value='".$result[$key]."''>".$result[$key]."<br>";
}
echo "<br></fieldset>";
}
?>
请让我知道我做错了什么!感谢。