为什么不插入数据库?

时间:2014-11-10 10:13:20

标签: php mysql

<?php
                    if(!isset($_GET['nick']))
                    {
                        echo '<form action="ban.php" method="get">
                              <input placeholder="Username" type="text" name="nick"/>
                              <input placeholder="Reason" type="text" name="reason"/>
                              <input type="submit" value"Ban!"/>';
                    } else
                    {
                        $nick = mysql_real_escape_string($_GET['nick']);
                        $reason = mysql_real_escape_string($_GET['reason']);

                        $query = mysql_query("SELECT Name FROM users WHERE Name='".$nick."'");
                        if (mysql_num_rows($query) != 0)
                        {
                            while($rows = mysql_fetch_assoc($query))
                            {
                                $IP = $rows['IP'];
                            }
                        }
                        else
                        {
                            echo "No user found!";
                        }
                        $today = date("d/m/y"); 
                        $sql = "INSERT INTO bans (`Name`, `IP`, `BReason`, `BAdmin`, `BDate`) VALUES ('$nick', '$IP', '$reason', '$name', '$today')";
                        if ($connect->query($sql) === TRUE)
                        {
                            echo "May his account rest in peace.";
                        } 
                        else 
                        {
                            echo "Error: " . $sql . "<br>" . $conn->error;
                        }
                    }
                    ?>

由于某种原因,它不会插入数据库。它没有显示任何消息。我尝试了很多,但我似乎无法找到解决方法。

请帮忙吗?谢谢。

2 个答案:

答案 0 :(得分:1)

你有几个问题,首先真的,真的用MySQLi替换所有的MySQL,并阅读一些关于如何编辑SQL以使其成为MySQLi - 它不需要花费太多时间或精力来改进MySQL。

代码:

$query = mysql_query("SELECT Name FROM users WHERE Name='".$nick."'");
                 if (mysql_num_rows($query) != 0)
                    {
                        while($rows = mysql_fetch_assoc($query))
                        {
                            $IP = $rows['IP'];
                        }
                    } 

您正在运行$ query,返回Name的所有值,其中Name ='“$ nick”'。

这可能不是问题,但我似乎更好地将字符串直接包含在MySQL中 -

Name = '$nick' 

但是你只是从搜索名称返回Name,所以$ Query的输出只会是$ rows ['Name'] = $ nick。 如果您想要IP设置查询:

$Query = mysql_query("SELECT IP FROM users WHERE Name='$nick' "); 

这样就会在$ row中返回键值对 $ row ['IP'] =您想要的IP值。

$ connet-&gt; query()可能会运行,但它看起来与上述MySql代码的形式不同,并且可能无法与旧的MysqL(而不是MySQLi)一起使用。所以试试:

if(mysql_query("INSERT INTO bans (`Name`, `IP`, `BReason`, `BAdmin`, `BDate`) VALUES  ('$nick', '$IP', '$reason', '$name', '$today')")){
    print "Inserted ok!";
} 
else {
 print mysql_error(); <== this will output any error if the previous query fails.
}

尝试以上操作,看看你发现了什么。

编辑: http://www.pontikis.net/blog/how-to-use-php-improved-mysqli-extension-and-why-you-should 为您提供有关如何将MySQL转换为MySQLi的体面指南。还要检查您运行的PHP版本,因为MySQL已被弃用,并且不适用于更新的PHP。还要检查PHP错误日志文件以获取有关您未获得预期响应的原因的背景信息。

答案 1 :(得分:0)

您当前的查询依赖于返回名称字段的选择,但随后存储IP字段(查询未返回)。您需要返回并存储两者

但是我会将值和插入返回只作为一个SQL: -

INSERT INTO bans (`Name`, `IP`, `BReason`, `BAdmin`, `BDate`)
SELECT Name, IP, '$reason', '$name', '$today' 
FROM users 
WHERE Name= '$nick'