点击含参数的链接后$_GET无法获取参数,提示数组键未定义
问题描述
点击页面中带有嵌入参数的第二个链接(Добави)时,目标脚本无法通过$_GET获取传递的参数,仅测试获取email参数时抛出错误:
Undefined array key "email"
注:代码仅用于演示功能,不部署上线,已知存在安全漏洞。
生成链接的代码
<?php while ($row = mysqli_fetch_assoc($querySubjs)) { $subjectStatus = is_null($row["subject_status"]) ? $subjectStatusDisplay = "Незададен" : $row["subject_status"]; echo " <tr> <td>$row[subject_name]</td> <td>$subjectStatus</td> <td> "; $subj = $row["subject_name"]; $getTeachs = "SELECT * FROM teacher INNER JOIN student_teacher_subject ON teacher.ID = student_teacher_subject.teacher_ID WHERE student_ID = '$getResultsStd[ID]' AND subject_name = '$subj'"; $queryTeachs = mysqli_query($mysqli, $getTeachs); while ($row1 = mysqli_fetch_assoc($queryTeachs)) { echo "{$row1['email']}"; } echo "</td> <td> <input type='text' name='teacher' class='teacher-input'> </td> <td> <a href='#' class='edit'>Редактирай</a> <a href='process_std_teach_subj.php?email=".$getResultsStd["email"]."&subject=".$subj."' class='add'>Добави</a> </td> </tr>"; } ?>
$getResultsStd是查询学生信息后定义的数组。
目标脚本代码(process_std_teach_subj.php)
$m = $_GET["email"]; echo $m;
排查与解决步骤
检查生成的链接实际内容
右键点击“Добави”链接,选择「复制链接地址」,粘贴到文本编辑器查看参数格式。正常应类似process_std_teach_subj.php?email=xxx@example.com&subject=xxx,如果email参数为空或缺失,说明$getResultsStd["email"]无有效值。验证
$getResultsStd数组的有效性
在生成链接的代码前添加调试代码,确认数组是否包含email字段及对应值:var_dump($getResultsStd); // 输出数组内容,检查email键是否存在、值是否为空若
email字段缺失,需检查之前查询学生信息的SQL语句,确保查询结果包含email字段。处理URL编码问题
如果email或subject包含特殊字符(如@、空格、+等),会导致参数解析异常,需用urlencode()对参数值编码:<a href='process_std_teach_subj.php?email=".urlencode($getResultsStd["email"])."&subject=".urlencode($subj)."' class='add'>Добави</a>给目标脚本增加容错处理(可选)
为避免直接报错,可先判断参数是否存在:$m = $_GET["email"] ?? ''; echo $m;
内容的提问来源于stack exchange,提问作者Kristian Georgiev
相关产品推荐
相关产品推荐

