PHP framework CodeIgniter. Проверка данных из форм

Владимир | | CodeIgniter, PHP.

Проверка данных форм

В этой статье я хочу рассказать о возможностях, которые предоставляет CodeIgniter для работы с данными форм. Несмотря на то, что обработка этих данных довольно простая, она включает множество проверок и для больших форм выливается в приличный кусок кода.

Каждый раз заново изобретать велосипед естественно никто не хочет, поэтому библиотек для решения этих задач существует просто немеряно.

Практически каждый фрэймворк предлагает свое решение этой задачи. И CodeIgniter тут не исключение. Возможно, его решение не идеальное, но, тем не менее, достаточно эффективное и удобное в использовании.

Рассмотрим небольшой пример. Допустим, у нас есть страница (userdata) с формой, содержащей поля для ввода личных данных. Если посетитель правильно заполнил форму, мы должны отправить его на главную страницу сайта (index). Если были допущены ошибки – показать их описание и предложить заполнить форму еще раз.

Естественно, доступ к обеим страницам осуществляется через контроллер, а их адреса выглядят так: www.site.com/index.php/main/index и www.site.com/index.php/main/userform.

Примечание. Подробнее почитать о навигации в CodeIgniter можно в статье «CodeIgniter: контроллер и представления».
Т.е. на данном этапе контроллер выглядит так:

class Main extends Controller {

 function Main()

 {

 	parent::Controller();

 }

 function index()

 {

 	$this->load->view('index');

 }

function userdata() { $this->load->view('userdata'); } }

Добавляем в контроллер метод, который будет выполнять проверку данных:

function checkdata() {

 $this->load->library('validation');

}

На данном этапе этот метод только загружает встроенную библиотеку 'validation', которая и будет выполнять проверку.

Теперь рассмотрим саму форму:

<?php echo form_open('main/checkdata'); ?>

<p>Ник: <input type="text" name="usernic" id="usernic" /></p>

<p>Полное имя: <input type="text" name="fullname" id="fullname" /></p>

<p>eMail: <input type="text" name="usermail" id="usermail" /></p>

<p><input type="submit" id="sendbtn" value="Отправить" /></p>

</form>

Сразу обратите внимание первую строку. Здесь для создания открывающего формы использована функция form_open. Главное преимущество от использования этой функции в том, что она формирует ссылку в параметре action. Ссылка составляется из трех частей: значений переменных $config['base_url'] и $config['index_page'], которые задаются в файле /application/config/config.php, и параметра функции (в котором мы передали имена контроллера и метода, выполняющего обработку).

Примечание. Для использования form_open необходимо загрузить Form Helper

$this->load->helper('form');

Сама форма содержит три поля, в которые посетитель должен ввести свои данные (ник, полное имя и адрес почты). После нажатия на кнопку «Отправить» данные отсылаются на URL www.site.com/index.php/main/checkdata. По-умолчанию, отправка осуществляется методом POST.

Теперь переходим непосредственно к проверке.

Принцип работы библиотеки validation следующий. Вы создаете правила для каждого поля формы, а затем выполняете проверку соответствия полученных значений этим правилам.

Посмотрим, как это будет выглядеть для нашего примера.

function checkdata() {

 $this->load->library('validation');	$rules['usernic'] = "trim|required|min_length[3]";

 $rules['fullname'] = "trim|required";

 $rules['usermail'] = "trim|required|valid_email";

$this->validation->set_rules($rules);

if ($this->validation->run() === TRUE) {

 	//сохраняем введенные данные (например, в БД)

 	//..........

 	//отправляем пользователя на главную страницу

 	$this->load->view('index');

 }

 else {

 	$this->load->helper('form');

 	$this->load->view('userdata');

 }

}

В строках 4-6 мы объявили массив с правилами. Ключи массива должны иметь такие же названия, как и поля формы (совпадать с аттрибутом name), а значения – это просто строки с перечнем правил, которые будут применяться к полю (в качестве разделителя используется «|»).

Теперь рассмотрим правила, которые мы использовали:
trim – удаляет пробелы в начале и конце полученной строки;
required – указывает, что поле должно быть заполнено;
min_length[3] – указывает, что длина полученного значения должна быть не меньше 3;
valid_email – указывает, что полученное значение должно быть адресом eMail.

Естественно, это далеко не все правила. Подробный перечень можно посмотреть здесь. Кроме того, в качестве правил можно использовать php функции, которые принимают один параметр.

В строке 8 с помощью метода set_rules мы устанавливаем правила, а в строке 10 – выполняем проверку (метод run).

После этого, в зависимости от результатов проверки, мы отправляем посетителя либо на главную страницу, либо показываем форму еще раз.

В принципе, на данном этапе мы уже выполнили проверку. Но если посетитель допустит ошибку, то он не будет знать, в чем она заключается.

Кроме того, ошибка может быть только в одном из полей. Поэтому, нам нужно заполнить все остальные поля, чтобы посетитель не вводил их заново.

Для решения этих задач нужно выполнить две операции.

1) В контроллере с помощью метода set_fields указать поля, информация о которых нам нужна:

$fields['usernic'] = "ник";

$fields['fullname'] = "полное имя";

$fields['usermail'] = "адрес email";$this->validation->set_fields($fields);

В первом параметре методу передается массив с параметрами. Ключи элементов массива должны совпадать с именами полей формы, а значения – просто текстовые описания полей (используются при выводе сообщений об ошибках).

2) В представлении (userdata.php) вывести сообщения об ошибках и задать значения для правильно заполненных полей.

<?php echo form_open('main/checkdata'); ?>

<p>

<?php echo $this->validation->usernic_error; ?>

Ник: <input type="text" name="usernic" id="usernic"

value="<?php echo $this->validation->usernic; ?>" /></p>

<p>

<?php echo $this->validation->fullname_error; ?>

Полное имя: <input type="text" name="fullname" id="fullname"

value="<?php echo $this->validation->fullname; ?>" /></p>

<p>

<?php echo $this->validation->usermail_error; ?>

eMail: <input type="text" name="usermail" id="usermail"

value="<?php echo $this->validation->usermail; ?>" /></p>

<p><input type="submit" id="sendbtn" value="Отправить" /></p>

</form>

Как видите, перед каждым полем мы добавили:

echo $this->validation->имяполя_error;

Эти переменные создает CodeIdniter. Если поле заполнено правильно, то переменная будет содержать пустую строку и посетитель ничего не увидит.
Переменные $this->validation->имя_поля содержат введенные значения. Таким образом, присваивая их атрибуту value, мы заполняем поля предыдущими значениями.

Примечание. Для того, чтобы при первоначальном появлении формы не появлялись сообщения об ошибках, поля должны быть установлены во всех методах контроллера, которые будут отображать форму. В нашем случае это userdata и checkdata.

Примечание. Описание ошибок по-умолчанию отображаются на английском языке. Но, естественно, это несложно исправить, т.к. для стандартных библиотек фрэймворка существуют уже готовые файлы переводов. Подробнее об этом можно почитать в статье «Создание многоязычных сайтов с помощью CodeIgniter».

Создание собственных правил.

Предусмотреть все возможные ситуации невозможно. Поэтому CodeIdniter предоставляет вам возможность создать собственные правила обработки данных из форм.

Допустим, мы не хотим, чтобы два посетителя сайта имели одинаковые ники. Предполагается, что у нашего сайта есть база данных, в которой мы храним информацию о пользователях.

Естественно, стандартные правила проверки тут нам не помогут, поэтому мы должны написать собственный метод для проверки.

Посмотрим, как этот метод может выглядеть:

function checknic($nic) {

 //тут должен быть запрос к БД, который ищет

 //пользователя с именем $nic.

 //........

 //если пользователь найден

 if ($nic_exists === TRUE) {

 	$this->validation->set_message('checknic',

 		'Пользователь с таким ником уже существует');

 	return false;

 }

 else {

 	return true;

 }

}

Как видите, этот метод должен возвращать true в случае успешной проверки и false – если найдена ошибка (в данном случае ошибкой считается совпадение ника с уже существующим).

После этого, мы можем использовать имя этого метода (с приставкой callback_) в качестве правила.

$rules['usernic'] = "required|min_length[3]|callback_checknic";

Теперь соберем все вместе.
Контроллер (main.php):

class Main extends Controller {	function Main()

 {

 	parent::Controller();

 }

function index()

 {

 	$this->load->view('index');

 }

function userdata() {

 	$this->load->library('validation');

$fields['usernic'] = "ник";

 	$fields['fullname'] = "полное имя";

 	$fields['usermail'] = "адрес email";

$this->validation->set_fields($fields);

$this->load->helper('form');

 	$this->load->view('userdata');

 }

function checkdata() {

 	$this->load->library('validation');

$rules['usernic'] = "required|min_length[3]|callback_checknic";

 	$rules['fullname'] = "required";

 	$rules['usermail'] = "required|valid_email";

$this->validation->set_rules($rules);

$fields['usernic'] = "ник";

 	$fields['fullname'] = "полное имя";

 	$fields['usermail'] = "адрес email";

$this->validation->set_fields($fields);

if ($this->validation->run() == TRUE) {

 		//сохраняем введенные данные (например, в БД)

 		//..........

 		//отправляем пользователя на главную страницу

 		$this->load->view('index');

 	}

 	else {

 		$this->load->helper('form');

 		$this->load->view('userdata');

 	}

 }

function checknic($nic) {

 	//тут должен быть запрос к БД, который ищет

 	//пользователя с именем $nic.

 	//........

 	//если пользователь найден

 	if ($nic_exists === TRUE) {

 		$this->validation->set_message('checknic',

 			'Пользователь с таким ником уже существует');

 		return false;

 	}

 	else {

 		return true;

 	}

 }

}

Страница с формой (userdata.php):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN">

<html xmlns="http://www.w3.org/1999/xhtml" lang="ru">

<head>

<title>Проверка введенных данных</title>

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

</head><body>

<?php echo form_open('main/checkdata'); ?>

<p>

<?php echo $this->validation->usernic_error; ?>

Ник: <input type="text" name="usernic" id="usernic"

value="<?php echo $this->validation->usernic; ?>" /></p>

<p>

<?php echo $this->validation->fullname_error; ?>

Полное имя: <input type="text" name="fullname" id="fullname"

value="<?php echo $this->validation->fullname; ?>" /></p>

<p>

<?php echo $this->validation->usermail_error; ?>

eMail: <input type="text" name="usermail" id="usermail"

value="<?php echo $this->validation->usermail; ?>" /></p>

<p><input type="submit" id="sendbtn" value="Отправить" /></p>

</form>

</body>

</html>

Главная страница сайта (index.php):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN">

<html xmlns="http://www.w3.org/1999/xhtml" lang="ru">

<head>

<title>Проверка введенных данных</title>

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

</head>

<body>

<p><?php echo anchor('main/userdata', 'Ввод персональных данных'); ?></p>

</body>

</html>

Как видите, пользоваться библиотекой довольно просто.

В следующий раз как выполнить эти же проверки с помощью ajax.

  • Одна небольшая поправка —
    функцию проверки следует назвать «checknic», а ее вызов в
    $rules[‘usernic’] = «…|callback_checknic»

    Т.е. наоборот.

    • Спасибо большое! Уже исправил.
      Кстати, работают оба варианта… Но, буду придерживаться официальной документации.

  • Одна небольшая поправка —
    функцию проверки следует назвать «checknic», а ее вызов в
    $rules[‘usernic’] = «…|callback_checknic»

    Т.е. наоборот.

    • Спасибо большое! Уже исправил.
      Кстати, работают оба варианта… Но, буду придерживаться официальной документации.

  • AStasy

    «Для использования form_open необходимо загрузить Form Helper» — возможно невнимательно читала, но не нашла, куда вписать строку $this->load->helper(‘form’);

    • Так же как и любой хелпер.
      Можно загрузить глобально для всего приложения. Для этого в файле application/config/autoload.php добавляем имя хелпера в массив $autoload['helper']. Имеет смысл, если хелпер используется очень часто во всех контроллерах.

      Можно загрузить только для выбранного контроллера. В этом случае, $this->load->helper(‘form’); добавляем в его конструктор. Удобно если хелпер используется во всех методах этого контроллера.

      Можно загрузить только для выбранного метода. $this->load->helper(‘form’); добавляем в начало нужного метода (до загрузки представления $this->load->view(…..)). Хелпер будет доступен только в данном методе.

      Т.к. формы используются обычно не на всех страницах, то, наверное, лучше всего третий вариант.
      Лучше не загружать хелперы и библиотеки, которые не используете, т.к. они потребляют память.

  • AStasy

    «Для использования form_open необходимо загрузить Form Helper» — возможно невнимательно читала, но не нашла, куда вписать строку $this->load->helper(‘form’);

    • Так же как и любой хелпер.
      Можно загрузить глобально для всего приложения. Для этого в файле application/config/autoload.php добавляем имя хелпера в массив $autoload['helper']. Имеет смысл, если хелпер используется очень часто во всех контроллерах.

      Можно загрузить только для выбранного контроллера. В этом случае, $this->load->helper(‘form’); добавляем в его конструктор. Удобно если хелпер используется во всех методах этого контроллера.

      Можно загрузить только для выбранного метода. $this->load->helper(‘form’); добавляем в начало нужного метода (до загрузки представления $this->load->view(…..)). Хелпер будет доступен только в данном методе.

      Т.к. формы используются обычно не на всех страницах, то, наверное, лучше всего третий вариант.
      Лучше не загружать хелперы и библиотеки, которые не используете, т.к. они потребляют память.

  • Владимир

    Отличная статейка!
    Но я бы хотел узнать как можно осуществить провекру значения допустим <input name=»id» value=?> непосредственно в момент ввода без использования методов гет и пост.
    К примеру я ввёл 1 (в валюе) и сразуже у меня в строке отобразилось 1000 или допустим в другой строке (инпуте) отобразилось Первый.

    • Без GET и POST, проверку можно сделать на стороне браузера с помощью JavaScript.
      Для этого к input'у добавляем обработчик события
      <input id=»field1" … onKeyPress=»showVal()» />
      И в заголовок страницы добавить функцию showVal() (название, конечно, может быть любое)
      <script type=»text/javascript»>
      function showVal() {
      var field = document.getElementById('field1');
      alert(field.value);
      }
      </script>

      Код функции может быть любым. К содержимому поля вы получаете доступ через свойство value.

  • Владимир

    Отличная статейка!
    Но я бы хотел узнать как можно осуществить провекру значения допустим <input name=»id» value=?> непосредственно в момент ввода без использования методов гет и пост.
    К примеру я ввёл 1 (в валюе) и сразуже у меня в строке отобразилось 1000 или допустим в другой строке (инпуте) отобразилось Первый.

    • Без GET и POST, проверку можно сделать на стороне браузера с помощью JavaScript.
      Для этого к input'у добавляем обработчик события
      <input id=»field1" … onKeyPress=»showVal()» />
      И в заголовок страницы добавить функцию showVal() (название, конечно, может быть любое)
      <script type=»text/javascript»>
      function showVal() {
      var field = document.getElementById('field1');
      alert(field.value);
      }
      </script>

      Код функции может быть любым. К содержимому поля вы получаете доступ через свойство value.

  • Владимир

    а без явы если, только если с помощью php?

  • Владимир

    а без явы если, только если с помощью php?

  • Владимир

    и кстати сказать скрип на яве немного не правильно работает, я ввожу 1 он отображет пустое окно, когда еще раз нажимаю 1 то он отображает окно с значением 1, но в поле то ввода уже 11, а не 1

    • Без JavaScript не получится. Скрипт на сервере, а форма — на локальном компьютере. Чтобы скрипт что-то проверил, ему нужно отправить данные. А запрос php скрипту можно отправить либо обычным способом (кнопка submit), либо с помощью AJAX, но AJAX — это асинхронных JavaScript 😉 .

      Не правильно работает

      Все там правильно 🙂 Вместо onKeyPress поставьте любое подходящее событие 😉

  • Владимир

    и кстати сказать скрип на яве немного не правильно работает, я ввожу 1 он отображет пустое окно, когда еще раз нажимаю 1 то он отображает окно с значением 1, но в поле то ввода уже 11, а не 1

    • Без JavaScript не получится. Скрипт на сервере, а форма — на локальном компьютере. Чтобы скрипт что-то проверил, ему нужно отправить данные. А запрос php скрипту можно отправить либо обычным способом (кнопка submit), либо с помощью AJAX, но AJAX — это асинхронных JavaScript 😉 .

      Не правильно работает

      Все там правильно 🙂 Вместо onKeyPress поставьте любое подходящее событие 😉

  • Владимир

    например

  • Владимир

    например

  • Владимир

    точнее где взять весь список действий чтобы определить из этого списка которое нужно имеено мне

  • Владимир

    точнее где взять весь список действий чтобы определить из этого списка которое нужно имеено мне

  • Владимир

    Ява:

    function showVal() {
    var field = document.getElementById('field1');
    //здесь я так понял переменой присваивается значение из формы

    //это не пашет, как же тогда присвоить переменой php $iddin значение field1.value
    }

    Мой скрипт:
    $id = mysql_query(«SELECT MAX(id) AS id FROM $userstable»);
    list($idd) = mysql_fetch_row($id);
    if ($iddin>$idd){$knopka=»disabled»;}
    else {$knopka=»enabled»;}

    В форме:

    //здесь обращение к функции

    иными словами необходимо присвоить переменой php значение из формы, чтобы сразуже сверить введеное значение в форму со значением из базы
    3-ий день мучаюсь не могу понять, буду очень благодарен если поставите на путь истенный

    • Вы путаете JavaScript (исполняется в браузере) и PHP скрипт (выполняется на сервере).
      Чтобы PHP скрипт получил значение переменной, ее нужно отправить в запросе (post или get).

      После того, как скрипт получит запрос, значение из поля будет находится в $_POST['имя поля'].

      Если вы хотите, чтобы проверки выполнялись во время набора текста нужно использовать AJAX. Т.е. отправлять запросы из JavaScript. Например, каждый раз, когда пользователь вводит символ, JavaScript функция будет отправлять запрос серверу (php скрипту) и проверять результат.

      Посмотрите этот пример (там три части).

  • Владимир

    Ява:

    function showVal() {
    var field = document.getElementById('field1');
    //здесь я так понял переменой присваивается значение из формы

    //это не пашет, как же тогда присвоить переменой php $iddin значение field1.value
    }

    Мой скрипт:
    $id = mysql_query(«SELECT MAX(id) AS id FROM $userstable»);
    list($idd) = mysql_fetch_row($id);
    if ($iddin>$idd){$knopka=»disabled»;}
    else {$knopka=»enabled»;}

    В форме:

    //здесь обращение к функции

    иными словами необходимо присвоить переменой php значение из формы, чтобы сразуже сверить введеное значение в форму со значением из базы
    3-ий день мучаюсь не могу понять, буду очень благодарен если поставите на путь истенный

    • Вы путаете JavaScript (исполняется в браузере) и PHP скрипт (выполняется на сервере).
      Чтобы PHP скрипт получил значение переменной, ее нужно отправить в запросе (post или get).

      После того, как скрипт получит запрос, значение из поля будет находится в $_POST['имя поля'].

      Если вы хотите, чтобы проверки выполнялись во время набора текста нужно использовать AJAX. Т.е. отправлять запросы из JavaScript. Например, каждый раз, когда пользователь вводит символ, JavaScript функция будет отправлять запрос серверу (php скрипту) и проверять результат.

      Посмотрите этот пример (там три части).

  • SKIff

    У меня тоже вопрос нарисовался. Вот, к примеру, первичная отрисовка формы производится методом index

    $this->load->view('form',$data)).

    А дальше, после сабмита, я попадаю в метод обработки данных формы. При этом, если всё верно введено, этот метод вызывает новую отрисовку формы с сообщением о том, что всё хорошо. Если ошибка, то отрисовку с сообщением об ошибках.

    //проверка, а потом
    $data['err']='Всё плохо';
    //Или
    $data['err']='Всё хорошо';
    $this->load->view('form',$data);

    Адрес первичной отрисовки формы site.com/admin/index
    Адрес проверки формы site.com/admin/check

    Проблема в том, что после проверки формы и последующей отрисовки, в адресной строке остаётся адрес метода ПРОВЕРКИ, то есть /admin/check, в то время, как мне нужен опять адрес отрисовки. Как-то это можно исправить?

    • Вариантов несколько.
      1) перенести код проверки формы в метод index(). Нужно будет дополнительно проверять пришли данные из формы или нет.
      2) использовать AJAX.

  • SKIff

    У меня тоже вопрос нарисовался. Вот, к примеру, первичная отрисовка формы производится методом index

    $this->load->view('form',$data)).

    А дальше, после сабмита, я попадаю в метод обработки данных формы. При этом, если всё верно введено, этот метод вызывает новую отрисовку формы с сообщением о том, что всё хорошо. Если ошибка, то отрисовку с сообщением об ошибках.

    //проверка, а потом
    $data['err']='Всё плохо';
    //Или
    $data['err']='Всё хорошо';
    $this->load->view('form',$data);

    Адрес первичной отрисовки формы site.com/admin/index
    Адрес проверки формы site.com/admin/check

    Проблема в том, что после проверки формы и последующей отрисовки, в адресной строке остаётся адрес метода ПРОВЕРКИ, то есть /admin/check, в то время, как мне нужен опять адрес отрисовки. Как-то это можно исправить?

    • Вариантов несколько.
      1) перенести код проверки формы в метод index(). Нужно будет дополнительно проверять пришли данные из формы или нет.
      2) использовать AJAX.

  • Михаил

    Я так и не могу найти скрипт Запроса к БД, который ищет пользователя с именем $nic именно на этом у меня загвоздка. Пожалуйста, очень прошу помочь мне!!!!!!!

    • А в статье этого запроса нет, просто его он зависит от структуры таблицы в БД, в которой хранятся данные о пользователях.

      Обычно он выглядит примерно так.

      SELECT * FROM имя_таблицы WHERE name=$nic

  • Михаил

    Я так и не могу найти скрипт Запроса к БД, который ищет пользователя с именем $nic именно на этом у меня загвоздка. Пожалуйста, очень прошу помочь мне!!!!!!!

    • А в статье этого запроса нет, просто его он зависит от структуры таблицы в БД, в которой хранятся данные о пользователях.

      Обычно он выглядит примерно так.

      SELECT * FROM имя_таблицы WHERE name=$nic

  • Михаил

    Спасибо БОЛЬШОЕ!!!!!!!,Владимир!!!!! Но у меня теперь появилась другая загвоздка — «что делать со строкой: ????????? Мой браузер (опера 9.50)при открытии страницы userdata.php выдаёт мне сообщение:»Fatal error: Call to undefined function form_open() in Z:homelocalhostwwwmainTMP416r7ejg2j.php on line 17»
    Я использую сервер «Denwer» Весь мой сайт находится в директории www»всё содержимое сайта здесь»…..! Возможно я не допонял что такое в form_open('main/checkdata')- main и checkdata

  • Михаил

    Спасибо БОЛЬШОЕ!!!!!!!,Владимир!!!!! Но у меня теперь появилась другая загвоздка — «что делать со строкой: ????????? Мой браузер (опера 9.50)при открытии страницы userdata.php выдаёт мне сообщение:»Fatal error: Call to undefined function form_open() in Z:\home\localhost\www\main\TMP416r7ejg2j.php on line 17»
    Я использую сервер «Denwer» Весь мой сайт находится в директории \www\»всё содержимое сайта здесь»…..! Возможно я не допонял что такое в form_open('main/checkdata')- main и checkdata

  • Михаил

    И в этих строчках:»
    $this->load->helper('form');
    и
    $this->load->library('validation');
    ('form') и ('validation') — это файлы которые нужно создавать самому или же они уже есть в самом «CodeIgniter» И если их нужно создавать самому , то что в них требуется прописать, и в каких директориях они должны будут храниться???????

  • Михаил

    И в этих строчках:»
    $this->load->helper('form');
    и
    $this->load->library('validation');
    ('form') и ('validation') — это файлы которые нужно создавать самому или же они уже есть в самом «CodeIgniter» И если их нужно создавать самому , то что в них требуется прописать, и в каких директориях они должны будут храниться???????

  • 1) обращение к сайту должно быть таким
    http://localhost/
    2) TMP416r7ejg2j.php — какой-то временный файл, к нему точно обращаться не нужно.
    3) ошибка «undefined function form_open()» возникает если не был загружен хелпер form
    4) main и checkdata — название контроллера и метода, который мы вызываем. При обращении к http://localhost/main/checkdata управление будет передано скрипту index.php, который находится в корне сайта. Этот скрипт прочитает параметры (main и checkdata) и вызовет метод checkdata контроллера main.
    5) form и validation — стандартные библиотеки (точнее хелперы) codeigniter, их самостоятельно создавать не нужно.

  • 1) обращение к сайту должно быть таким
    http://localhost/
    2) TMP416r7ejg2j.php — какой-то временный файл, к нему точно обращаться не нужно.
    3) ошибка «undefined function form_open()» возникает если не был загружен хелпер form
    4) main и checkdata — название контроллера и метода, который мы вызываем. При обращении к http://localhost/main/checkdata управление будет передано скрипту index.php, который находится в корне сайта. Этот скрипт прочитает параметры (main и checkdata) и вызовет метод checkdata контроллера main.
    5) form и validation — стандартные библиотеки (точнее хелперы) codeigniter, их самостоятельно создавать не нужно.

  • Михаил

    Используя правило '_checknic' точно так как Вы посоветовали в появляется результат : Error Number : 1054
    Unknown column 'Mike' in 'where clause'
    SELECT usernic FROM tbl_users WHERE usernic=$nic ;

    • Чтобы ответить на вопрос мне нужно увидеть скрипт целиком. И дамп базы тоже нужен.
      Так что, если есть желание — присылайте (vova_33(собака)gala.net), попробую помочь.

  • Михаил

    Используя правило '_checknic' точно так как Вы посоветовали в появляется результат : Error Number : 1054
    Unknown column 'Mike' in 'where clause'
    SELECT usernic FROM tbl_users WHERE usernic=$nic ;

    • Чтобы ответить на вопрос мне нужно увидеть скрипт целиком. И дамп базы тоже нужен.
      Так что, если есть желание — присылайте (vova_33(собака)gala.net), попробую помочь.

  • Андрей

    Вопрос: что если при первоначальной отрисовке формы мне нужно уже поставить какое-то значение в поле (например, редактирование записи), а в форме стоит, например,
    value="validation->fullname; ?>"
    Где и как правильно присвоить полю первоначальное значение?

    • Можно проверить установлена ли переменная validation->fullname; и, в зависимости от результата, вывести либо её, либо первоначальное значение.
      Но, дело в том, что эта статья написана больше года назад, а за это время многое изменилось. Например, новые версии CI вышли 😉
      В общем, начиная с версии 1.7 в CodeIgniter библиотека валидации форм серьезно изменилась. Т.е. в новой версии можно использовать функцию
      set_value('quantity', 'первоначальное значение');
      В первом параметре — имя поля, во втором — его начальное значение.
      Я уже писал об этих нововведениях.
      И, кстати, если хотите сравнить код проверки форм для разных версий CI, можете поэкспериментировать с генератором форм.

  • Вопрос: что если при первоначальной отрисовке формы мне нужно уже поставить какое-то значение в поле (например, редактирование записи), а в форме стоит, например,
    value="validation->fullname; ?>"
    Где и как правильно присвоить полю первоначальное значение?

    • Можно проверить установлена ли переменная validation->fullname; и, в зависимости от результата, вывести либо её, либо первоначальное значение.
      Но, дело в том, что эта статья написана больше года назад, а за это время многое изменилось. Например, новые версии CI вышли 😉
      В общем, начиная с версии 1.7 в CodeIgniter библиотека валидации форм серьезно изменилась. Т.е. в новой версии можно использовать функцию
      set_value('quantity', 'первоначальное значение');
      В первом параметре — имя поля, во втором — его начальное значение.
      Я уже писал об этих нововведениях.
      И, кстати, если хотите сравнить код проверки форм для разных версий CI, можете поэкспериментировать с генератором форм.

  • Михаил

    Владимир, вот мой контроллер:

    load->model('registraciamodel');

    }

    function index()

    {

    // $this->load->helper('form'); /* без этой строчки сайт будет загружаться через начальную(любого вида, какой я захочу) страницу с кнопкой для перехода на Главную страницу(index.html); т.е. будет загружаться предварительная страница перед тем, как зайти на главную страницу сайта */

    $this->load->view('index'); // index ; index..ud'

    // $this->load->helper(array('form', 'url'));

    // $this->load->library('validation');

    // if ($this->validation->run() == FALSE)
    // {
    // $this->load->view('registracia '); //indexudr ; vvedite_kod ;
    // }
    // else
    // {
    // $this->load->view('indexudr');
    // }

    /* $this->load->library('validation');

    $rules['usernicv'] = «trim|required|min_length[3]|callback_checknic»;

    $rules['usernamev'] = «trim|required|alpha»;

    $rules['userpwdv'] = «trim|required|min_length[6]|max_length[20]|alpha_numeric»;

    $this->validation->set_rules($rules);

    $fields['usernicv'] = «Логин«;

    $fields['usernamev'] = «Имя«;

    $fields['userpwd'] = «Пароль«;

    // $fields['usernicv'] = «Логин»;

    // $fields['usernamev'] = «Имя»;

    // $fields['userfamily'] = «Фамилия»;

    // $fields['userotchestvo'] = «Отчество»;

    // $fields['usertel'] = «Телефон»;

    // $fields['userpwdv'] = «Пароль»;

    // $fields['userpwdp'] = «Поттвердите пароль»;

    // $fields['useremail'] = «E-mail адрес»;

    $this->validation->set_fields($fields);

    if ($this->validation->run() == TRUE) {

    $this->load->view('pusk.html');
    }

    else {

    $this->load->helper('form');

    $this->load->view('index'); // registracia

    } */

    //$this->load->helper('form');

    //$this->load->view('registracia'); // vi_avtorizovani

    }

    //registracia — с ЭТИМ ЗНАЧЕНИЕМ НЕ ИДЁТ!
    function userdata() {

    $this->load->library('validation');

    $rules['usernicv'] = «trim|required|min_length[3]|callback_checknic»;

    $rules['useremailv'] = «trim|required|valid_email»;

    // $rules['usernamev'] = «trim|required|alpha»;

    $rules['userpwdv'] = «trim|required|min_length[6]|max_length[20]|alpha_numeric»;

    $this->validation->set_rules($rules);

    $fields['usernicv'] = «Логин«;

    // $fields['usernamev'] = «Имя«;

    $fields['userpwdv'] = «Пароль«;

    $fields['useremailv'] = «E-mail адрес«;

    $fields['daleev'] = «qqqq«;
    // $fields['usernicv'] = «Логин»;

    // $fields['usernamev'] = «Имя»;

    // $fields['userfamily'] = «Фамилия»;

    // $fields['userotchestvo'] = «Отчество»;

    // $fields['usertel'] = «Телефон»;

    // $fields['userpwdv'] = «Пароль»;

    // $fields['userpwdp'] = «Поттвердите пароль»;

    // $fields['useremail'] = «E-mail адрес»;

    $this->validation->set_fields($fields);

    if ($this->validation->run() == TRUE) {

    echo anchor('registraciac/daleev',»); //$this->= «Вход возможен»;value('$fields','daleev')
    // $this->load->view('pusk.html');

    }

    else {

    $this->load->helper('form');

    $this->load->view('index'); // registracia

    }

    //$this->load->helper('form');

    //$this->load->view('registracia'); // vi_avtorizovani

    }

    function checkdata() {

    $this->load->library('validation');

    $rules['usernic'] = «trim|required|min_length[3]|callback_checknic»;

    $rules['username'] = «trim|required|alpha»;

    $rules['userfamily'] = «required|alpha»;

    $rules['userotchestvo'] = «required|alpha»;

    $rules['usertel'] = «required»;

    $rules['userpwd'] = «trim|required|min_length[6]|max_length[20]|alpha_numeric|matches[userpwdp]»;

    $rules['userpwdp'] = «trim|required|min_length[6]|max_length[20]|alpha_numeric»;

    $rules['useremail'] = «trim|required|valid_email»;

    $this->validation->set_rules($rules);

    $fields['usernic'] = «Логин«;

    $fields['username'] = «Имя«;

    $fields['userfamily'] = «Фамилия«;

    $fields['userotchestvo'] = «Отчество«;

    $fields['usertel'] = «Телефон«;

    $fields['userpwd'] = «Пароль«;

    $fields['userpwdp'] = «Поттвердите пароль«;

    $fields['useremail'] = «E-mail адрес«;

    $this->validation->set_fields($fields);

    if ($this->validation->run() == TRUE) {

    //сохраняем введенные данные (например, в БД) стр.497 моей книги по Dreamweaver 8…
    // 1.Connecting DATABASE ;
    $this->load->database();

    // 2.INSERT INTO:
    // ****(ПЕРВЫЙ ВАРИАНТ)**** ; Работает как надо!;
    $query = $this->db->query(«INSERT INTO tbl_users(usernic,userfamily,username,userotchestvo,useremail,usertel,userpwd)VALUES('».$_POST['usernic'].»','».$_POST['userfamily'].»','».$_POST['username'].»','».$_POST['userotchestvo'].»','».$_POST['useremail'].»','».$_POST['usertel'].»','».$_POST['userpwd'].»');»);

    /* В форме регистрации нужно прописать точно такие же имена полей какие указаны в запросе: например: —> должно соответствовать запросу: '».$_POST['usertel'].»' ; */

    /* //****(ВТОРОЙ ВАРИАНТ) из CodeIgniter v_1.7****
    $sql = «INSERT INTO tbl_users (usernic, username)
    VALUES («.$this->db->escape($usernic).», «.$this->db->escape($username).»)»;

    $this->db->query($sql);

    echo $this->db->affected_rows(); */

    /* ****(ТРЕТИЙ ВАРИАНТ)**** //Set up connection to MySQL
    $host = «localhost»;
    $user = «['root']»; //zirjan85
    $pwd = «[»]»; //4061985
    $dbConn = mysql_connect($host,$user,$pwd);
    //Connect to knopka_g database
    $database = «ja»;
    mysql_select_db($database);
    $query_rs_insertUsers = «INSERT INTO tbl_users(usernic,userfamily,username,userotchestvo,useremail,usertel,userpwd)VALUES('».$_POST['usernic'].»','».$_POST['userfamily'].»','».$_POST['username'].»','».$_POST['userotchestvo'].»','».$_POST['useremail'].»','».$_POST['usertel'].»','».$_POST['userpwd'].»');»;
    $rs_insertUsers = mysql_query($query_rs_insertUsers);
    //header(«Location:vi_avtorizovani.php»); — Отправка пользователя на страницу:»vi_avtorizovani.php» */

    //……….

    //отправляем пользователя на главную страницу

    $this->load->view('vi_avtorizovani'); // indexudr — СМЫСЛ!

    }

    else {

    $this->load->helper('form');

    $this->load->view('registracia');

    }

    }

    /* function checknic($nic) { // ЕЩЁ НАПИСАТЬ КОД ДЛЯ ПОЛЯ «Пароль»!!!

    //тут должен быть запрос к БД, который ищет

    //пользователя с именем $nic. (Т.Е. извлекает массив данных(например, определённый столбец из всей таблицы)
    //определённого запроса из базы данных. */

    /* //Set up connection to MySQL
    $host = «localhost»;
    $user = «['root']»; //zirjan85
    $pwd = «[»]»; //4061985
    $dbConn = mysql_connect($host,$user,$pwd);
    //Connect to knopka_g database
    $database = «ja»;
    mysql_select_db($database); */

    // $this->load->database();

    /*$query = $this->db->get('tbl_users');

    foreach ($query->result() as $row)
    {
    echo $row->$nic;
    } */

    /*$query = $this->db->query(«SELECT $nic FROM tbl_users LIMIT 1;»); // WHERE usernic=$nic

    $row = $query->row();
    echo $row->$nic; // $nic */
    // $row = $query->row_array();
    // echo $row['$nic'];

    // $this->db->conn_id();
    // $query = $this->db->query(«SELECT usernic FROM tbl_users WHERE usernic=$nic ;»); //
    // $query->result_id;

    // $query_rs_selectUsers = «SELECT * FROM tbl_users WHERE usernic=$nic»;
    //$rs_selectUsers = mysql_query($query_rs_selectUsers);
    //header(«Location: vi_avtorizovani.php»);

    //……..

    //если пользователь найден
    //
    /* if ($nic_exists === TRUE) {

    $this->validation->set_message('checknic',

    'Пользователь с таким ником уже существует');

    return FALSE;

    }

    else {

    return TRUE;

    }

    } */

    function checknic($nic) {

    $this->load->database();

    $qGetNic = «SELECT * FROM tbl_users WHERE usernic=?»; // id=?; $nic; ;
    $res = $this->db->query($qGetNic, array($nic));
    $userData = $res->result_array();
    if ($userData_exists === TRUE/* 0; $nic*/) {

    //return false;

    $this->validation->set_message('checknic',

    'Пользователь с таким ником уже существует');

    return false;

    }

    else {
    return true; // $userData[$nic]

    }

    /* $fields['usernic'] = $this->registraciagmodel->getUserData($nic);
    if ($fields['usernic'] == $nic// false ;true) {

    $this->validation->set_message('checknic',

    'Пользователь с таким ником уже существует');

    return FALSE;

    // $pageData['userprov'] = «Выбранная книга не найдена»; //Выводим сообщение: set_message(ПОЛЬЗОВАТЕЛЬ С ТАКИМ НИКОМ НЕ НАЙДЕН!)['errDescription']
    }
    return TRUE;
    /* $pageData['title'] = $pageData['bookdetails']['title'];
    $this->load->view(«bookdetails», $pageData); */
    }

    /* Здесь должна быть ФУНКЦИЯ (function), которая проверяет: существует ли такой пользователь с таким ником и, соответствующим этому нику, паролем в базе данных!!!
    $this->load->library('validation');

    $rulesavt['usernic1'] = «trim|required|min_length[3]|callback_avt_checknic»;

    $rulesavt['userpwd1'] = «trim|required|min_length[6]|max_length[20]|alpha_numeric»; // В правиле «|matches['скрытое_поле']» НУЖНО УКАЗАТЬ СРАВНЕНИЕ СО СКРЫТЫМ ПОЛЕМ, В КОТОРОМ СРАВНИВАЮТСЯ ПО «ID»ЛОГИН И ПАРОЛЬ В БАЗЕ ДАННЫХ (по номеру «ID»)! Пусть база данных ВЫВЕДЕТ ID 'значения (Mike)' из поля «Логин» и ID 'значения (111@mi8544pwd)' из поля «Пароль» в скрытое поле! После пусть происходит проверка со скрытым полем …=»matches['ID']» */

    function zaregistriruites() {

    $this->load->helper('form');

    $this->load->view('registracia');

    }

    function uslsoglcss() {

    // $this->load->helper('form');

    // echo anchor(' $this->load->view('usloviya_soglascheniya.css')');

    }

    function polzovseitom() {

    // $this->load->helper('form');

    $this->load->library('validation');

    $rules['usernicavtv'] = «trim|required|min_length[3]|callback_checknic»;

    // $rules['useremailavtv'] = «trim|required|valid_email»;

    // $rules['usernamev'] = «trim|required|alpha»;

    $rules['userpwdavtv'] = «trim|required|min_length[6]|max_length[20]|alpha_numeric»;

    $this->validation->set_rules($rules);

    $fields['usernicavtv'] = «Логин«;

    // $fields['usernamev'] = «Имя«;

    $fields['userpwdavtv'] = «Пароль«;

    // $fields['useremailavtv'] = «E-mail адрес«;

    $this->validation->set_fields($fields);

    if ($this->validation->run() == TRUE) {
    // $this->load->helper('form');
    $this->load->view('vvedite_kod.html');
    }

    else {

    $this->load->helper('form');

    $this->load->view('vi_avtorizovani'); // registracia

    }

    }

    function daleev(){

    $this->load->helper('form');

    $this->load->view('pusk.html');
    }
    ///////////////////******Функции здесь заканчиваются******////////////////////
    }
    ?>

    База данных:

    — phpMyAdmin SQL Dump
    — version 2.6.1
    http://www.phpmyadmin.net

    — Хост: localhost
    — Время создания: Янв 29 2009 г., 22:48
    — Версия сервера: 5.0.45
    — Версия PHP: 5.2.4

    — БД: `ja`

    — ———————————————————


    — Структура таблицы `tbl_users`

    CREATE TABLE `tbl_users` (
    `userID` int(11) NOT NULL auto_increment,
    `usernic` varchar(30) NOT NULL,
    `userfamily` varchar(70) NOT NULL,
    `username` varchar(50) NOT NULL,
    `userotchestvo` varchar(50) NOT NULL,
    `useremail` varchar(50) NOT NULL,
    `usertel` varchar(50) NOT NULL,
    `userpwd` varchar(20) NOT NULL,
    `usergelanie` text NOT NULL,
    PRIMARY KEY (`userID`),
    KEY `userID` (`userID`),
    FULLTEXT KEY `usernic` (`usernic`),
    FULLTEXT KEY `usergelanie` (`usergelanie`)
    ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;


    — Дамп данных таблицы `tbl_users`

    INSERT INTO `tbl_users` (`userID`, `usernic`, `userfamily`, `username`, `userotchestvo`, `useremail`, `usertel`, `userpwd`, `usergelanie`) VALUES (1, 'Mike', 'Mikeov ', 'Michael', 'Mikovich', 'mike@list.ru', '8-962-205-00-80, 8-920-106-64-31,8-915-983-38-35', '1234pwd1234', 'Я желаю, чтоб у меня получилось реализовать задума…1');
    INSERT INTO `tbl_users` (`userID`, `usernic`, `userfamily`, `username`, `userotchestvo`, `useremail`, `usertel`, `userpwd`, `usergelanie`) VALUES (2, 'miha', 'Зырянов', 'Михаил', 'Сергеевич', 'zirjan85@mail.ru', '8-915-983-38-34, 8-915-983-38-36', '4061985@#64', 'Я желаю, чтоб у меня получилось реализовать задума…');
    INSERT INTO `tbl_users` (`userID`, `usernic`, `userfamily`, `username`, `userotchestvo`, `useremail`, `usertel`, `userpwd`, `usergelanie`) VALUES (3, », », », », », », », 'Я желаю, чтоб у меня получилось реализовать задуманные мной лучшие, жизненно-важные цели в ранее установленные мной сроки');

    • У меня огромная просьба — отправьте, пожалуйста, все это только в архиве по почте 🙂
      WordPress съедает некоторые символы, изменяет кавычки и т.п.

  • Михаил

    Владимир, вот мой контроллер:

    load->model('registraciamodel');

    }

    function index()

    {

    // $this->load->helper('form'); /* без этой строчки сайт будет загружаться через начальную(любого вида, какой я захочу) страницу с кнопкой для перехода на Главную страницу(index.html); т.е. будет загружаться предварительная страница перед тем, как зайти на главную страницу сайта */

    $this->load->view('index'); // index ; index..ud'

    // $this->load->helper(array('form', 'url'));

    // $this->load->library('validation');

    // if ($this->validation->run() == FALSE)
    // {
    // $this->load->view('registracia '); //indexudr ; vvedite_kod ;
    // }
    // else
    // {
    // $this->load->view('indexudr');
    // }

    /* $this->load->library('validation');

    $rules['usernicv'] = «trim|required|min_length[3]|callback_checknic»;

    $rules['usernamev'] = «trim|required|alpha»;

    $rules['userpwdv'] = «trim|required|min_length[6]|max_length[20]|alpha_numeric»;

    $this->validation->set_rules($rules);

    $fields['usernicv'] = «Логин«;

    $fields['usernamev'] = «Имя«;

    $fields['userpwd'] = «Пароль«;

    // $fields['usernicv'] = «Логин»;

    // $fields['usernamev'] = «Имя»;

    // $fields['userfamily'] = «Фамилия»;

    // $fields['userotchestvo'] = «Отчество»;

    // $fields['usertel'] = «Телефон»;

    // $fields['userpwdv'] = «Пароль»;

    // $fields['userpwdp'] = «Поттвердите пароль»;

    // $fields['useremail'] = «E-mail адрес»;

    $this->validation->set_fields($fields);

    if ($this->validation->run() == TRUE) {

    $this->load->view('pusk.html');
    }

    else {

    $this->load->helper('form');

    $this->load->view('index'); // registracia

    } */

    //$this->load->helper('form');

    //$this->load->view('registracia'); // vi_avtorizovani

    }

    //registracia — с ЭТИМ ЗНАЧЕНИЕМ НЕ ИДЁТ!
    function userdata() {

    $this->load->library('validation');

    $rules['usernicv'] = «trim|required|min_length[3]|callback_checknic»;

    $rules['useremailv'] = «trim|required|valid_email»;

    // $rules['usernamev'] = «trim|required|alpha»;

    $rules['userpwdv'] = «trim|required|min_length[6]|max_length[20]|alpha_numeric»;

    $this->validation->set_rules($rules);

    $fields['usernicv'] = «Логин«;

    // $fields['usernamev'] = «Имя«;

    $fields['userpwdv'] = «Пароль«;

    $fields['useremailv'] = «E-mail адрес«;

    $fields['daleev'] = «qqqq«;
    // $fields['usernicv'] = «Логин»;

    // $fields['usernamev'] = «Имя»;

    // $fields['userfamily'] = «Фамилия»;

    // $fields['userotchestvo'] = «Отчество»;

    // $fields['usertel'] = «Телефон»;

    // $fields['userpwdv'] = «Пароль»;

    // $fields['userpwdp'] = «Поттвердите пароль»;

    // $fields['useremail'] = «E-mail адрес»;

    $this->validation->set_fields($fields);

    if ($this->validation->run() == TRUE) {

    echo anchor('registraciac/daleev',»); //$this->= «Вход возможен»;value('$fields','daleev')
    // $this->load->view('pusk.html');

    }

    else {

    $this->load->helper('form');

    $this->load->view('index'); // registracia

    }

    //$this->load->helper('form');

    //$this->load->view('registracia'); // vi_avtorizovani

    }

    function checkdata() {

    $this->load->library('validation');

    $rules['usernic'] = «trim|required|min_length[3]|callback_checknic»;

    $rules['username'] = «trim|required|alpha»;

    $rules['userfamily'] = «required|alpha»;

    $rules['userotchestvo'] = «required|alpha»;

    $rules['usertel'] = «required»;

    $rules['userpwd'] = «trim|required|min_length[6]|max_length[20]|alpha_numeric|matches[userpwdp]»;

    $rules['userpwdp'] = «trim|required|min_length[6]|max_length[20]|alpha_numeric»;

    $rules['useremail'] = «trim|required|valid_email»;

    $this->validation->set_rules($rules);

    $fields['usernic'] = «Логин«;

    $fields['username'] = «Имя«;

    $fields['userfamily'] = «Фамилия«;

    $fields['userotchestvo'] = «Отчество«;

    $fields['usertel'] = «Телефон«;

    $fields['userpwd'] = «Пароль«;

    $fields['userpwdp'] = «Поттвердите пароль«;

    $fields['useremail'] = «E-mail адрес«;

    $this->validation->set_fields($fields);

    if ($this->validation->run() == TRUE) {

    //сохраняем введенные данные (например, в БД) стр.497 моей книги по Dreamweaver 8…
    // 1.Connecting DATABASE ;
    $this->load->database();

    // 2.INSERT INTO:
    // ****(ПЕРВЫЙ ВАРИАНТ)**** ; Работает как надо!;
    $query = $this->db->query(«INSERT INTO tbl_users(usernic,userfamily,username,userotchestvo,useremail,usertel,userpwd)VALUES('».$_POST['usernic'].»','».$_POST['userfamily'].»','».$_POST['username'].»','».$_POST['userotchestvo'].»','».$_POST['useremail'].»','».$_POST['usertel'].»','».$_POST['userpwd'].»');»);

    /* В форме регистрации нужно прописать точно такие же имена полей какие указаны в запросе: например: —> должно соответствовать запросу: '».$_POST['usertel'].»' ; */

    /* //****(ВТОРОЙ ВАРИАНТ) из CodeIgniter v_1.7****
    $sql = «INSERT INTO tbl_users (usernic, username)
    VALUES («.$this->db->escape($usernic).», «.$this->db->escape($username).»)»;

    $this->db->query($sql);

    echo $this->db->affected_rows(); */

    /* ****(ТРЕТИЙ ВАРИАНТ)**** //Set up connection to MySQL
    $host = «localhost»;
    $user = «['root']»; //zirjan85
    $pwd = «[»]»; //4061985
    $dbConn = mysql_connect($host,$user,$pwd);
    //Connect to knopka_g database
    $database = «ja»;
    mysql_select_db($database);
    $query_rs_insertUsers = «INSERT INTO tbl_users(usernic,userfamily,username,userotchestvo,useremail,usertel,userpwd)VALUES('».$_POST['usernic'].»','».$_POST['userfamily'].»','».$_POST['username'].»','».$_POST['userotchestvo'].»','».$_POST['useremail'].»','».$_POST['usertel'].»','».$_POST['userpwd'].»');»;
    $rs_insertUsers = mysql_query($query_rs_insertUsers);
    //header(«Location:vi_avtorizovani.php»); — Отправка пользователя на страницу:»vi_avtorizovani.php» */

    //……….

    //отправляем пользователя на главную страницу

    $this->load->view('vi_avtorizovani'); // indexudr — СМЫСЛ!

    }

    else {

    $this->load->helper('form');

    $this->load->view('registracia');

    }

    }

    /* function checknic($nic) { // ЕЩЁ НАПИСАТЬ КОД ДЛЯ ПОЛЯ «Пароль»!!!

    //тут должен быть запрос к БД, который ищет

    //пользователя с именем $nic. (Т.Е. извлекает массив данных(например, определённый столбец из всей таблицы)
    //определённого запроса из базы данных. */

    /* //Set up connection to MySQL
    $host = «localhost»;
    $user = «['root']»; //zirjan85
    $pwd = «[»]»; //4061985
    $dbConn = mysql_connect($host,$user,$pwd);
    //Connect to knopka_g database
    $database = «ja»;
    mysql_select_db($database); */

    // $this->load->database();

    /*$query = $this->db->get('tbl_users');

    foreach ($query->result() as $row)
    {
    echo $row->$nic;
    } */

    /*$query = $this->db->query(«SELECT $nic FROM tbl_users LIMIT 1;»); // WHERE usernic=$nic

    $row = $query->row();
    echo $row->$nic; // $nic */
    // $row = $query->row_array();
    // echo $row['$nic'];

    // $this->db->conn_id();
    // $query = $this->db->query(«SELECT usernic FROM tbl_users WHERE usernic=$nic ;»); //
    // $query->result_id;

    // $query_rs_selectUsers = «SELECT * FROM tbl_users WHERE usernic=$nic»;
    //$rs_selectUsers = mysql_query($query_rs_selectUsers);
    //header(«Location: vi_avtorizovani.php»);

    //……..

    //если пользователь найден
    //
    /* if ($nic_exists === TRUE) {

    $this->validation->set_message('checknic',

    'Пользователь с таким ником уже существует');

    return FALSE;

    }

    else {

    return TRUE;

    }

    } */

    function checknic($nic) {

    $this->load->database();

    $qGetNic = «SELECT * FROM tbl_users WHERE usernic=?»; // id=?; $nic; ;
    $res = $this->db->query($qGetNic, array($nic));
    $userData = $res->result_array();
    if ($userData_exists === TRUE/* 0; $nic*/) {

    //return false;

    $this->validation->set_message('checknic',

    'Пользователь с таким ником уже существует');

    return false;

    }

    else {
    return true; // $userData[$nic]

    }

    /* $fields['usernic'] = $this->registraciagmodel->getUserData($nic);
    if ($fields['usernic'] == $nic// false ;true) {

    $this->validation->set_message('checknic',

    'Пользователь с таким ником уже существует');

    return FALSE;

    // $pageData['userprov'] = «Выбранная книга не найдена»; //Выводим сообщение: set_message(ПОЛЬЗОВАТЕЛЬ С ТАКИМ НИКОМ НЕ НАЙДЕН!)['errDescription']
    }
    return TRUE;
    /* $pageData['title'] = $pageData['bookdetails']['title'];
    $this->load->view(«bookdetails», $pageData); */
    }

    /* Здесь должна быть ФУНКЦИЯ (function), которая проверяет: существует ли такой пользователь с таким ником и, соответствующим этому нику, паролем в базе данных!!!
    $this->load->library('validation');

    $rulesavt['usernic1'] = «trim|required|min_length[3]|callback_avt_checknic»;

    $rulesavt['userpwd1'] = «trim|required|min_length[6]|max_length[20]|alpha_numeric»; // В правиле «|matches['скрытое_поле']» НУЖНО УКАЗАТЬ СРАВНЕНИЕ СО СКРЫТЫМ ПОЛЕМ, В КОТОРОМ СРАВНИВАЮТСЯ ПО «ID»ЛОГИН И ПАРОЛЬ В БАЗЕ ДАННЫХ (по номеру «ID»)! Пусть база данных ВЫВЕДЕТ ID 'значения (Mike)' из поля «Логин» и ID 'значения (111@mi8544pwd)' из поля «Пароль» в скрытое поле! После пусть происходит проверка со скрытым полем …=»matches['ID']» */

    function zaregistriruites() {

    $this->load->helper('form');

    $this->load->view('registracia');

    }

    function uslsoglcss() {

    // $this->load->helper('form');

    // echo anchor(' $this->load->view('usloviya_soglascheniya.css')');

    }

    function polzovseitom() {

    // $this->load->helper('form');

    $this->load->library('validation');

    $rules['usernicavtv'] = «trim|required|min_length[3]|callback_checknic»;

    // $rules['useremailavtv'] = «trim|required|valid_email»;

    // $rules['usernamev'] = «trim|required|alpha»;

    $rules['userpwdavtv'] = «trim|required|min_length[6]|max_length[20]|alpha_numeric»;

    $this->validation->set_rules($rules);

    $fields['usernicavtv'] = «Логин«;

    // $fields['usernamev'] = «Имя«;

    $fields['userpwdavtv'] = «Пароль«;

    // $fields['useremailavtv'] = «E-mail адрес«;

    $this->validation->set_fields($fields);

    if ($this->validation->run() == TRUE) {
    // $this->load->helper('form');
    $this->load->view('vvedite_kod.html');
    }

    else {

    $this->load->helper('form');

    $this->load->view('vi_avtorizovani'); // registracia

    }

    }

    function daleev(){

    $this->load->helper('form');

    $this->load->view('pusk.html');
    }
    ///////////////////******Функции здесь заканчиваются******////////////////////
    }
    ?>

    База данных:

    — phpMyAdmin SQL Dump
    — version 2.6.1
    http://www.phpmyadmin.net

    — Хост: localhost
    — Время создания: Янв 29 2009 г., 22:48
    — Версия сервера: 5.0.45
    — Версия PHP: 5.2.4

    — БД: `ja`

    — ———————————————————


    — Структура таблицы `tbl_users`

    CREATE TABLE `tbl_users` (
    `userID` int(11) NOT NULL auto_increment,
    `usernic` varchar(30) NOT NULL,
    `userfamily` varchar(70) NOT NULL,
    `username` varchar(50) NOT NULL,
    `userotchestvo` varchar(50) NOT NULL,
    `useremail` varchar(50) NOT NULL,
    `usertel` varchar(50) NOT NULL,
    `userpwd` varchar(20) NOT NULL,
    `usergelanie` text NOT NULL,
    PRIMARY KEY (`userID`),
    KEY `userID` (`userID`),
    FULLTEXT KEY `usernic` (`usernic`),
    FULLTEXT KEY `usergelanie` (`usergelanie`)
    ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;


    — Дамп данных таблицы `tbl_users`

    INSERT INTO `tbl_users` (`userID`, `usernic`, `userfamily`, `username`, `userotchestvo`, `useremail`, `usertel`, `userpwd`, `usergelanie`) VALUES (1, 'Mike', 'Mikeov ', 'Michael', 'Mikovich', 'mike@list.ru', '8-962-205-00-80, 8-920-106-64-31,8-915-983-38-35', '1234pwd1234', 'Я желаю, чтоб у меня получилось реализовать задума…1');
    INSERT INTO `tbl_users` (`userID`, `usernic`, `userfamily`, `username`, `userotchestvo`, `useremail`, `usertel`, `userpwd`, `usergelanie`) VALUES (2, 'miha', 'Зырянов', 'Михаил', 'Сергеевич', 'zirjan85@mail.ru', '8-915-983-38-34, 8-915-983-38-36', '4061985@#64', 'Я желаю, чтоб у меня получилось реализовать задума…');
    INSERT INTO `tbl_users` (`userID`, `usernic`, `userfamily`, `username`, `userotchestvo`, `useremail`, `usertel`, `userpwd`, `usergelanie`) VALUES (3, », », », », », », », 'Я желаю, чтоб у меня получилось реализовать задуманные мной лучшие, жизненно-важные цели в ранее установленные мной сроки');

    • У меня огромная просьба — отправьте, пожалуйста, все это только в архиве по почте 🙂
      WordPress съедает некоторые символы, изменяет кавычки и т.п.

  • Terry

    //отправляем пользователя на главную страницу
    $this->load->view('index');

    наверное не отправляем, а загружаем… думаю не очень хорошо, так как: в адресной строке так и останеться checknic и если нажать F5 то данные опять отправяться (а это может вызвать ощибку, или повторное выполнение действия).

    Возможно я не прав. Если всетаки не прав, обьсните пожалуйста)

    • Да, вы правы. Не удачный комментарий.
      Сначала я думал использовать редирект и забыл исправить.

      Наверное, лучше всего звучать будет:
      //показываем пользователю главную страницу

  • Terry

    //отправляем пользователя на главную страницу
    $this->load->view('index');

    наверное не отправляем, а загружаем… думаю не очень хорошо, так как: в адресной строке так и останеться checknic и если нажать F5 то данные опять отправяться (а это может вызвать ощибку, или повторное выполнение действия).

    Возможно я не прав. Если всетаки не прав, обьсните пожалуйста)

    • Да, вы правы. Не удачный комментарий.
      Сначала я думал использовать редирект и забыл исправить.

      Наверное, лучше всего звучать будет:
      //показываем пользователю главную страницу

  • Алексей

    Владимир, а как вы решаете задачу проверки полей ввода field[] (т.е. которые потом приходят в контроллер в виде массива) ?

    Validation вроде бы не работает с массивами, да и потом если надо около каждого поля выводить свою ошибку, то тоже не понятно как быть.

  • Дмитрий

    Здравствуйте. Я не слишком разбираюсь в Код Игнайтэре пока что, но уже усвоил что в объектном прораммировании используются специальные слова типа «public» «protected» и т.п. при объявлении функций. Почему вы не используете их? И еще вопрос. В начале вы приводите основной контроллер, в котором есть функция main выполняющая функции конструктора. Почему вы не используете функцию __cunstruct?

    • Тут дело в исторических причинах (обратите внимание, эта статья была написана в начале 2008 года). PHP4, в отличии от PHP5, не поддерживал в полной мере ООП. И на тот момент, поддержка PHP4 считалась преимуществом (ну, или по крайней мере, не лишней). Использование public, protected, __cunstruct автоматически требует PHP5.

      Поэтому использовались различные хаки. Например, в CI методы, имена которых начинаются с символа подчеркивания (_) считаются приватными (private).

      На сегодняшний день вы можете спокойно использовать все возможности PHP5.