【问题标题】:MySQL Not Inserting Into ColumnMySQL没有插入列
【发布时间】:2011-03-13 00:45:08
【问题描述】:

我有以下代码:

    <html><body>
<?php
$con = mysql_connect("localhost","will","blahblah");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("blahblah", $con);

$sql="INSERT INTO links (link, notes, username)
VALUES
('$_POST[link]','$_POST[notes]','$_POST[username]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 link added";

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

它应该在我的数据库中插入一个链接、注释和一个用户名,但它没有。我不知道为什么,希望能得到一些帮助!它从下面的表格中获取这些值:

   <div id="stylized" class="myform">
<form id="form" name="form" method="post" action="user.php">
<label>Username
<span class="small">Enter Your Username</span>
</label>
<input type="text" name="name" id="username" />

<label>Link
<span class="small">Paste Your Link</span>
</label>
<input type="text" name="email" id="link" />

<label>Notes
<span class="small">Add Some Notes</span>
</label>
<input type="text" name="password" id="notes" />

<button type="submit"></button>
<div class="spacer"></div>

</form>
</div>

谢谢!

【问题讨论】:

  • 您遇到什么错误? (顺便说一句,用户名输入是“名称”而不是“用户名”)
  • 错误说明了什么?
  • 没有错误只是没有插入...

标签: php mysql html database forms


【解决方案1】:

我发现您的代码至少存在三个问题:

首先,将字符串注入 SQL 查询时,必须对其进行转义,使用 mysql_real_escape_string()

$link = mysql_real_escape_string($_POST['link']);
$notes = mysql_real_escape_string($_POST['notes']);
$username = mysql_real_escape_string($_POST['username']);

$sql="INSERT INTO links (link, notes, username)
VALUES ('$link','$notes','$username')";


第三,在您的 PHP 代码中,您必须使用输入字段的 name 属性——而不是它们的 id 属性。

考虑到您的 HTML 代码如下所示:

<input type="text" name="name" id="username" />
<input type="text" name="email" id="link" />
<input type="text" name="password" id="notes" />

您应该使用:

  • $_POST['name'],而不是 $_POST['username']
  • $_POST['email'],而不是 $_POST['link']
  • $_POST['password'],而不是 $_POST['notes']

注意:使用 nameid 不同会导致麻烦 ;-)



因此,总而言之,您的代码应该看起来更像这样:

$email = mysql_real_escape_string($_POST['email']);
$password = mysql_real_escape_string($_POST['password']);
$name = mysql_real_escape_string($_POST['name']);

$sql="INSERT INTO links (link, notes, username)
VALUES ('$email','$password','$name')";

注意:您应该为输入字段和表格中的字段使用相同的名称——这将使您的代码更易于理解。

【讨论】:

  • 首先是没有问题的。合理使用
【解决方案2】:

替换它:

$sql="INSERT INTO links (link, notes, username)
VALUES
('$_POST[link]','$_POST[notes]','$_POST[username]')";

与:

$sql="INSERT INTO links (link, notes, username)
VALUES
('". mysql_escape_string($_POST['name']) ."','".
     mysql_escape_string($_POST['email']) ."','". 
     mysql_escape_string($_POST['password']) ."')";

请注意,您尝试在查询中使用的 POST 变量与表单上的变量完全不同

【讨论】:

    【解决方案3】:

    POST 变量的索引必须与表单项的名称匹配。

    所以要么写:

    &lt;input type="text" name="link" id="link" /&gt; 或使用$_POST[email]

    适应其他变量。

    【讨论】:

      【解决方案4】:

      id 属性在提交表单时没有意义。您可能想要交换 nameid 属性。

      目前,正在提交$_POST['name']$_POST['email']$_POST['password'],而不是$_POST['username']$_POST['link']$_POST['notes']

      您的代码也容易受到SQL injection 的攻击。

      【讨论】:

        【解决方案5】:

        $_POST 中的项目是按 name 属性索引的,而不是按 id。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-13
          • 2018-02-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多