Php 未定义索引通知

Php 未定义索引通知,php,Php,我花了好几天的时间试图弄明白这一点,但都无济于事。我已经检查了PHP文档以及关于“未定义索引”通知的多个其他表单问题,以及通常的解决方案“isset()”函数 但我无法解决我的问题 代码如下: <form action="" method="post"> <!-- Here are all the form fields --> <input type="submit" name="send" value="send"/> </form> <

我花了好几天的时间试图弄明白这一点,但都无济于事。我已经检查了PHP文档以及关于“未定义索引”通知的多个其他表单问题,以及通常的解决方案“isset()”函数

但我无法解决我的问题

代码如下:

<form action="" method="post">
<!-- Here are all the form fields -->
<input type="submit" name="send" value="send"/>
</form>

<?php

            $con = mysql_connect("#","#","#");
            if (!$con)
            {
                die('Could not connect: ' . mysql_error());
            }

            mysql_select_db("#", $con);

            $sql="
            INSERT INTO events (e_date, e_time, e_type, e_name)
            VALUES ('$_POST[form_e_date]','$_POST[form_e_time]','$_POST[form_e_type]','$_POST[form_e_name]')";

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

            mysql_close($con)

        ?>

而不是

'$_POST[form_e_date]','$_POST[form_e_time]','$_POST[form_e_type]','$_POST[form_e_name]'
你不应该使用

'$_POST["form_e_date"]','$_POST["form_e_time"]','$_POST["form_e_type"]','$_POST["form_e_name"]'
因为SQL注入攻击的危险

您应该使用
mysql\u real\u escape\u string
来保护自己不受此影响

这样会更安全:

if (array_key_exists("form_e_date", $_POST))
  $form_e_date = mysql_real_escape_string($_POST["form_e_date"]);
else
  $form_e_date = null;

if (array_key_exists("form_e_time", $_POST))
  $form_e_time = mysql_real_escape_string($_POST["form_e_time"]);
else
  $form_e_time = null;

if (array_key_exists("form_e_type", $_POST))
  $form_e_type = mysql_real_escape_string($_POST["form_e_type"]);
else
  $form_e_type = null;

if (array_key_exists("form_e_name", $_POST))
  $form_e_name = mysql_real_escape_string($_POST["form_e_name"]);
else
  $form_e_name = null;
.
.
.
$sql = "INSERT INTO events (e_date, e_time, e_type, e_name) " . 
  "VALUES ('{$form_e_date}','{$form_e_time}','{$form_e_type}','{$form_e_name}')";
而不是

'$_POST[form_e_date]','$_POST[form_e_time]','$_POST[form_e_type]','$_POST[form_e_name]'
你不应该使用

'$_POST["form_e_date"]','$_POST["form_e_time"]','$_POST["form_e_type"]','$_POST["form_e_name"]'
因为SQL注入攻击的危险

您应该使用
mysql\u real\u escape\u string
来保护自己不受此影响

这样会更安全:

if (array_key_exists("form_e_date", $_POST))
  $form_e_date = mysql_real_escape_string($_POST["form_e_date"]);
else
  $form_e_date = null;

if (array_key_exists("form_e_time", $_POST))
  $form_e_time = mysql_real_escape_string($_POST["form_e_time"]);
else
  $form_e_time = null;

if (array_key_exists("form_e_type", $_POST))
  $form_e_type = mysql_real_escape_string($_POST["form_e_type"]);
else
  $form_e_type = null;

if (array_key_exists("form_e_name", $_POST))
  $form_e_name = mysql_real_escape_string($_POST["form_e_name"]);
else
  $form_e_name = null;
.
.
.
$sql = "INSERT INTO events (e_date, e_time, e_type, e_name) " . 
  "VALUES ('{$form_e_date}','{$form_e_time}','{$form_e_type}','{$form_e_name}')";

注意事项和错误是什么将它们粘贴到您的问题中$\u POST[form\u e\u time]应该是$\u POST['form\u e\u time'],除非form\u e\u time定义为常量,同样,您引用的任何其他关联数组索引,无论是您自己的数组还是超全局数组。。。。这个问题每周都会被回答几十次,但请注意直接从用户输入中插入是非常危险的,在任何类型的数据库语句中使用之前,所有用户输入都应该转义。有什么注意事项和错误将它们粘贴到您的问题中$\u POST[form\u e\u time]应该是$\u POST['form\u e\u time']除非form_e_time定义为常数,否则您引用的任何其他关联数组索引,无论是您自己的数组还是超全局数组,都是一样的。。。。这个问题每周都会被回答几十次,但请注意,直接从用户输入中插入是非常危险的,在任何类型的数据库语句中使用之前,所有用户输入都应该被转义。感谢dldnh,我实际上已经读到了关于不允许用户直接输入数据库的内容,稍后将对此进行说明;我正在开发的应用程序目前只供我个人离线使用,直到我知道我在做什么(我在某处也看到了mysql_real_escape_string函数);)但我确实试过你解决我的问题,但现在我“我在4行$form_e_date上收到了未定义的索引通知,等等。显然我仍然在做错事和/或将代码放在错误的位置?只是想确保您知道。dldnh,我实现了您的代码,它从之前受影响的1行中删除了4条通知,但是现在你给我的4行上有4条通知。希望我刚才的编辑能修复它们。。。如果一个数组不包含命名键,就会出现错误,我假设这些就是你的意思。另一方面,如果这不能解决问题,只需粘贴错误所说的内容Hanks dldnh,我实际上已经读到了关于不允许用户直接输入数据库的内容,并打算稍后解决这个问题;我正在开发的应用程序目前只供我个人离线使用,直到我知道我在做什么(我在某处也看到了mysql_real_escape_string函数);)但我确实试过你解决我的问题,但现在我“我在4行$form_e_date上收到了未定义的索引通知,等等。显然我仍然在做错事和/或将代码放在错误的位置?只是想确保您知道。dldnh,我实现了您的代码,它从之前受影响的1行中删除了4条通知,但是现在你给我的4行上有4条通知。希望我刚才的编辑能修复它们。。。如果数组不包含命名键,则会出现错误,我假设这些就是您的意思。另一方面,如果这不能解决问题,则只需粘贴错误指示的内容即可