通过 $_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;?>">