【发布时间】:2015-12-13 17:02:49
【问题描述】:
我创建了一个网站,使用 PHP 和 HTML,它涉及将数据提交到 SQL 数据库,但它只是将数据添加到数据库中,仅供某些人使用。它为谁工作和不为谁工作是完全随机的。
SQL 服务器与网站托管在同一台服务器上,我已在 phpmyadmin 中检查了我的 SQL 代码以确保其正常工作。
数据提交到SQL服务器的PHP代码如下:-
<?php
#CHANGING POST VARS TO REG VARS
$submit = $_POST['Submit'];
$ign = strtolower($_POST['ign']);
$name = $_POST['rname'];
$email = $_POST['email'];
$age = $_POST['age'];
$reason = $_POST['reason'];
$duration = $_POST['duration'];
$date = date('Y-m-d');
if (isset($_POST['past_yes'])){
$pe = "1";
}else{
$pe = "0";
}
if ($ign !== "" and $name !== "" and $email !== "" and $age !== "" and $reason !== "" and $duration !== "" and isset($_POST['Submit'])){
$conn = mysql_connect("localhost", "wadmin", "CENSORED", "DibDibCraft-API");
$data = "INSERT INTO `custom_staffapp`
(`ign`,`name`,`email`,`age`,`reason`,`past`,`duration`,`date`)
VALUES('$ign','$name','$email','$age','$reason','$pe','$duration', '$date')";
mysql_query($conn, $data);
mysql_close($conn);
sleep(0.5);
$ign = "";
$name = "";
$email = "";
$age = "";
$reason = "";
$duration = "";
$pe = "";
header("Location: http://www.dibdibcraft.com/staff/apply_done");
}else $error = true;
?>
填写代码,包括 HTML 可以在这里找到:http://pastebin.com/vn8HReRG
我不知道这是否是我的代码中的错误,因为我使用的 PHP 检查器说没有问题,或者这是否是我正在使用的服务器的问题。
我已经尝试了mysqli_query(),以及我使用过的所有mysql 函数的等效mysqli,但同样的问题仍然存在。
服务器详情
操作系统:Ubuntu 服务器 15.04
内存:4GB
端口:全部开放
网络服务器:Apache2
LAMP:与 MYSQL 客户端一起安装
请让我知道您提出的任何建议,无论我是否需要服务器上的新软件或其他什么。 PS:与网站有关的所有文件都有 775 权限(因此每个人都可以阅读和执行它们),如果有帮助的话。
在此先感谢您的帮助,Aaron :)
顺便说一句:这不是重复的,因为这里没有这样的问题,如果有,也没有回答。
【问题讨论】:
-
这是个骗子。您没有使用参数化查询,并且遇到了破坏您的 sql 的引用问题,除了是一个主要的安全问题。
-
抱歉听起来像个菜鸟,但我该如何解决?
-
你能提供一个重现问题的例子吗?我怀疑这是因为您直接在 sql 中使用用户提供的数据。为了。例如如果有人会在你的原因 textarea 中使用双引号,那么这会破坏你的 sql。使用 mysql_real_escape_string() 来防止此类问题(准备好的语句更好)。
-
首先,编辑您的问题以删除您的域名。就像,现在。
-
然后阅读这个并使用那个 api。 php.net/manual/en/mysqli.quickstart.prepared-statements.php
标签: php mysql sql-server mysqli