我正在制作一个基本的内容管理系统,而且我已经陷入了对输入表单的数据的验证。
例如,一种形式是编辑主题的名称(在导航菜单中)。表单包含一些不同的数据,但主要关注的是“menu_name”字段(主题名称)。
在表单提交中,应检查“menu_name”中的数据以确保它不为空,如果是,则给出错误。发生的事情是表单验证似乎没有工作,因为当我输入任何内容时,脚本继续编辑主题名称,在这种情况下将其设置为空白。
这是在表单提交时执行的脚本:
if (isset($_POST['submit']))
{
// Process the form
// Validations
$required_fields = array("menu_name", "position", "visible");
validate_presences($required_fields);
$fields_with_max_lengths = array("menu_name" => 30);
validate_max_lengths($fields_with_max_lengths);
// If errors occured, redirect
if(empty($errors))
{
// Perform update
// Assign POST data to variables
$id = $current_subject["id"];
$menu_name = mysql_prep($_POST["menu_name"]);
$position = (int) $_POST["position"];
$visible = (int) $_POST["visible"];
// 2. Perform database query
$query = "UPDATE subjects SET ";
$query .= "menu_name = '{$menu_name}', ";
$query .= "position = '{$position}', ";
$query .= "visible = '{$visible}' ";
$query .= "WHERE id = {$id} ";
$query .= "LIMIT 1";
$result = mysqli_query($connection, $query);
if ($result && mysqli_affected_rows($connection) >= 0)
{
// Success
$_SESSION["message"] = "Subject updated.";
redirect_to("manage_content.php");
}
else
{
// Failure
$message = "Subject update failed.";
}
}
}
然后,您可以看到两个自定义验证函数检查数据,第二个不是我关注的问题,而是第一个函数validate_presences(),这里是函数:
function validate_presences($requried_fields)
{
GLOBAL $errors;
foreach($required_fields as $field)
{
$value = trim($_POST[$field]);
if (!has_presence($value))
{
$errors[$field] = fieldname_as_text($field) . " can't be blank";
}
}
}
你可以看到它引用了has_presence()函数,它是:
function has_presence($value)
{
return isset($value) && $value !== "";
}
如果有人对错误有任何想法,欢迎任何帮助! 只是询问您是否需要更多信息。 提前谢谢!
答案 0 :(得分:0)
为什么不直接返回错误数组而不是将其设为全局?我认为它会立即解决你的问题;)
function validate_presences($requried_fields)
{
$errors = array();
foreach($required_fields as $field)
{
$value = trim($_POST[$field]);
if (!has_presence($value))
{
$errors[$field] = fieldname_as_text($field) . " can't be blank";
}
}
return $errors;
}
现在设置$errors = validate_presences($required_fields);
并准备好了!
答案 1 :(得分:0)
不建议以这样的全局方式使用变量。而是通过引用验证函数来传递errors变量。
$errors = array();
function validate_presences($requried_fields, &$errors)
{
foreach($required_fields as $field)
{
$value = trim($_POST[$field]);
if (!has_presence($value))
{
$errors[$field] = fieldname_as_text($field) . " can't be blank";
}
}
}
$required_fields = array("menu_name", "position", "visible");
validate_presences($required_fields, $errors);
$fields_with_max_lengths = array("menu_name" => 30);
validate_max_lengths($fields_with_max_lengths, $errors);
// If errors occured, redirect
if(empty($errors))
{