php/mysql 排序问题和表单清理?

标签 php mysql forms sorting sanitize

我对脚本编写还很陌生,但我一直很好地遵循代码逻辑。我有两个工作脚本(下面发布),一个将表单发布到 mysql 数据库,另一个在表的同一页面上提取信息。对于我想要完成的以下事情,我无法找到帮助。

1.) 清理表单,我被告知它对注入(inject)/其他非常开放。大多数人会提交的是文本,我希望他们最终能够发布由第二个脚本调用和点击的 html 链接。

2.) 我希望回调脚本对信息进行排序,以便最新的帖子位于顶部。 (我可以在名为“日期”的类别和内容旁边创建一个新的 mysql 列,自动检测日期/时间并使用它进行排序吗?我很想看到一些示例代码。

这是提交表单

<html>
<div style="width:  330px;  height:  130px;  overflow:  auto;">
<form STYLE="color: #f4d468;" action="send_post.php" method="post">

    Category: <select STYLE="color: #919191; font-family: Veranda; font-weight: bold; font-size: 10px; background-color: #000000;" name="category">
<option value="category 1">category 1</option>
<option value="category 2">category 2</option>
<option value="category 3">category 3</option>
<option value="Other">Other</option>
</select> <br>

    <textarea overflow: scroll; rows="4" cols="60" STYLE="color: #919191; font-family: Veranda; font-weight: bold; font-size: 10px; background-color: #000000; width:300px; height:80px; margin:0; padding:0;" name="contents"></textarea><br>
    <input type="submit" STYLE="color: #919191; font-family: Veranda; font-weight: bold; font-size: 10px; background-color: #000000;" value="Create Log">
</form>
</div>
</html>

sendpost.php

<?php
//Connecting to sql db.
$connect=mysqli_connect("localhost","myuser","mypassword","mydb");

header("Location: http://mywebsite.com/myhomepage.php");

if (mysqli_connect_errno()) { echo "Fail"; } else { echo "Success"; }

//Sending form data to sql db.
mysqli_query($connect,"INSERT INTO mydbtable (category, contents)
VALUES ('$_POST[category]', '$_POST[contents]')");

?>

然后在页面上调用 get php

<?php
$con=mysqli_connect("localhost","myuser","mypassword","mydb");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$result = mysqli_query($con,"SELECT * FROM mydbtable");

echo "<table border='1'>
<tr>
<th>Category</th>
<th>Contents</th>
</tr>";

while($row = mysqli_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['category'] . "</td>";
  echo "<td>" . $row['contents'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysqli_close($con);
?> 

另外,在两个脚本中使用 $con=mysqli_connect 命令进行连接的情况下,这基本上是公开的吗?难道有人不能访问 php 并查看该信息吗?

我真的很感谢您的帮助,非常愿意阅读和学习正确的做事方法!

最佳答案

这两个问题会对您有所帮助。

  1. How can I prevent SQL injection in PHP?

  2. How can I specify sql sort order in sql query

    SELECT * FROM mydbtable ORDER BY date
    
<小时/>

对于公开的数据库密码和连接...通常人们只包含该 php 文件(即使它并没有使其更安全)。但是,如果您对文件系统具有 root 访问权限,则可以将其放在足够高的目录中,位于 htdocs 之上,并且无法通过 url 访问它。

dbconnect.php

$con=mysqli_connect("localhost","myuser","mypassword","mydb");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

index.php

include 'dbconnect.php';

但是,这实际上并没有使其更安全,只是方便您不会意外地发布带有密码的代码。

关于php/mysql 排序问题和表单清理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18989293/

相关文章:

MySQL 左连接意外输出

mysql - 查询以检索所有姓氏以特定字母开头的人

forms - 多个 Salesforce 在线潜在客户表单

javascript - 表单验证后,表单不提交

php - Cron 不在 PHP Docker 容器中运行

php - OctoberCMS 表单请求未提交

php - 根据所选类别更改标题背景

php - codeigniter - MySQL - PHP 试图计算不同值的出现次数

MySQL - 递归两个节点之间的树路径

html - 向多个 URL 提交表单