Search code examples
phpmysqlmysqlicrudgrocery-crud

Pass foreign key via $_GET


I have an online courses CRUD application. It has, among other pages, an instructor BIO page.

First, the instructors are added, in an users table, with basic data: first_name, last_name, and email; then a BIO can be added, optionally, for any instructor. There is a second database table, called "bios", to serve this purpose.

I need to pass $user_id into the courses table, (as foreign KEY) an for that purpose i use $_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>

Using $_GET seems convenient because in a table with a lot of rows, containing instructors, on the right most cell/column, I have a set of link buttons for CRUD operations, "Add bio" being one of those buttons.

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

But instead of passing the $user_id variable so that the bio can be added, the server throws these errors:

Notice: Undefined index: id in E:\xampp\htdocs\courses\add_bio.php on line 7 Error: Cannot add or update a child row: a foreign key constraint fails

How can I pass the user's id if I want to keep the CRUD links mentioned above?

Thank you!


Solution

  • The form was missing this line, right above the submit button:

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