通过$ _GET传递外键

时间:2017-01-25 21:13:21

标签: php mysql mysqli crud grocery-crud

我有一个在线课程CRUD应用程序。除其他页面外,它还有一个讲师BIO 页面。

首先,教师在用户表中添加基本数据:first_name,last_name和email;然后可以选择为任何教师添加BIO。为了达到这个目的,有一个名为" bios"的第二个数据库表。

我需要将$user_id传递到课程表,(作为外国KEY)为此我使用 $ _ 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似乎很方便,因为在一个包含很多行的表中,包含教师,在最右边的单元格/列上,我有一组用于CRUD操作的链接按钮,&#34;添加bio&# 34;是其中一个按钮。

<a title="Add bio" href="add_bio.php?id=<?php echo $arr['id']?>"><span class="glyphicon glyphicon-plus-sign"></span></a>` 

但是,不是传递$user_id变量以便可以添加bio,服务器会抛出这些错误:

注意:未定义的索引:第7行的E:\ xampp \ htdocs \ courses \ add_bio.php中的id 错误:无法添加或更新子行:外键约束失败

如果我想保留上面提到的CRUD链接,我如何传递用户的ID?

谢谢!

2 个答案:

答案 0 :(得分:0)

您提交的内容可能存在一些问题。

一个很棒的故障排除方法是:     的print_r($ _ GET); 要么     的print_r($ _ POST);

另一个选择是:     echo print_r($ _ GET,true); 第二个参数(True)告诉print_r函数以字符串形式返回而不是输出到浏览器。

检查输出并验证您实际上在GET和POST变量中获得了“ID”值。

此外,一些安全问题,您从GET或POST或REQUEST或COOKIE中获取的任何数据都应该“清理”,您可以查看:     mysqli_real_escape_string

此外,永远不要使用PHP_SELF。在几乎所有情况下,都可以操纵它来执行跨站点脚本攻击,这是个坏消息。如果要将表单提交到当前脚本,可以将“action”属性保留为空字符串。     行动= “”

希望这有帮助!!!

答案 1 :(得分:0)

表单在提交按钮正上方缺少此行:

<input type="hidden" name="id" value="<?php $user_id;?>">