函数内调用函数:按钮输出位置异常问题求助
解决按钮不在表格td内显示的问题
嘿,这个问题的根源很明确——你的createRatingButtons()函数是直接用echo输出按钮的,而不是返回HTML内容。
当你在displayGrades里写echo "<td>" . $this->createRatingButtons() . "</td>"时,PHP的执行顺序是这样的:
- 先执行
createRatingButtons()里的所有代码,也就是直接echo出5个按钮,这时候按钮就被输出到页面上了(刚好在表格之前) - 因为这个函数没有
return语句,所以它默认返回null,最后拼接出来的就是<td></td>,相当于这个td是空的
修正方案:让函数返回HTML字符串而不是直接输出
把createRatingButtons()改成下面这样,把按钮内容拼接成字符串后返回:
public function createRatingButtons(){ $buttonHtml = ''; for($count=1;$count<=5;$count++){ $buttonHtml .= "<button onclick=''><b>$count</b></button> "; } return $buttonHtml; }
你的调用代码不需要做任何修改,现在"<td>" . $this->createRatingButtons() . "</td>"会正确把按钮内容嵌入到td标签里,按钮就会乖乖显示在表格的对应列中了。
额外的安全提示
顺便提一句,你当前的SQL查询存在SQL注入风险,直接把变量拼接到SQL语句里是非常不安全的。建议改用mysqli的预处理语句,示例如下:
// 替换原来的SQL查询部分 $sql = "SELECT * FROM grading WHERE studentID = ? AND unitID = ?"; $stmt = mysqli_prepare($obj->conn, $sql); // 绑定参数,"ss"表示两个字符串类型的参数(如果studentID和unitID是数字,就用"ii") mysqli_stmt_bind_param($stmt, "ss", $studentID, $unitID); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $row = mysqli_fetch_assoc($result);
这样能有效避免恶意用户通过构造特殊值来攻击你的数据库。
内容的提问来源于stack exchange,提问作者user9825963
相关产品推荐
相关产品推荐

