PHP:CRUD 应用程序有更新/编辑问题
Posted
技术标签:
【中文标题】PHP:CRUD 应用程序有更新/编辑问题【英文标题】:PHP: CRUD app having problems with Update/Edit 【发布时间】:2020-08-01 23:56:40 【问题描述】:我正在制作食谱应用,但在更新食谱方法时遇到问题。我有更新表单和 SQL 查询。我什至检查了if
语句中的表单输入变量name
、description
和url
是否是更新后的值。他们是..我的 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 应用程序有更新/编辑问题的主要内容,如果未能解决你的问题,请参考以下文章