Php 为什么我的数组元素要重新声明?
我声明了静态数组$error,其元素在函数validate中定义Php 为什么我的数组元素要重新声明?,php,arrays,Php,Arrays,我声明了静态数组$error,其元素在函数validate中定义 static $error = array(); if(!empty($_POST) && validate()) { $sql = mysql_query("INSERT INTO `table-name` SET category = " . $_POST['category'] . ", brand = " . $_POST['brand'] . ", product = '" . $_POST['p
static $error = array();
if(!empty($_POST) && validate())
{
$sql = mysql_query("INSERT INTO `table-name` SET category = " . $_POST['category'] . ", brand = " . $_POST['brand'] . ", product = '" . $_POST['p_name'] . "', location = " . $_POST['location'] . ", image = '" . $_POST['image'] . "', sku = '" . $_POST['sku'] . "'");
}
function validate()
{
if ((strlen($_POST['p_name']) < 3) || (strlen($_POST['p_name']) > 32))
{
$error["p_name"] = "Please enter Vendor name of 3 to 32 characters." ;
}
.
.
.
}
static$error=array();
如果(!empty($\u POST)&&validate())
{
$sql=mysql\u query(“插入到`表名'集合类别=“.$\u POST['category']”,brand=“.$\u POST['brand']”,product=”,“$\u POST['p\u name']”,location=“.$\u POST['location']”,image=”,“$\u POST['image']”,sku=”,sku=“$\u POST['sku']”);
}
函数验证()
{
如果((strlen($_POST['p_name'])小于3)| |(strlen($_POST['p_name'])>32))
{
$error[“p_name”]=“请输入3到32个字符的供应商名称。”;
}
.
.
.
}
但问题是,当我在下面的html中使用更新的$error元素(如$error['p_name'])时,它会显示未定义的索引p_name
<td>
<?php if(isset($error["p_name"])){ ?><span class="error"><?php echo $error["p_name"]; ?></span><?php } ?>
</td>
当我在validate函数中打印$error['p_name']
元素时,它会打印更新的值
实际上,validate函数中的element-
$error['p_name']
正在定义一个新元素,而不是创建一个预定义的$error
数组的新数组元素。使用global关键字告诉php,您正在使用global$error:
function validate()
{
global $error;
if ((strlen($_POST['p_name']) < 3) || (strlen($_POST['p_name']) > 32))
{
$error["p_name"] = "Please enter Vendor name of 3 to 32 characters." ;
}
函数验证()
{
全局$错误;
如果((strlen($_POST['p_name'])小于3)| |(strlen($_POST['p_name'])>32))
{
$error[“p_name”]=“请输入3到32个字符的供应商名称。”;
}
你没有回答我的评论。所以这是范围问题,不要使用全局关键字。使用依赖注入概念
将$error
数组变量作为函数的引用传递
function validate(&$error) //<---- Like that. (See the & ?)
{
function validate(&$error)//您需要删除static
关键字。我已经尝试过了。删除static会得到与您尝试在validate()中使用$error
数组相同的结果
?谢谢,你节省了时间,事实上我不想使用javascript进行验证。@user3588887,不客气。不要在任何代码上使用globals。你注意到这一点真的很好。