mysql for PHP仅适用于部分用户


mysql for PHP only working for some

我创建了一个网站,使用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 INTOsql语句。在保存到数据库中时,脚本不应该出现错误行为。

我用一种非常简单的方法解决了它。这可能不是最好的方法,但它是一个单行(针对每个变量),在我的情况下它非常有效!

不是像这样向数据库中插入变量;$reason = $_POST['reason'];

我在PHP中使用了addslashes()stripslashes()函数
因此,当向数据库提交数据时,您可以执行以下操作

$reason = "My name is 'aaron'";
$reason = addslashes($_POST['reason']);
echo($reason);

这将再次出现;

我的名字是

然后,要删除斜杠,可以使用stripslashes()函数:-

$reason = stripslashes($reason);
echo($reason);

这将再次出现;

我的名字叫aaron

感谢所有回答的人,但这似乎是解决这个问题的最好、最简单、最快的方法!