表单提交PHP Undefined index错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了表单提交PHP Undefined index错误相关的知识,希望对你有一定的参考价值。

<form method="get" action="add.php">
name:<input type="text" name="name"><br/>
age:<input type="text" name="age"><br/>
job:<input type="text" name="job"><br/>
<input type="submit" name="submit" value="Submit">
</form>
<?php
$conn=@mysql_connect("localhost","root","") or die("链接错误");
mysql_select_db("test",$conn);
mysql_query("set names 'gbk'");
$sql="INSERT INTO test1 (id,name,age,job,date) values ('','$_GET[name]','$_GET[age]','$_GET[job]',now())";
mysql_query("$sql",$conn);
?>

错误信息:
Notice: Undefined index: name in ..................../add.php on line 11
Notice: Undefined index: age in ......................../add.php on line 11
Notice: Undefined index: job in ........................./add.php on line 11

这个报错不是什么大问题,只是不良习惯造成的提示。关联数组应该使用如$_GET["name"]或者$_GET[\'name\']这样的表示方法,虽然php会在无法找到$_GET[name]时会自动将其识别为$_GET中下标为“name”的数组元素,但是会提示你上面的Notice信息。因此,正确的做法是为关联数组加上单引或双引号。

下面是摘自PHP中文手册的解释:
为什么 $foo[bar] 错了?
应该始终在用字符串表示的数组索引上加上引号。例如用 $foo[\'bar\'] 而不是 $foo[bar]。但是为什么 $foo[bar] 错了呢?可能在老的脚本中见过如下语法:
<?php
$foo[bar] = \'enemy\';
echo $foo[bar];
// etc
?>
这样是错的,但可以正常运行。那么为什么错了呢?原因是此代码中有一个未定义的常量(bar)而不是字符串(\'bar\'-注意引号),而
PHP 可能会在以后定义此常量,不幸的是你的代码中有同样的名字。它能运行,是因为 PHP 自动将裸字符串(没有引号的字符串且不对应于任何已知符号)转换成一个其值为该裸字符串的正常字符串。例如,如果没有常量定义为 bar,PHP 将把它替代为 \'bar\' 并使用之。追问

恩,谢谢。
但是我在这个页里加上了“” 提示:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING

追答

你的本来就是双引号字符,因此这里再加双引号就会冲突了,给新加的双引号加上转义,也就是$_GET[\\"name\\"]

参考技术A 你是想在单引号里面解析变量吗?字符串的连接居然用逗号?关联数组居然又不加引号。你不用学PHP了!追问

面对你这样的人渣,我无话可说。

参考技术B <form method="get" action="add.php">
name:<input type="text" name="name" id="name"><br/> //虽然没什么用,建议你把id属性加上
age:<input type="text" name="age" id="age"><br/>
job:<input type="text" name="job" id="job"><br/>
<input type="submit" name="submit" value="Submit">
</form>
<?php
$name=$_GET['name'];//这里最好这样写,没事儿还可以echo 一下看看接没接收到传的值
$age=$_GET['age'];
$job=$_GET['job'];

$conn=@mysql_connect("localhost","root","") or die("链接错误");
mysql_select_db("test",$conn);
mysql_query("set names 'gbk'");
$sql="INSERT INTO test1 (id,name,age,job,date) values ('null','$_GET['name']','$_GET['age']','$_GET['job']','now()')";//看清楚这里我是怎么写的,不好好写小心插入不进去
mysql_query("$sql",$conn);
?>追问

受教了。但是那个ID属性不是css属性吗?

追答

没关系的,你不要管它是什么属性,先写上肯定不会有问题

参考技术C 你把你的代码发一下啊~~~不然怎么知道追问

你回答太快了,我正在发。。。现在发上来了。

追答

这个这样写~~sname=isset($_get["name"])?$_get[name]:''
因为页面第一次加进去的时候是没有GET事件的,所以先给空字符

sname=isset($_GET["name"])?$_GETt["name"]:'';
那个最后面的''是两个单引号,这个你应该懂的,给分把

追问

$name=isset($_GET["name"])?$_GET["name"]:'';这样吧?

你打字打错就算了 代码也乱给啊

追答

甩椒胡,就这样的,你试试,我在登录界面的时候就遇到过这个问题~~就是这样解决~不会的继续问

php提示undefined index的几种解决方法

平时用$_post[\'\'],$_get[\'\']获取表单中参数时会出现Notice: Undefined index: --------

我们经常接收表单POST过来的数据时报Undefined index错误,如下: $act=$_POST[\'action\'];
用以上代码总是提示
Notice: Undefined index: act in D:\\test\\post.php on line 20
另外,有时还会出现
Notice: Undefined variable: Submit ...... 等一些这样的提示

出现上面这些是 PHP 的提示而非报错,PHP 本身不需要事先声明变量即可直接使用,但是对未声明变量会有提示。一般作为正式的网站会把提示关掉的,甚至连错误信息也被关掉。

解决方法:

方法1:
服务器配置修改
修改 php.ini 中的 error配置下错误显示方式:将error_reporting = E_ALL 修改为

error_reporting = E_ALL & ~E_NOTICE

修改后重启下APCHE服务器,方可生效。

方法2:对变量进行初始化。

方法3:做判断isset($_post[\'\']),empty($_post[\'\']) if --else

方法4:在出现notice代码之前加上@,@表示这行有错误或是警告不要输出,@$username=$_post[\'username\'];
在变量前面 加上一个 @ ,如 if (@$_GET[\'action\']==\'save\') { ...

方法5:最后一种很实用,是别人写的一个函数,通过这个函数进行传递值。

定义一个函数:

代码如下:

function _get($str){
$val = !empty($_GET[$str]) ? $_GET[$str] : null;
return $val;
}



然后在用的时候,直接用 _get(\'str\') 代替 $_GET[\'str\'] 就行啦~

以上是关于表单提交PHP Undefined index错误的主要内容,如果未能解决你的问题,请参考以下文章

php提示undefined index的几种解决方法

undefined index: php中提示Undefined ...

Undefined index: validate(thinkphp)

angularjs表单提交 怎么接受数据

php提示Notice: Undefined index解决方法

php提示undefined index的几种解决方法