进入数据库的空白信息

时间:2013-04-28 21:29:42

标签: php

这是代码。我不确定我做错了什么。表单在数据库中提交,但它是空白的。     

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if(!$link){
die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db(DB_NAME, $link); 

if(!$db_selected){
die('can not use' . DB_NAME . ': ' . mysql_error());
}
$value = $_POST['hit'];
$value = $_POST['amount'];
$value = $_POST['category'];


$sql = "INSERT INTO hit (hit) VALUES ('$value')";

if(!mysql_query($sql)){
die('Error: ' . mysql_Error());
}

mysql_close();
?>

这是表格

 <!DOCTYPE html>
<html>
<head>
    <title>Post Hits</title>
    <style type="text/css">
        table tr > td { text-align: right; }
        table tr > td + td { text-align: left; }
    </style>
</head>
<body>
    <form action="he.php" method="post">
        <table>
            <tr>
                <td>
                    Hit:
                </td>
                <td>
                    <textarea name="hit" rows="3"></textarea>
                </td>
            </tr>
            <tr>
                <td>
                    amount:
                </td>
                <td>
                    <input type="text" id = "amount" name="amount" />
                </td>
            </tr>
            <tr>
                <td>
                    category:
                </td>
                <td>
                    <select name="category" id="category">
                        <option value="">- Choose -</option>
                        <option value="Blue">survey</option>
                        <option value="Green">batch</option>
                        <option value="Orange">misc</option>
                        <option value="Red">masters</option>
                        <option value="Yellow">qual</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td colspan="2" style="text-align: center;">
                    <input type="submit" id="submit" value="Submit!" />

                </td>
            </tr>
        </table>
    </form>
</body>
</html>

对于所有这些我仍然很新,所以无论我做错什么,这对我来说都是显而易见的。感谢

2 个答案:

答案 0 :(得分:2)

您的代码中存在许多问题和错误。在第一阶段,您使用相同的变量来获取您希望从POST数据

获取的所有值
$value = $_POST['hit'];
$value = $_POST['amount'];
$value = $_POST['category'];

应该是

$hit = $_POST['hit'];
$amount = $_POST['amount'];
$category = $_POST['category'];

所以你的查询看起来像

$sql = "INSERT INTO hit (hit) VALUES ('$hit')";

或者如果您想要插入所有数据,您应该

$sql = "INSERT INTO hit (hit, amount, category) VALUES ('$hit', '$amount', '$category')";

然后我想要记住,mysql_函数已被弃用,因此我建议您切换到mysqliPDO,确实存在sql injection的风险,看看How can I prevent SQL injection in PHP?。您应该使用准备好的法规来避免任何风险

答案 1 :(得分:0)

您在此处的每个阶段都会覆盖$value的值:

$value = $_POST['hit'];
$value = $_POST['amount'];
$value = $_POST['category'];

这会使$value仅等于您为其分配值的最后一次,在这种情况下,它只会等于$_POST["category"]。 您应该将每个$_POST数据存储在一个单独的变量中,如下所示:

$hit = $_POST['hit'];
$amount = $_POST['amount'];
$category = $_POST['category'];

然后将其插入您的查询,例如$sql = "INSERT INTO hit (hit,amount,category) VALUES ('$hit','$amount','$category')";

此外,您应该考虑通过使用PDOmysqli进行数据库事务来保护SQL注入数据。