为什么我的4个PHP输入中只有1个正确写入数据库?

时间:2014-02-03 16:31:42

标签: php html mysql sql phpmyadmin

这是我的HTML - 表单位于一个大表中,因为我最终希望从数据库输出的数据存在。

<form name="form1" method="post" action="php/InsertMatch.php" >
            <table>
                <tr>
                    <td>Hero</td>
                    <td>Result</td>
                    <td>Game Mode</td>
                    <td>MMR</td>
                    <td>Diff</td>
                </tr>
                <tr>
                    <td>Keeper of the light</td>
                    <td>Win</td>
                    <td>All Pick</td>
                    <td>3500</td>
                    <td>--</td>
                </tr>
                <tr>
                    <td><input id="select_hero" type="text" name="select_hero"></td>
                    <td>
                        <select name="winloss">
                            <option value="win">Win</option>
                            <option value="loss">Loss</option>
                        </select>
                    </td>
                    <td>
                        <select name="gamemode">
                            <option value="allpick">All Pick</option>
                            <option value="capmode">Captains Mode</option>
                            <option value="capdraft">Captains Draft</option>
                        </select>
                    </td>
                    <td><input id="input_mmr" type="text" name="input_mmr"></td>
                    <td>N/a</td>
                </tr>
            </table>
            <input id="submit_game" type="submit" name="submit" value="Submit game">
        </form>

上述摘要:要输入数据库的4件事。两个文本输入(两个都不起作用)和两个下拉框。唯一有效的似乎是winloss函数。我将在PHP下面显示数据库条目:

<?php

$host="localhost";
$username="root";
$password="";
$db_name="dota_site_test";
$tbl_name="matches";

mysql_connect("$host", "$username", "$password") or die ("cannot connect");
mysql_select_db("$db_name") or die("cannot select DB");

//names from form.
$hero=$_POST['select_hero'];
$winloss=$_POST['winloss'];
$gamemode=$_POST['gamemode'];
$mmr=$_POST['input_mmr'];

//data into mysql

$sql="INSERT INTO $tbl_name(Hero, Result, GameMode, MMR)VALUES('$hero', '$winloss', 'gamemode', 'mmr')";
$result=mysql_query($sql);

//if successful, displays message

if($result){
    echo "Successful";
    echo "<br />";
    echo "<a href='d2index.php'>Back to main page</a>";
}

else{
echo "ERROR";
}
?>

我不确定上面有什么问题,我什么都不会假设?因为我从这里使用了大部分内容:http://www.phpeasystep.com/mysql/5.html

以下是我在数据库中从2个具有不同输入的条目中获得的内容:

0 | win | gamemode | 0
0 | loss| gamemode | 0

因此只有winloss似乎有用..

如果需要,这是数据库表信息的图片:http://imgur.com/OPcNmFl

编辑:哎呀。我添加了$符号,现在MMRgamemode工作正常。但不是hero函数。有什么想法吗?

EDIT2:感谢您提供有关SQL注入攻击的警告。我承认这段代码非常不安全(只在我的电脑上托管),因此我警告任何阅读此内容的人都要注意这一点。谢谢。

2 个答案:

答案 0 :(得分:6)

除了差距很大的SQL Injection Attack漏洞,或许这个?

INSERT [..snip...] VALUES('$hero', '$winloss', 'gamemode', 'mmr')"
                                                ^--no $     ^---no $

您正在尝试插入固定的不变字符串,而不是您之前定义的变量。

答案 1 :(得分:2)

这可能是因为您忘记在查询上添加$符号。

应该是这样的

$sql="INSERT INTO $tbl_name(Hero, Result, GameMode, MMR)VALUES('$hero', '$winloss', '$gamemode', '$mmr')";