【问题标题】:PHP error. “ Undefined index” the data from the form won't insert into the mysql databasePHP 错误。 “未定义索引”表单中的数据不会插入到mysql数据库中
【发布时间】:2014-01-01 03:06:01
【问题描述】:

这是 php.ini 中的 VALUES 错误。它说它是每个值中的未定义索引。我已经尝试了很长时间,但我无法弄清楚问题是什么。它在我的数据库中还是在代码中?请帮帮我:)

<html>
<body>
<h1>A small example page to insert some data in to the MySQL database using PHP</h1>
<form action="insert.php" method="post">
Firstname: <input type="text" name="navn" /><br><br>
Lastname: <input type="text" name="adresse" /><br><br>

<input type="submit" />
</form>

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

mysql_select_db("forum", $con);

$sql="INSERT INTO bruker (navn, adresse)
VALUES
('$_POST[navn]',
'$_POST[adresse]')";

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

mysql_close($con)
?>

</body>
</html>

【问题讨论】:

  • 1) 停止使用已弃用的 mysql_ 函数并改用 MySQLi 或 PDO 2) 不要盲目地将值插入到 MySQL 查询中。您的代码容易受到 SQL 注入 3) 您可以使用 isset() 检查该值是否实际定义在您的 $_POST 数组中。 print_r($_POST); 将列出全部内容。
  • 您不应该使用 MySql,因为它已被弃用。改用 PDO 或 MySqli!
  • 您正在以错误的方式获取数组的索引。 $_POST[navn] 实际上是 $_POST['navn']$_POST['adresse']。但是你有比这更大的问题:你盲目地在数据库中插入值。这是一个很大的禁忌。您应该查看准备好的语句并改用mysqli
  • 你是在一个文件中写html和php吗?

标签: php sql insert indexing


【解决方案1】:

单击提交按钮后,您的帖子值将起作用

<form action="" method="post">

<input type="submit" name="submit" />

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

mysql_select_db("forum", $con);

$sql="INSERT INTO bruker (navn, adresse)
VALUES
('$_POST[navn]',
'$_POST[adresse]')";

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

mysql_close($con)
}
?>

您也可以使用隐藏警告

error_reporting(0);

【讨论】:

  • -1 表示“单击提交按钮后,您的帖子值将起作用”。OP 已经在使用方法 =post 所以当您单击提交时,数据将传输到 php 文件。命名为提交是一种很好的做法,但是当只有一个提交按钮时它不会产生任何影响。
  • 错误消失了,但是数据没有插入到我的数据库中
  • @Rishabh Raj !!!它现在为他工作,你写的它会工作,但它会显示警告。是的,感谢 -1
【解决方案2】:

尽量不要使用旧的mysql函数。改用 mysqli 或 PDO。我已经更新了 BASIC 安全性的代码,但是准备好的语句提供了更多的安全性。

试试这个:

<?php
$con = mysqli_connect("localhost","root","pw","dbname");
if (mysqli_connect_errno($con))
{
die('Could not connect: ' . mysqli_connect_error());
}

$navn = mysqli_real_escape_string($con,$_POST['navn']);
$adresse = mysqli_real_escape_string($con,$_POST['adresse']);

$sql="INSERT INTO bruker (navn, adresse)
VALUES
('$navn',
'$adresse')";

if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "1 record added";

mysqli_close($con);
?>

编辑:并且您以错误的方式访问数组的索引($_POST[navn]$_POST[adresse])。您必须将索引名称放在单引号中,例如 $_POST['navn']

【讨论】:

  • 它如何解决 op 的问题?除了安全原因之外,您的代码与 op 有何不同。
  • 好吧,他访问 $_POST[navn] 这不是访问索引的正确方法。他缺少索引名称周围的 ''。
  • 你应该这样写来告诉别人你在做什么:) +1
猜你喜欢
  • 1970-01-01
  • 2014-04-04
  • 2017-03-26
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
相关资源
最近更新 更多