表单的奇怪验证错误

时间:2014-01-18 11:44:39

标签: php forms validation

我得到的错误是:

  

注意:未定义的索引:在第22行的C:\ xampp \ htdocs \ introduphp \ includes \ validation_function.php中可见

不应该发生,因为我已经实例化了所有变量,包括可见

Validation_function.php

<?php

$errors = array();

function fieldname_as_text($fieldname) {
    $fieldname = str_replace("_", " ", $fieldname);
    $fieldname = ucfirst($fieldname);
    return $fieldname;
}

// * presence
// use trim() so empty spaces don't count
// use === to avoid false positives
// empty() would consider "0" to be empty
function has_presence($value) {
    return isset($value) && $value !== "";
}

function validate_presences($required_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";   
  }
 }
}

// * string length
// max length
function has_max_length($value, $max) {
    return strlen($value) <= $max;
}

function validate_max_lengths($fields_with_max_lengths) {
    global $errors;
    // Expects an assoc. array
    foreach($fields_with_max_lengths as $field => $max) {
        $value = trim($_POST[$field]);
      if (!has_max_length($value, $max)) {
        $errors[$field] = fieldname_as_text($field) . " is too long";
      }
    }
}

// * inclusion in a set
function has_inclusion_in($value, $set) {
    return in_array($value, $set);
}

?>

new_page.php(具有执行验证的单页提交表单的页面)

<?php require_once("includes/session.php"); ?>
<?php require_once("includes/db_connection.php"); ?>
<?php require_once("includes/functions.php"); ?>
<?php require_once("includes/validation_function.php"); ?>

<?php find_selected_page(); ?>

<?php
// Can't add a new page unless there is a subject as a parent
if (!$current_subject) {
    // subject ID was missing or invalid or
    //subject couldn't be found in database
    redirect_to("manage_content.php");
}
?>

<?php
if (isset($_POST['submit'])) {
// Process the form

//validations
    $required_fields = array("menu_name", "position", "visible",
"content");
validate_presences($required_fields);

$fields_with_max_lengths = array("menu_name" => 60);
validate_max_lengths($fields_with_max_lengths);

    if (empty($errors)) {
      // perform Create

    //add the subject_id
    $subject_id = $current_subject["id"];
    $menu_name = mysql_prep($_POST["menu_name"]);
    $position = (int) $_POST["position"];
    $visible = (int) $_POST["visible"];
    //escape content
    $content = mysql_prep($_POST["content"]);

    // 2. Perform database query
    $query .= "INSERT INTO pages (";
    $query .= " subject_id, menu_name, position, visible,
    content";
    $query .= ") VALUES (";
    $query .= " {$subject_id}, '{$menu_name}', {$position},
    {$visible}, '{$content}'";
    $query .= ")";

    $result = mysqli_query($connection, $query);


    if ($result ) {
        // Success
        $_SESSION["message"] = "Page Created.";

        redirect_to("manage_content.php?subject=" .
        urlencode($current_subject["id"]));
    }else {
        // Failure
        $_SESSION["message"] = "Page creation failed.";
    }   
  }
} else {
     // This is probably a GET request

} // End: If(isset($_POST['submit']))

?>
<?php $layout_context = "admin"; ?>
<?php include("header.php"); ?>
<div id="main">
<div id="navigation">
<?php echo navigation($current_subject, $current_page); ?>
</div>
<div id="page">
<?php echo message(); ?>
<?php echo form_errors($errors); ?>

<h2>Create Page</h2>
<form action="new_page.php?subject=<?php echo
urlencode($current_subject["id"]); ?>" method="post">
<p>Menu name:
<input type="text" name="menu_name" value="" />
</p>
<p>Position:
<select name="position">
<?php
$page_set =
find_all_pages_for_subject($current_subject["id"], false);
$page_count = mysqli_num_rows($page_set);
for($count=1; $count <= ($page_count + 1); $count++) {
   echo "<option value=\"{$count}\">{$count}</option>";   
}
?>
</select>
</p>
<p>Visible
<input type="radio" name="visible" value="0" /> NO
&nbsp;
<input type="radio" name="visible" value="1" /> Yes
</p>
<p>Content:<br />
<textarea name="content" rows="20" cols="80"></textarea>
</p>
<input type="submit" name="submit" value="Create Page" />
</form>
<br />
<a href="manage_content.php?subject=<?php echo
urlencode($current_subject["id"]); ?>">Cancel</a>
</div>
</div>

<?php include("includes/footer.php"); ?>

3 个答案:

答案 0 :(得分:0)

您可能在输入HTML字段上输入了拼写错误。您可以使用:

if (isset($_POST[$field])) {

on validate_presences()函数以确保该值存在。

答案 1 :(得分:0)

当您尝试执行trim($_POST[$field]);时,您认为该字段存在于$_POST数组中 - 对于visible,在这种情况下它不存在。您可以将trim移至has_presence()

function has_presence($value) {
    return isset($value) && trim($value) !== "";
}

function validate_presences($required_fields) {
    global $errors;
    foreach($required_fields as $field) {
        if (!has_presence($value)) {
            $errors[$field] = fieldname_as_text($field) . " can't be blank";   
        }
    }
}

现在,如果变量存在,您将只有trim

答案 2 :(得分:0)

好的,标记无线电检查按钮使其现在可以正常工作。感谢所有人的投入。它对我帮助很大。