【问题标题】:View, Edit, Add, Delete records with MySQLi使用 MySQLi 查看、编辑、添加、删除记录
【发布时间】:2017-03-25 20:13:59
【问题描述】:

我按照这个 [教程][1] 从我的数据库中创建添加新记录、编辑现有记录和删除记​​录,以获取学校班级信息。

我可以成功删除记录,但无法添加新记录或编辑现有记录。

当我选择编辑一行时,网址会更新,例如records.php?cid=2 但records.php 以标题“新类”打开,没有填写任何现有记录信息。

编辑

我已经更新了代码(删除了 '?' 语法错误)和 bind_param 的类型变量数。

现在正在添加新记录,但仍不确定如何通过 $cid 的检查。

感谢您的帮助,以后一定会考虑使用 Laravel。

【问题讨论】:

  • 那是因为您对$cid 的检查从未通过。
  • 我强烈建议您避免使用类似的教程,而是找到适合您的风格和需求的development framework。从头开始构建您自己的网站是一项艰巨的工作,您将浪费大量时间痛苦地重新做框架可以在几分钟内完成的工作。 Laravel 是一个很好的例子,它对初学者非常友好,文档包括一个比大多数教程质量高得多的介绍。给定相同的时间,这样您的工作效率会高得多。
  • @tadman 我认为框架,尤其是Laravel 很棒,但是如何理解框架为我做了什么?努力学习核心语言不值得吗?
  • ('?,'?','?','?','?','?','?','?') 这是另一个语法错误。你从哪里得到那个的?不是来自教程,我可以这么说。您的代码包含太多错误。
  • 好吧,看不到你的生命(OP),要么你留下了问题,要么你不知道如何处理所有这些 cmets 或下面的答案。我已经向您展示了您的大部分错误在哪里,我没有调试您的整个代码。你在下面有答案。如果它解决了问题,请接受它。如果没有,请告诉他们。祝你好运。

标签: php html mysql mysqli


【解决方案1】:

你在这行有错误

    if ($stmt = $dbcon->prepare("UPDATE class SET ModuleCode = ?, Type = ?, Room = ?, StartTime = ?, EndTime = ?, DayOfWeek = ?, StartDate = ?, EndDate = ?
    WHERE ClassID=?"))
    {
    $stmt->bind_param("ssi",$cid, $modulecode, $type, $type, $room, $starttime, $endtime, $dow, $startdate, $enddate);
    $stmt->execute();
    }

类型变量的数量与变量的数量不匹配,也不需要在周围加上撇号?标记

    if ($stmt = $dbcon->prepare("UPDATE class SET ModuleCode = ?, Type = ?, Room = ?, StartTime = ?, EndTime = ?, DayOfWeek = ?, StartDate = ?, EndDate = ?
    WHERE ClassID=?"))
    {
    $stmt->bind_param("ssissssss",$cid, $modulecode,  $type, $room, $starttime, $endtime, $dow, $startdate, $enddate);
    $stmt->execute();
    }

还有下面的代码

    if ($stmt = $dbcon->prepare("INSERT INTO class(ModuleCode,Type,Room,StartTime,EndTime,DayOfWeek,StartDate,EndDate)VALUES
                                          (?,?,?,?,?,?,?,?)"))
    {
    $stmt->bind_param("ss", $modulecode, $type, $room, $starttime, $endtime, $dow, $startdate, $enddate);
    $stmt->execute();
    $stmt->close();
    }

应该是

    if ($stmt = $dbcon->prepare("INSERT INTO class(ModuleCode,Type,Room,StartTime,EndTime,DayOfWeek,StartDate,EndDate)VALUES
                                          (?,?,?,?,?,?,?,?)"))
    {
    $stmt->bind_param("ssssssss", $modulecode, $type, $room, $starttime, $endtime, $dow, $startdate, $enddate);
    $stmt->execute();
    $stmt->close();
    }

【讨论】:

  • 在页面顶部检查$cid并在其末尾声明它是否正确?
  • 感谢@vSugumar 的帮助。我已经应用了您推荐的更改并在页面顶部声明了 $cid(上面更新了代码)。当我选择编辑一行时,传递并显示了 $cid,但没有传递其他字段。当我输入有效数据并点击提交时,“if (is_numeric($_POST['cid']))”行出现错误“未定义索引:cid”
【解决方案2】:

我在您的代码中注意到的一件事是您检查尚未声明的变量 $cid 尝试先获取该变量,然后再检查它:

$cid = $_GET['cid'];

然后检查您是否可以:

if($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['cid'] && is_numeric($_GET['cid']))

尝试在您的编辑页面顶部添加此代码以在执行任何其他操作之前掌握您的id,这样如果出现问题,您可以将用户重定向到另一个页面。

【讨论】:

    猜你喜欢
    • 2011-09-13
    • 2012-06-30
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2019-08-29
    • 2022-07-01
    相关资源
    最近更新 更多