我创建了一个网站,使用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
RAM:4GB
PORTS:所有打开的
WEB服务器:Apache2
LAMP:与MYSQL客户端一起安装
请告诉我你的任何建议,无论我是否需要服务器上的新软件或其他什么。附言:所有与网站有关的文件都有775个权限(这样每个人都可以阅读和执行它们),如果这有帮助的话。
提前感谢您的帮助,Aaron:)
BTW:这是而不是的重复,因为这里没有这样的问题,如果有,它还没有得到回答。
考虑到问题是由于用户输入了single&双引号。我将提出以下快速解决方案。在将所有输入保存到数据库之前对其进行筛选。
在文件的开头添加以下内容
function filter(&$array) {
$clean = array();
foreach($array as $key => &$value ) {
if( is_array($value) ) {
filter($value);
} else {
$value = trim(strip_tags($value));
if (get_magic_quotes_gpc()) {
$data = stripslashes($value);
}
$data = mysql_real_escape_string($value);
}
}
}
filter($_POST); # filters $_POST and any nested arrays by reference
上面的函数将递归地过滤所有元素,并对它们进行清理,以便连接到INSERT INTO
sql语句。在保存到数据库中时,脚本不应该出现错误行为。
我用一种非常简单的方法解决了它。这可能不是最好的方法,但它是一个单行(针对每个变量),在我的情况下它非常有效!
不是像这样向数据库中插入变量;$reason = $_POST['reason'];
我在PHP中使用了addslashes()
和stripslashes()
函数
因此,当向数据库提交数据时,您可以执行以下操作
$reason = "My name is 'aaron'";
$reason = addslashes($_POST['reason']);
echo($reason);
这将再次出现;
我的名字是
然后,要删除斜杠,可以使用stripslashes()
函数:-
$reason = stripslashes($reason);
echo($reason);
这将再次出现;
我的名字叫aaron
感谢所有回答的人,但这似乎是解决这个问题的最好、最简单、最快的方法!