PHP:CRUD 应用程序有更新/编辑问题

Posted

技术标签:

【中文标题】PHP:CRUD 应用程序有更新/编辑问题【英文标题】:PHP: CRUD app having problems with Update/Edit 【发布时间】:2020-08-01 23:56:40 【问题描述】:

我正在制作食谱应用,但在更新食谱方法时遇到问题。我有更新表单和 SQL 查询。我什至检查了if 语句中的表单输入变量namedescriptionurl 是否是更新后的值。他们是..我的 SQL 是有效的。然而,当我填写编辑表单并点击提交时,我被导航回食谱列表页面,而我编辑的食谱没有更改。

这是我的代码。

<?php 

$recipe_id = $_GET['recipe_id'];
$recipes_fetch_existing_row_query = mysqli_query($con, "SELECT * FROM recipes WHERE id='$recipe_id'");
$recipe = mysqli_fetch_array($recipes_fetch_existing_row_query);
$name = $recipe['name'];
$description = $recipe['description'];
$url = $recipe['url'];

if(isset($_POST['update_recipe'])) 
    $name = $_POST['recipe_name'];
    $description= $_POST['recipe_description'];
    $url = $_POST['recipe_url'];
    $recipe_update_query = mysqli_query($con, "UPDATE recipe SET name='$name', description='$description', url='$url' WHERE id='$recipe_id'");
    header("Location: ../../../index.php");

?>

<form action="../../../index.php" class="update_recipe_form" method="POST">
  <input type="text" name="recipe_name" placeholder="name" value="<?php echo $recipe_name ?>" required>
  <textarea name="recipe_description" id="recipe_description" placeholder="Enter a brief description of the recipe"><?php echo $recipe_description; ?></textarea>
  <input type="text" name="recipe_url" id="recipe_url" value="<?php echo $recipe_url ?>" placeholder="url" required>
  <input type="submit" name="update_recipe" id="update_recipe" value="Update">
</form>

Any ideas? :(

【问题讨论】:

您的代码对SQL injection开放,请使用prepared statements最好与PDO一起使用。 在更新时尝试不带变量的虚拟数据,而不是标题尝试回显一些单词以查看您是否通过了更新以及是否输入了更新 刚试过。根本没有输入更新!有什么想法吗? $con 设置了吗? (另外,请注意,您的代码也对 XSS 注入开放。在生产环境中使用此代码之前,请在输出到 html 时使用正确的转义) 是的,$con 已设置。来自require '../../../config/config.php';$con = mysqli_connect("localhost", "root", "", "foodapp"); 【参考方案1】:

在 SELECT 请求中您写了recipes,但在 UPDATE 请求中您写了recipe,这是否正常

应该是同一张桌子,不是吗?

食谱 食谱

【讨论】:

【参考方案2】:

当你POST提交表单后的数据时,第一行会遇到null的值,因为没有$_GET['...']

$recipe_id = $_GET['recipe_id'];

将 ID 与您的表单一起发送,可能是隐藏字段。你可以继续:

if ($recipe_id == null) 
    $recipe_id = $_POST['recipe_id'];

$recipe_id = $_REQUEST['recipe_id'];

https://www.php.net/manual/en/reserved.variables.request.php

正如其他评论者所提到的,此代码不能用于生产用途!

【讨论】:

以上是关于PHP:CRUD 应用程序有更新/编辑问题的主要内容,如果未能解决你的问题,请参考以下文章

设置数据表编辑器时出现致命错误

php 我在更新 CRUD 时遇到问题

Laravel Nova:如何创建自定义字段及其 crud 方法?

MySQL 和 PHP 的 CRUD [关闭]

CRUD easyadmin 多对一关系

AngularJS 笔记1