【问题标题】:Connecting HTML Form with PHPMyAdmin Database Issue将 HTML 表单与 PHPMyAdmin 数据库问题连接起来
【发布时间】:2017-10-14 20:35:26
【问题描述】:

我正在x10hosting.com 上做一个测试项目,制作一个 HTML 表单,将文本框中的文本发送到内部数据库。我在连接 x10host PHPMyAdmin 和 x10host 代码时遇到问题。如果您能告诉我哪里出错了,我将不胜感激。下面附上我的代码。如果您有任何问题,请告诉我。谢谢。

index.php

<html>
<h2>Summary:</h2>
</p>
<form role="form" method="POST" action="process.php">
<label>Key Points</label>
<input type="text" id="keypoints" name="keypoints"/> 
</br>
<input type="submit" id="submit" name="submit"/>
</form>
</html>

process.php

<?php
//Connecting to sql db.
$connect = mysqli_connect('localhost','infinote','','infinote_bank');
mysqli_select_db($connect,'infinote_bank');
//Sending form data to sql db.
if(isset($_REQUEST['submit'])) {
mysqli_query($connect, "INSERT INTO `cornell` (keypoints) VALUES ('$_POST['keypoints']')");
echo "success!";
}
?>

【问题讨论】:

  • 了解参数化查询

标签: php html mysql forms phpmyadmin


【解决方案1】:

假设您的数据库配置正确,问题似乎与您插入数据的方式有关:VALUES ('$_POST['keypoints']')

请注意,您在这里使用了四个单引号。一旦遇到下一个引号,PHP 就会认为字符串结束,并且可能会感到困惑,认为您正在尝试插入 '$_POST['。然后它会遇到keypoints']') 作为语法错误。

幸运的是,$_POST['keypoints'] 已经是string,所以可以简单地插入:

INSERT INTO `cornell` (keypoints) VALUES ($_POST['keypoints'])

请记住,这很容易受到SQL Injection 的攻击,为避免这种情况,您应该使用参数化查询,同时验证您的用户没有在表单本身中输入任何恶意内容:

$stmt = $connect->prepare("INSERT INTO cornell (keypoints) VALUES (?))");
$stmt->bind_param("s", strip_tags(htmlspecialchars($_POST['keypoints'])));
$stmt->execute();

您可以使用比这更极端的过滤,但这应该会给您一个合理的基线。

希望这会有所帮助! :)

【讨论】:

  • 我们可能不应该推荐容易注射的解决方案
  • 是的。我将更新答案以提供参数化的替代方案,尽管我的答案中提出的观点仍将修复 INSERT(尽管容易受到注入),并且作者没有询问漏洞。
  • 已更新以涵盖更安全的方法。
猜你喜欢
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多