我的PHP代码不会将记录插入mySQL数据库表

时间:2013-05-18 17:40:25

标签: php

我的网站上有以下PHP代码/文件,但由于一些不明智的原因,它不会将用户输入的记录插入到mySQL数据库表中,因为它是必需的。谁能告诉我为什么会这样?

据我所知,代码完全正确,我不知道为什么会发生这种情况......

请帮忙......代码如下......

<html>
<head>
</head> 
<body>
<form action="register_development_file_1.php" method="post">
    Email:  <input type="text" name="email"><br />
    Date:   <input type="text" name="date"><br />
    Time:   <input type="text" name="time"><br />
        <input type="submit" name="submit">
</form>

    <?php
    if  (isset($_POST['submit']))
    {
        $con = mysql_connect("localhost","username","password");
        if (!$con)
        {
            die("Could not connect to the database: " . mysql_error());
        }

        mysql_select_db("wwwbrecs_BREC",$con);

   $sql = "INSERT INTO 'signups' ('signup_email_address', 'signup_date', 'signup_time') VALUES ('$_POST[email]','$_POST[date]','$_POST[time]')";

        mysql_query($sql,$con);

        mysql_close($con);
    }
    ?>
</body>
</html>

4 个答案:

答案 0 :(得分:2)

您的查询中存在语法错误,您不会使用引号'来围绕表格名称和列,至少可以使用反引号`

INSERT INTO 'signups' ('signup_email_address', 'signup_date','signup_time')

应该是

INSERT INTO signups (signup_email_address, signup_date, signup _time) VALUES 

或者

INSERT INTO `signups` (`signup_email_address`, `signup_date`, `signup _time`) VALUES 

只有值(实际上不是整数列的整数)应该用引号'包围。

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

答案 1 :(得分:0)

这里是你创建的更好的脚本版本,因为你的SQL注入是100%开放的,甚至不是传统的编码方式,这更安全但如果你需要安全,那么我建议你学习一下PDO来自 here

<?php
     if(isset($_POST['submit'])){
       mysql_connect("localhost","username","password") or die(mysql_error());
       mysql_select_db("wwwbrecs_BREC", $con) or die(mysql_query());

      $email = mysql_real_escape_string($_POST['email']);
      $date = mysql_real_escape_string($_POST['date'])
      $time = mysql_real_escape_string($_POST['time'])

       $sql = "INSERT INTO 
            signups ('signup_email_address', 'signup_date','signup_time') 
            VALUES  ('".$email."','".$date."','".$time."')";

        mysql_query($sql, $con) or die(mysql_error());

        mysql_close($con);
    }

答案 2 :(得分:0)

注册表不应该用单引号括起来,而应该用撇号`

包围

因此

    $sql = "INSERT INTO 'signups' ('signup_email_address', 'signup_date',                          'signup_time') VALUES ('$_POST[email]','$_POST[date]','$_POST[time]')";

应该是

    $sql = "INSERT INTO `signups` ('signup_email_address', 'signup_date',                          'signup_time') VALUES ('$_POST[email]','$_POST[date]','$_POST[time]')";

答案 3 :(得分:0)

<?php
$sql = "
    INSERT INTO signups 
    (signup_email_address, signup_date, signup_time) 
    VALUES 
    ('" . mysql_real_escape_string($_POST['email']) . "','" . mysql_real_escape_string($_POST['date']) . "', '" . mysql_real_escape_string($_POST['time']) . "')";

这应该可以解决问题,同时检查你的安全性