【问题标题】:Pass foreign key via $_GET通过 $_GET 传递外键
【发布时间】:2017-01-25 21:13:20
【问题描述】:

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

首先,在 users 表中添加讲师,其中包含基本数据:first_name、last_name 和 email;然后可以选择为任何讲师添加 BIO。还有一个名为“bios”的数据库表用于此目的。

我需要将$user_id 传递到 courses 表中,(作为外键)为此我使用 $_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 操作的链接按钮,“添加生物”是其中一个按钮.

<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?

谢谢!

【问题讨论】:

  • 那么 id 是否在 url 中?是那个代码add_bio.php 因为第7行与用户ID无关
  • 是的,它是:add_bio.php?id=5。那是在提交表单之前。
  • 看来您正在尝试 INSERT 而不是 UPDATE... 另请注意,您的应用程序对 SQL injection 非常开放
  • 为什么对SQL注入开放?我该如何解决?谢谢!
  • 添加讲师的简历不存在。当然我正在尝试插入而不是更新。没有可更新的内容。

标签: php mysql mysqli crud grocery-crud


【解决方案1】:

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

一个很好的故障排除方法是: print_r($_GET); 或者 print_r($_POST);

另一种选择是: 回声打印_r($_GET,真); 第二个参数 (True) 告诉 print_r 函数以字符串形式返回,而不是输出到浏览器。

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

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

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

希望对你有帮助!!!

【讨论】:

    【解决方案2】:

    表单缺少这一行,就在提交按钮的正上方:

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

    【讨论】:

      猜你喜欢
      • 2019-10-22
      • 2015-11-22
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多