我声明了静态数组$ 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_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." ;
}
.
.
.
}
但问题是当我在下面的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函数中的元素 - $error['p_name']
定义了一个新元素,而不是创建一个预定义$error
数组的新数组元素。
答案 0 :(得分:1)
使用global关键字告诉php,你正在使用全局$ 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." ;
}
答案 1 :(得分:1)
嗯,你没有回答我的评论。所以这是范围问题,请勿使用全局关键字。使用依赖注入概念..
将您的$error
数组变量作为对函数的引用传递..
function validate(&$error) //<---- Like that. (See the & ?)
{
当您调用validate
函数时,请确保也传递数组。