PHP和MYSQL将信息插入数据库,无法正常工作。

时间:2014-07-02 20:55:08

标签: php mysql sql

<?php
  $sent = $_GET['sent'];

  if($sent == "yes") {

      require('database_connection.php');
      $name = $_GET['name'];
      $desc = $_GET['desc'];
      $email = $_SESSION['Memberid'];

      date_default_timezone_set('Europe/London');
      $date = date("d.m.y"); 



      $sql = 'INSERT INTO `'.$email.'` (`id`, `Note`, `Share Url`, `Name`, `Description`, `Date`, `Type`) VALUES (\'\', \'Enter Note Here.\',  \'\',  \''.$name.'\', \''.$desc.'\', \''.$date.'\', \'Text\')';
      $i = mysqli_query($dbc, $sql);

        if($i) {
            echo '<h2>Created note.</h2>';
            header( 'Location: https://daccaa.com/edits' ) ;
        } else {
            echo '<h2>Failed to create a note for you.</h2>';
            echo $name.'<br />';
            echo $desc.'<br />';
            echo $email.'<br />';
            echo $date.'<br />';
            echo $sql.'<br />';
            echo $i.'<br />';
            echo '<h1 style="visibility: hidden;">_</h1>';
            echo '<a href="https://daccaa.com/contact" class="new">Let us Know.</a>';
        }

  } else {
      echo '<div class="holder">
    <h1>Lets create a new note:</h1>
    <h3 style="visibility: hidden;">_</h3>
        <form method="GET" action="#">
            <input type="text" name="name" class="myBox" placeholder="Enter Name Here" />
            <input type="text" name="desc" class="myBox" placeholder="Enter Description Here" /> <br />
            <input type="hidden" value="yes" name="sent" />
            <input type="submit" value="Generate" class="select" /><br />
            <a href="https://daccaa.com/edits/" class="select">Go Back</a> 
        </form>
    </div>
  </div>';
  }

  ?>

上面的代码来自我的网站,代码背后的想法是它会在数据库中创建一个新行,并在执行时提供信息。

这是失败后的测试将回应:

new_test_name
new_test_desc
49
02.07.14
INSERT INTO `49` (`id`, `Note`, `Share Url`, `Name`, `Description`, `Date`, `Type`) VALUES ('', 'Enter Note Here.', '', 'new_test_name', 'new_test_desc', '02.07.14', 'Text')

但我仍然无法获得输入的值,这个类似的方法在另一个页面上工作正常,我几乎可以消除它可能在数据库文件中的事实,因为它可以在同一目录中的另一个页面上正常工作

MYSQL数据库的结构是:

id |注意|分享网址|名称|说明|日期|型

请注意我将在稍后讨论添加更多防止SQL注入的方法,我只想先将基本代码整理出来。

1 个答案:

答案 0 :(得分:2)

从您的错误消息:Duplicate entry '0' for key 'PRIMARY'

我假设id是你的主键。确保您在此列上设置了自动增量设置,然后在查询中完全排除了ID字段。

现在您插入空白ID。如果没有严格的强制执行,MySQL会将空值转换为0来表示整数字段。因此,您每次都尝试插入ID 0而不是创建新行。

查询的危险

您在查询中使用未经过授权的用户输入(GET)。 GET,POST,REQUEST和COOKIE变量应始终与准备好的查询一起使用。

现在我可以使用?name="'; DELETE FROM 49 WHERE 1;"之类的内容加载您的网址并清除整个表格。研究SQL注入以及如何使用MySQLi进行准备好的查询。