PHP 和 MYSQL 将信息插入数据库,不起作用。

标签 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>';
  }

  ?>

上面的代码来 self 的网站,代码背后的想法是它将在数据库中创建一个新行,其中包含执行时的信息。

这是失败时测试将回显的内容:

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 注入(inject),我只是想先整理一下基本代码。

最佳答案

根据您的错误消息: key “PRIMARY”的重复条目“0”

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

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

您的查询的危险

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

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

关于PHP 和 MYSQL 将信息插入数据库,不起作用。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24540869/

相关文章:

sql - 选项(重新编译)总是更快;为什么?

c# - 使用top子句查询数据表

javascript - 来自 ajax 调用的 JSON 输入意外结束

php - DeviantArt 中的用户身份验证

php - 如何在每个表上显示 4 个不同的数据,以便在 Laravel 中名为 Transaction 的一个表上看到?

PHP mysqli 插入不工作,但没有给出任何错误

mysql - 具有多个相似条件的查询,按 LIKE 排序

PHP 使用 cron 作业每天生成 csv

mysql - C MySQL 错误 "fatal error LNK1107: invalid or corrupt file: cannot read at 0x368"

php - 更新记录时,列计数与第 1 行的值计数不匹配