Я пытаюсь следовать учебнику PHP Lynda, и я застрял в проверке на страницах CRUD. Я пытался выяснить, что пошло не так, но я не могу найти, откуда исходит ошибка, хотя это уже указано в ошибке. Я смущен, потому что я использую ту же проверку для создания темы, и она выполняется просто отлично, но для создания страницы я получаю ошибку - Notice: Undefined index: visible in D:\wd-stuff\ampps\www\cms.widgetcorp\includes\validation.php on line 14
.Примечание: Неопределенный индекс - Ошибка PHP
Ниже приведен полный код, над которым я работаю.
PS: У меня есть вход радио, видимый.
PS2: Я прочитал ссылку, которая обрабатывала индекс Undefined, но он не ответил на мой вопрос. Такая же проверка работает отлично от другой формы (new_subject.php), которая в основном такая же, как и new_page.php.
new_page.php
require_once '../includes/session.php';
require_once '../includes/functions.php';
require_once '../includes/connection.php';
require_once '../includes/validation.php';
getSelectedContent();
if (!$is_subject) {
redirect_to("manage_content.php");
}
if (isset($_POST['submit'])) {
// validations
$req_fields = array("menu_name", "position", "visible", "content");
validatePresence($req_fields);
$field_with_length = array ("menu_name" => 30);
validateLenght($field_with_length);
if (empty($errors)) {
$s_id = $is_subject['id'];
$menu_name = mysqlPrep($_POST['menu_name']);
$position = (int) $_POST['position'];
$visible = (int) $_POST['visible'];
$content = mysqlPrep($_POST['content']);
$qry = "INSERT INTO pages (";
$qry .= " subject_id, menu_name, position, visible, content";
$qry .= ") VALUES (";
$qry .= " {$s_id}, '{$menu_name}', {$position}, {$visible}, '{$content}'";
$qry .= ")";
$result = mysqli_query($conn, $qry);
if ($result) {
$_SESSION['msg'] = "Page added.";
redirect_to("manage_content.php?subject=" . urlencode($is_subject['id']));
} else {
$_SESSION['msg'] = "Page Creation Failed";
}
}
}
include_once '../includes/layouts/header.php';
validation.php
$errors = array();
function isDataPresent($value)
{
return (isset($value) && $value !== "");
}
function validatePresence($fields)
{
global $errors;
foreach ($fields as $field) {
$value = trim($_POST[$field]);
if (!isDataPresent($value)) {
$errors[$field] = str_replace("_", " ", ucfirst($field)) . " can't be blank";
}
}
}
function isLengthValid($value, $max)
{
return (strlen($value) <= $max);
}
function validateLenght($fields)
{
global $errors;
foreach ($fields as $field => $max) {
$value = trim($_POST[$field]);
if (!isLengthValid($value, $max)) {
$errors[$field] = str_replace("_", " ", ucfirst($field)) . " is too long";
}
}
}
Я также думал, просто комбинируя два. Но главная цель моего поста - понять, почему валидация работает в одной форме, но не с другой, которая в основном одинакова.
new_subject.php
require_once '../includes/session.php';
require_once '../includes/functions.php';
require_once '../includes/connection.php';
require_once '../includes/validation.php';
if (isset($_POST['submit'])) {
$menu_name = mysqlPrep($_POST['menu_name']);
$position = (int) $_POST['position'];
$visible = (int) $_POST['visible'];
// validations
$req_fields = array("menu_name", "position", "visible");
validatePresence($req_fields);
$field_with_length = array ("menu_name" => 30);
validateLenght($field_with_length);
if (!empty($errors)) {
$_SESSION['errors'] = $errors;
redirect_to('new_subject.php');
}
$qry = "INSERT INTO subjects (";
$qry .= "menu_name, position, visible";
$qry .= ") VALUES (";
$qry .= " '{$menu_name}', $position, $visible";
$qry .= ")";
$result = mysqli_query($conn, $qry);
if ($result === false) {
$_SESSION['msg'] = "Subject Creation Failed";
redirect_to("new_subject.php");
}
$_SESSION['msg'] = "Subject Created";
redirect_to("manage_content.php");
} else {
redirect_to("new_subject.php");
}
предмет форма
<form action="create_subject.php" method="post">
<p>Menu name:
<input type="text" name="menu_name" value="">
</p>
<p>Position:
<select name="position">
<?php
$subject_set = getAllSubjects();
$subject_cnt = mysqli_num_rows($subject_set);
for ($cnt = 1; $cnt <= $subject_cnt + 1; $cnt++) {
echo "<option value=\"{$cnt}\">{$cnt}</option>";
}
?>
</select>
</p>
<p>Visible:
<input type="radio" name="visible" value="0"> No
<input type="radio" name="visible" value="1"> Yes
</p>
<input type="submit" name="submit" value="Create Subject">
</form>
страница формы
<form action="new_page.php?subject=<?= urlencode($is_subject['id']); ?>" method="post">
<p>Menu name:
<input type="text" name="menu_name" value="">
</p>
<p>Position:
<select name="position">
<?php
$page_set = getAllPages($is_subject['id']);
$page_cnt = mysqli_num_rows($page_set);
for ($cnt = 1; $cnt <= $page_cnt + 1; $cnt++) {
echo "<option value=\"{$cnt}\">{$cnt}</option>";
}
?>
</select>
</p>
<p>Visible:
<input type="radio" name="visible" value="0"> No
<input type="radio" name="visible" value="1"> Yes
</p>
<p>Content: <br>
<textarea rows="20" cols="80" name="content"></textarea>
</p>
<input type="submit" name="submit" value="Create Page">
</form>[Validation error that I'm trying to reproduce][1]
Возможный дубликат [PHP: «Примечание: неопределенная переменная», «Примечание: неопределенный индекс» и «Примечание: неопределенное смещение»] (http://stackoverflow.com/questions/4261133/php-notice-undefined- variable-notice-undefined-index-and-notice-undef) – aynber