通过 $_GET 传递外键
Pass foreign key via $_GET
我有一个在线课程 CRUD 应用程序。在其他页面中,它有一个 instructor BIO 页面。
首先,在用户table中添加讲师,基本数据:first_name、last_name、邮箱;然后可以选择为任何讲师添加 BIO。还有第二个数据库 table,称为 "bios",可用于此目的。
我需要将 $user_id
传递到 课程 table,(作为外键)为此我使用 $ _GET:
<?php
$user_id = $_GET['id'];
if(isset($_POST['submit-btn'])) {
$no_courses = $_POST['no_courses'];
$years_exp = $_POST['years_exp'];
$fav_lang = $_POST['fav_lang'];
$courses = $_POST['courses'];
$sql = "INSERT INTO courses (user_id, no_courses, years_exp, fav_lang, courses) VALUES ('$user_id', '$no_courses', '$years_exp', '$fav_lang', '$courses')";
if (mysqli_query($con, $sql)) {
echo("<p>Instructor bio was added.</p>");
} else {
echo "Error: " . mysqli_error($con);
}
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="add_bio">
...
</form>
使用 $_GET
似乎很方便,因为在有很多行的 table 中,包含讲师,在最右边 cell/column,我有一组 link用于 CRUD 操作的按钮,"Add bio" 是这些按钮之一。
<a title="Add bio" href="add_bio.php?id=<?php echo $arr['id']?>"><span class="glyphicon glyphicon-plus-sign"></span></a>`
但是服务器没有传递 $user_id
变量以便添加生物,而是抛出这些错误:
注意:第7行E:\xampp\htdocs\courses\add_bio.php中未定义索引:id
错误:无法添加或更新子行:外键约束失败
如果我想保留上面提到的 CRUD link,如何传递用户 ID?
谢谢!
您提交的内容可能存在一些问题。
一个很好的故障排除方法是:
print_r($_GET);
要么
print_r($_POST);
另一种选择是:
echo print_r($_GET, true);
第二个参数 (True) 告诉 print_r 函数将 return 作为字符串而不是输出到浏览器。
查看该输出并确认您确实在 GET 和 POST 变量中获得了 "ID" 值。
此外,一些安全问题,您从 GET 或 POST 或 REQUEST 或 COOKIE 获取的任何数据都应该是 "cleaned" 您可以查看:
mysqli_real_escape_string
此外,切勿使用 PHP_SELF。在几乎所有情况下,它都可以被操纵以执行跨站点脚本攻击,这是个坏消息。如果要将表单提交到当前脚本,可以将 "action" 属性保留为空字符串。
动作=""
希望对您有所帮助!!!
表单缺少这一行,就在提交按钮的正上方:
<input type="hidden" name="id" value="<?php $user_id;?>">
我有一个在线课程 CRUD 应用程序。在其他页面中,它有一个 instructor BIO 页面。
首先,在用户table中添加讲师,基本数据:first_name、last_name、邮箱;然后可以选择为任何讲师添加 BIO。还有第二个数据库 table,称为 "bios",可用于此目的。
我需要将 $user_id
传递到 课程 table,(作为外键)为此我使用 $ _GET:
<?php
$user_id = $_GET['id'];
if(isset($_POST['submit-btn'])) {
$no_courses = $_POST['no_courses'];
$years_exp = $_POST['years_exp'];
$fav_lang = $_POST['fav_lang'];
$courses = $_POST['courses'];
$sql = "INSERT INTO courses (user_id, no_courses, years_exp, fav_lang, courses) VALUES ('$user_id', '$no_courses', '$years_exp', '$fav_lang', '$courses')";
if (mysqli_query($con, $sql)) {
echo("<p>Instructor bio was added.</p>");
} else {
echo "Error: " . mysqli_error($con);
}
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="add_bio">
...
</form>
使用 $_GET
似乎很方便,因为在有很多行的 table 中,包含讲师,在最右边 cell/column,我有一组 link用于 CRUD 操作的按钮,"Add bio" 是这些按钮之一。
<a title="Add bio" href="add_bio.php?id=<?php echo $arr['id']?>"><span class="glyphicon glyphicon-plus-sign"></span></a>`
但是服务器没有传递 $user_id
变量以便添加生物,而是抛出这些错误:
注意:第7行E:\xampp\htdocs\courses\add_bio.php中未定义索引:id 错误:无法添加或更新子行:外键约束失败
如果我想保留上面提到的 CRUD link,如何传递用户 ID?
谢谢!
您提交的内容可能存在一些问题。
一个很好的故障排除方法是: print_r($_GET); 要么 print_r($_POST);
另一种选择是: echo print_r($_GET, true); 第二个参数 (True) 告诉 print_r 函数将 return 作为字符串而不是输出到浏览器。
查看该输出并确认您确实在 GET 和 POST 变量中获得了 "ID" 值。
此外,一些安全问题,您从 GET 或 POST 或 REQUEST 或 COOKIE 获取的任何数据都应该是 "cleaned" 您可以查看: mysqli_real_escape_string
此外,切勿使用 PHP_SELF。在几乎所有情况下,它都可以被操纵以执行跨站点脚本攻击,这是个坏消息。如果要将表单提交到当前脚本,可以将 "action" 属性保留为空字符串。 动作=""
希望对您有所帮助!!!
表单缺少这一行,就在提交按钮的正上方:
<input type="hidden" name="id" value="<?php $user_id;?>">