2012-03-28 61 views
0

我花了好几天的时间试图找出这个无济于事。我已经检查了PHP文档以及有关“未定义索引”通知的多个其他形式问题,以及似乎通常的解决方案“isset()”函数。未定义的指数通知

但我无法解决我的情况。

下面是代码:关于与$ SQL变量的行

<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) 

     ?> 

4个启事出现为开头的“价值”,指的是form_e_date等

我询问一个道歉我意识到的问题有点频繁,但我尝试了其他人的解决方案,这些解决方案对我来说没有任何作用,否则我没有正确实施它们。

请帮忙,请随时留下任何关于我的代码的建设性反馈,因为我是一个新手。

谢谢!

+0

哪些注意事项和错误将它们粘贴到你的问题 – 2012-03-28 23:52:13

+1

$ _ POST [form_e_time]应该是$ _ POST [“form_e_time”],除非form_e_time被定义为一个常数,同样,你引用的任何其他关联数组索引,无论是你自己的数组还是超全局...这个问题每周回答几十次 – 2012-03-28 23:53:26

+0

但是请注意,直接从用户输入插入是非常危险的,所有的用户输入都应该在用于任何类型的数据库语句之前进行转义。 – dldnh 2012-03-29 00:01:07

回答

4

代替

'$_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_real_escape_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}')"; 
+0

谢谢dldnh,我实际上已经阅读过关于不允许用户直接输入数据库并且稍后要解决的问题;我正在使用的应用程序目前仅用于我个人的离线使用,直到我知道我在做什么为止(我也看到了有关mysql_real_escape_string函数的地方);但是我尝试了解我的通知问题的解决方案,但现在我得到4行$ form_e_date等未定义的索引通知。显然,我仍然在做错误的事情和/或把代码放在错误的地方? – Joshua 2012-03-29 00:08:34

+0

只是想确保你知道这个。 – dldnh 2012-03-29 00:10:08

+0

dldnh ,我实现了你的代码,并且从之前的4条通知中删除了受影响的1行,但是现在4条通知都在你给我的4条线上。 – Joshua 2012-03-29 00:16:08