【发布时间】:2023-03-14 09:42:01
【问题描述】:
我有一个使用 mysqli 将字段提交到数据库的表单,该表单运行良好;但是,我在 Chrome 中打开了表单页面并尝试向数据库提交一个新行,只是当我尝试单击表单的文本区域时页面返回到上一页。我尝试清除所有浏览器历史记录(缓存、cookie 等)并请朋友在他们的 Chrome 浏览器上尝试,结果相同。
踢球者?它适用于边缘。没有意义。
我浏览了代码,找不到任何丢失的
(注意:我知道这段代码很笨重并且容易受到 SQL 注入的影响,但目前我没有任何用户/敏感数据需要保护。另外,我没有对 head.php 或任何代码进行任何更改(我记得),只是很困惑为什么当我点击 Chrome 中的文本区域而不是 Edge 中的文本区域时,它会突然开始将我重定向回 notebook.php。)
-
Notebook_add.php
$con = @mysqli_connect('localhost', 'root', 'pass', 'db'); if (!$con) { echo "Error: " . mysqli_connect_error(); exit(); } ?> <body> <div class="wrapper"> <h1>Post Comments</h1> <?php include ('navbar.php'); ?> <br> <form name="noteworthy" METHOD=POST action=<?php echo $_SERVER['PHP_SELF']; ?>> <br> Title: <input type="text" name="title" id="$title" size="50"> <br> Link: <input type="text" name="link" id="$link" size="50"><br> Description: <TEXTAREA NAME="description" id="$description" ROWS="5" COLS="30"></TEXTAREA><br> <Input type="submit" name="enter" id="$enter" value="enter"> </form> <? echo $submitted = date("Y-m-d"); ?> <? $title = $_REQUEST['title']; $link = $_REQUEST['link']; $description = $_REQUEST['description']; $enter = $_REQUEST['enter']; if(isset($_REQUEST['enter'])){ $submitted = date("Y-m-d"); $sql = "INSERT INTO notes (title, link, description, submitted) VALUES ('$title','$link','$description','$submitted')"; } if(mysqli_query($con, $sql)){ echo "Records inserted successfully."; print "<meta http-equiv='refresh' content='0; url=http:notebook.php' />"; } // Close connection mysqli_close($con); ?> <div class="push"> </div> </div> <?php include 'footer.php'; ?> </body>
【问题讨论】:
-
使用更可靠的 js 或 php 标头。强制你的代码不能免受 SQL 注入攻击
-
js:
window.location.href = 'your_url';, php:header('Location: http://www.example.com/');exit()(删除之前的所有输出) -
AFAIK 应该引用表单的方法和操作。这样:method="POST" action=""