Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ekz.docx
Скачиваний:
0
Добавлен:
01.01.2024
Размер:
2.43 Mб
Скачать

Пример. Передача данных

<!DOCTYPE html>

<html> <head></head>

<body>

<form action="" method="POST">

Ваше имя <input type="text" name="name"><br>

Ваша фамилия <input type="text" name="surname"><br>

<input type="checkbox" name="version">расширенная версия<br>

<input type="submit" name="button" value="Да! ">

</form>

<?php

if (isset($_POST["button"])){// если нажали на кнопку с именем button

echo "Поздравляю, ".$_POST['name']." ".$_POST['surname']. ",<br>

скрипт, передающий данные из формы, заработал! ";

if (isset($_POST["version"])) echo "Выбрана расширенная версия.";

}

?>

</body> </html>

В языке PHP имеется ряд суперглобальных массивов:

$_SERVER – содержит переменные, установленные web-сервером либо напрямую связанные с окружением выполнения текущего скрипта;

$_ENV – содержит переменные окружения;

$_REQUEST – содержит переменные, передаваемые скрипту через методы GET, POST, cookies.

Например, определить IP-адрес посетителя, можно написав:

<?echo $_SERVER["REMOTE_ADDR"] ?>

22..PHP. Cookies. Синтаксис и пример регистрации данных.

PHP – серверный скриптовый язык программирования.

Протокол TCP/IP не позволяет поддерживать постоянное соединение с web-сервером. Имитировать постоянное соединение можно используя механизмы COOKIES или сессий. При использовании COOKIES данные записываются в специальные файлы, которые хранятся на компьютере пользователя. Недостаток COOKIES в том, что пользователь в параметрах браузера может запретить их использование. В этом случае не будут работать те функции сайта, которые используют COOKIES. Поэтому не рекомендуется ключевые функции сайта реализовывать с их помощью.

Регистрацию данных в COOKIES выполняет функция:

setcookie(имя, значение, срок действия, путь, домен, защищённость);

Все параметры, кроме имени cookie, являются необязательными.

Например, установить cookie с именем и фамилией посетителя, которые он ранее ввел в поле формы.

$value = $_POST["name"]."||".$_POST["surname"];

setcookie("my_cookie", $value, time() + 3600 * 24 * 5, "/", ".somesrv.com", 1);

23.Php. Сессия. Основные методы. Примеры.

PHP – серверный скриптовый язык программирования.

Протокол TCP/IP не позволяет поддерживать постоянное соединение с web-сервером. Имитировать постоянное соединение можно используя механизмы COOKIES или сессий.

Сессия открывается с помощью функции session_start(), создающей специальный служебный файл с именем, соответствующим идентификатору сессии (сокращенно SID), в который впоследствии будут записаны все данные, связанные с текущей сессией. Также эта функция используется для продолжения текущей сессии. То есть, если для данного пользователя файл создан, то функция session_start() не будет создавать новый файл, а просто откроет существующий.

Доступ к данным сессии можно получить через суперглобальный массив $_SESSION. Регистрация данных в сессию:

<?php session_start(); $_SESSION['name'] = "Алесь Васильков"; ?>

Теперь на любой странице данного сайта можно обратиться к посетителю по имени:

<?php session_start(); echo "You are ".$_SESSION['name']; ?>

Если требуется уничтожить какой-то элемент в текущей сессии, то следует использовать функцию unset($_SESSION['имя_элемента']):

unset($_SESSION['name']);

Завершает работу сессии функция session_destroy(). Она уничтожает файл, связанный с текущей сессией. Если необходимо обнулить все значения, хранящиеся в сессии, то следует вызвать функцию session_unset(), которая уничтожит все элементы в суперглобальном массиве $_SESSION.

Авторизация с помощью сессий

Форма для авторизации хранится в файле admin.html. Данные из формы обрабатываются скриптом access.php. В случае успешной авторизации происходит перенаправление на файл index.php (index.php работает только, если пользователь авторизовался).

Пример авторизации

HTML-код (admin.html)

<form name= "loginForm" action= "access.php " method= "POST">

<table>

<tr><td></td><td> Авторизация </td> </tr>

<tr><td> имя</td> <td><input type="text" name="login" ></td> </tr>

<tr><td>пароль</td><td><input type="password" name="psw"></td> </tr>

<tr><td></td>

<td><input type="submit" name="submit" value="Войти"></td></tr>

</table>

</form>

<script> document.loginForm.login.focus(); </script>

Обработчик (access.php)

<?php

function authorize ($login,$psw){

if($login=="l"&&$psw=="p") return 1;

else return 0; }

session_start();

if($_POST['submit']){

if (authorize ($_POST['login '],$_POST['psw'])){

$_SESSION['user_id']=1;

// если авторизовался, переходим на основной модуль

echo "<html><head><META HTTP–EQUIV='Refresh'

CONTENT ='0; URL=http://localhost/ index.php'>

</head> </html>" ;}

else { echo "Неверный пароль";}}

?>

24.PHP. Взаимодействие с СУБД.

PHP – серверный скриптовый язык программирования.

В языке PHP имеется ряд модулей («extensions») для взаимодействия с различными СУБД. По умолчанию при установке интерпретатора они могут быть отключены. Для подключения необходимо в конфигурационном файле «php.ini» раскомментировать соответствующую строку и перезапустить сервер. На рисунке приведен алгоритм взаимодействия с СУБД на примере MySQL.

Пусть имеется база данных list таблица следующей структуры:

CREATE TABLE tbl(

id int(10) unsigned NOT NULL auto_increment primary key,

name varchar(45) NOT NULL, #название

ord int(10) unsigned NOT NULL # номер

);

Для взаимодействия от имени веб-сервера в СУБД создан пользователь с именем user_name и паролем user_psw, имеющий привилегии для работы с базой данных list. Требуется организовать возможность просмотра через веб-интерфейс записей из данной таблицы по страницам по 5 записей на каждой странице.

Данная задача решается по этапам.

Установка соединения с СУБД:

<? // параметры соединения с базой данных

$host = "localhost";

$user = "user_name";

$pass = "user_psw";

$db = "list";

mysql_connect ( $host, $user, $pass ) or die ( "Нет соединения с MySQL сервером :

".mysql_error());

mysql_query("SET CHARACTER SET cp1251");

mysql_select_db( $db ) or die ( "Нет соединения с базой данных : ".mysql_error()); ?>

Вывод всех записей из таблицы (без постраничной навигации):

<?$query="SELECT name,ord FROM tbl ORDER BY ord"; //echo $query;

$result=mysql_query($query) or die(mysql_error());

$all =MYSQL_NUMROWS($result); // сколько всего записей

echo "<b>Всего :</b> $all";

if ($all>0){//если есть данные то выводим им

echo"<table border=1 width=100% cellpadding=0 cellspacing=0>

<tr><td width='40'>Номер</td><td>Название</td></tr>";

while($array = mysql_fetch_array($result, MYSQL_ASSOC)){

echo "<tr><td width='40'>$array[ord]</td>

<td> $array[name]</td></tr>";

}

?></table><?

}?>

Затем необходимом перейти непосредственно к постраничному выводу. Для извлечения данных определенной страницы из базы данных используется конструкция LIMIT оператора SELECT. Необходимо знать номер страницы и количество записей на странице. Номер страницы будем передавать в адресной строке, а для хранения количества записей на странице введем переменную $record_on_page. Значение переменных будут определяться следующим образом:

if (!isset($_GET['page'])) $_GET['page']=0;

$record_on_page=5;

Добавим к запросу конструкцию LIMIT следующим образом:

$query.=" LIMIT ".$_GET['page']*$record_on_page.", $record_on_page";

Далее будут выводиться записи соответствующей страницы. И тут появляется самая сложная проблема – нужно знать, сколько всего записей находится в таблице (либо сколько записей удовлетворяет условию поиска, если запрос содержит конструкцию WHERE ). А запрос теперь выдает столько записей, сколько указано в переменной $record_on_page. Для решения данной проблемы необходимо воспользоваться следующим приемом: добавить в sql–запрос опцию SQL_CALC_FOUND_ROWS, затем с помощью функции FOUND_ROWS() получить это количество записей. Таким образом, код скрипта, выполняющий вывод записей преобразуется:

$query="SELECT SQL_CALC_FOUND_ROWS name, ord FROM tbl

ORDER BY ord LIMIT ".$_GET['page']*$record_on_page.", $record_on_page";//echo $query;

$result=mysql_query($query) or die(mysql_error());

//считаем сколько всего данных

$res=mysql_query("SELECT FOUND_ROWS() as number;") or die(mysql_error());

$all=mysql_result($res,0,"number");

echo "<b>Всего :</b> $all";

$all_in_page=MYSQL_NUMROWS($result);

if ($all_in_page>0){//если есть данные то выводим им

echo"<table border=1 width=100% cellpadding=0 cellspacing=0>

<tr><td width='40'>Номер </td><td>Название</td></tr>";

while($array = mysql_fetch_array($result, MYSQL_ASSOC)){

echo "<tr><td width='40'>$array[ord]</td>

<td> $array[name]</td></tr>";

}

?></table><?

}

Вывод на экран элемента перехода по страницам:

echo " <div>Страницы: [ ";

for($i=0; $i<ceil($all/$record_on_page);){

if ($i+1==$_GET['page']+1) echo "<span >".++$i." </span>";

else echo "<a href='".$action."?page=$i'>".++$i." </a>";

}

echo " ]</div>";

В переменной $action хранится URL страницы.

25. ООП в PHP. Создание классов и объектов. Конструктор и toString(). Примеры.

ООП –область програмирование в основе которой лежат классы объекты методы и функции работы с ними.

Описание классов в языке PHP:

class имя_класса {

свойства;

методы;

};

Создание экземпляра класса:

$имя_переменной=new имя_класса();

Имя функции-конструктора в языке PHP: __construct().

В классах на PHP принято создавать функцию __toString(), которая возвращает строковое описание объекта, т.е. вывод значений его свойств. Благодаря ей можно вывести с помощью оператора echo экземпляр класса.

Наследование:

class имя_класса_потомка extends имя_класса_предка {

свойства;

методы;

};

Пример. Вывод прайс-листа в зависимости от привилегии пользователя

// Создадим базовый класс price_list, который будет содержать

// свойство $price_list, для хранения массива

// конструктор, инициализирующий массив

// абстрактный метод для вывода массива (прайс-листа)

<?php

abstract class price_list{ // базовый класс

protected $price_list; // прайс-лист

function __construct($price_list_mess){ //конструктор

$this->price_list = $price_list_mess;}

abstract function __toString();//функция вывода

};

// Создадим два класса, наследующих базовый класс,

// но функция вывода в каждом из них будет определена по-своему

class show_price_list extends price_list{ // для продавца

function __toString(){ // описание функции вывода для продавца

// Будем осуществлять вывод не на web-страницу, а в буфер.

ob_start();

?><ol><?php

foreach($this->price_list as $index=>$val)

echo “<li>$index $val </li>”;

?></ol><?php

$a=ob_get_contents(); // получаем содержимое буфера

ob_end_clean(); // очищаем буфер

return $a; }

}

class show_edit_price_list extends price_list{ // для администратора

function __toString(){ // описание функции вывода для администратора

ob_start();?>

<form action="" method= "POST" ><table><?php

foreach($this->price_list as $index=>$val)

echo "<tr><td>$index</td><td><input type=’text’ name=’$index’

value=’$val’></td></tr> ";

?></table><input type= "submit" value= "Сохранить" />

</form><?php

$a=ob_get_contents(); ob_end_clean();

return $a;}

};

?>

<?php session_start(); $_SESSION["us_g"]=3;

$price_list= array("бананы" => "1,5", "помидоры" => "2");

// Определяем тип переменной $price_ block

// в зависимости от категории пользователя

switch($_SESSION["us_g"]){

case 1: $price_block=new show_price_list($price_list);break;

case 2: $price_block =new show_edit_price_list($price_list); break;

default: $price_block = "ТЕБЕ НЕЛЬЗЯ СМОТРЕТЬ ПРАЙС-ЛИСТ!!!"; };

?>

<!DOCTYPE html>

<html>

<head></head>

<body><?echo $price_block;?></body>

</html>

26.\27 ООП в PHP. Наследование и полиморфизм. Примеры.

ООП –область програмирование в основе которой лежат классы объекты методы и функции работы с ними.

Создание экземпляра класса:

$имя_переменной=new имя_класса();

Имя функции-конструктора в языке PHP: __construct().

В классах на PHP принято создавать функцию __toString(), которая возвращает строковое описание объекта, т.е. вывод значений его свойств. Благодаря ей можно вывести с помощью оператора echo экземпляр класса.

Есть 3 принципа ООП: инкапсуляция, полиморфизм и наследование.

Инкапсуляция – механизм, при котором данные и код, который ими манипулирует, объединены, а также обеспечивается их защита.

Примером инкапсуляции являются классы:

class имя_класса {

свойства;

методы;

};

Полиморфизм – механизм, при котором функции могут иметь одинаковые имена, но разные параметры.

abstract class Publication {

abstract public function do_print();

}

class News extends Publication {

public function do_print() {

echo '<h4>Новость</h4>';

}

}

Наследование – механизм, при котором дочерние классы наследуют свойства и методы родительских.

class имя_класса_потомка extends имя_класса_предка {

свойства;

методы;

};

29. Структура программы для Java. Типы и синтаксис объявления переменной.

Типы данных и объявления переменных. Чтобы использовать переменные в программе, их нужно объявить, указав имя и тип данных. При объявлении переменная размещается в памяти, объемом, достаточным для хранения значения заданного типа.

Синтаксис объявления переменных в языке Java:

type identifier;

type identifier1, identifier2, ...,

identifierN; // объявление нескольких переменных типа

type type identifier = initialValue;

type identifier1 = initValue1, ..., identifierN = initValueN; /*объявление с инициализацией нескольких переменных типа type */

Типы данных в языке Java делятся на две категорииs: primitive types (int, double) и reference types (объекты и массивы). В таблице приведены primitive types языка Java.

30. Типы данных и классы-оболочки в Java.

ava является «строго типизированным» языком программирования. Это означает, что переменная объявляется с определенным типом данных и может содержать значения только этого типа. Тип переменной не может быть изменен внутри программы после ее объявления. Переменные могут быть один раз объявлены в любом месте программы, но до того как они будут использованы. Константы – это не модифицируемые переменные, объявленные с помощью ключевого слова final. Их значение не может быть изменено в ходе выполнения программы. Константы должны быть проинициализированы при объявлении. Пример: final double PI = 3.1415926; Соглашения по именованию констант: Использовать слова, написанные символами верхнего регистра, разделенные «_». Например, MIN_VALUE, MAX_SIZE.

31.Классификация операций в Java. Синтаксис и примеры.

32. Java. Условные, циклические операторы и операторы выбора. Синтаксис и примеры.

Условные операторы.

if ( booleanExpression )

{ true-block ; }

else

{ false-block ; }

booleanExpr ? trueExpr : falseExpr

33.Java. Потоки ввода-вывода. Примеры использования методов для считывания данных.

Ввод данных с клавиатуры с использованием класса Scanner. В языке Java, как и в других языка программирования, поддерживается три стандартных потока ввода/вывода:

System.in,

System.out,

System.err

. System.in по умолчанию связан с клавиатурой; в то время как System.out и System.err – с консолью. Они могут быть перенаправлены на другие устройства, например, часто System.err перенаправляется на файл на диске, чтобы сохранять сообщения об ошибках. В Java SE 5 для форматного ввода в пакете java.util представлен класс Scanner. Можно создать экземпляр класса Scanner для ввода из потока System.in (с клавиатуры), и использовать методы nextInt(), nextDouble(), next() для считывания следующего значения типа int, double или String (разделенных пробелами, знаками табуляции или переводом строки) соответственно.

Можно использовать метод nextLine() для считывания строки целиком, включая пробелы, но без символа перевода строки.

35. Java. Основные понятия для работы с массивом. Cоздание одномерного массива.

Массив – это упорядоченная коллекция элементов одного типа, идентифицируемых [ ].

Чтобы использовать массив в программе его необходимо объявить, указав имя и тип, и определить – выделить память под его элементы, используя оператор new. В качестве имен массивов рекомендуется использовать существительные во множественном числе.

Объявить массив marks int[] marks;

Определить массив marks

выделить память для 5 элементов: marks = new int[5];

Объявить целочисленный массив factors и выделить память для хранения 20 его элементов:

int[] factors = new int[20];

Объявить целочисленный массив numbers, выделить память для хранения 6-ти его элементов (размер определяется согласно количеству элементов, указанных в списке инициализации), проинициализировав их начальными значениями, указанными в списке: int[] numbers = {11, 22, 33, 44, 55, 66};

Индексация массивов в Java начинается с 0. Присвоить значения элементам массива marks можно: marks[0] = 95; marks[1] = 85;

Вывод значений элементов массива marks:

System.out.println(marks[0]);

System.out.println(marks[3] + marks[4]

36.Java. Двумерный массив. Пример инициализации и вывода на экран.

Многомерные массивы в Java. Как и в языке С, многомерные массивы в Java как массив, элементами которого являются массивы, причем каждый из элементов-массивов может иметь разную длину.

Объявить и выделить память под элементы двумерного массива можно: int grid[][] = new int[3][4]; Объявление с инициализацией: int[][] grid = { {1, 2}, {3, 4, 5}, {6, 7, 8, 9} };

Доступ к элементам двумерного массива осуществляется через два индекса: grid[0][0] = 8; grid[1][1] = 5;

Вывод длины:

System.out.println(grid.length);

System.out.println(grid[0].length);

37. Строка. Особенности в Java. Способы создания.

Работа сос строками в Java Строка в Java – это объект класса String, входящего в состав пакета java.lang, представляет собой неизменную последовательность Unicode-символов. String имеет свои особенности по сравнению с другими классами. Строковое значение не может быть изменено в ходе выполнения программы. Методы данного объекта возвращают новое строковое значение. Например, метод toUpperCase() создаст и вернет новую строку, содержащую преобразованное к верхнему регистру значение, но исходную строку не изменит. В Java есть специальные классы StringBuffer и StringBuilder, которые допускают изменения в строке. Оператор + для данного класса перегружен и работает по следующему принципу, если два операнда типа Strings, то выполняется контактенация строк, если один из операндов имеет числовое значение, то он преобразуется с типу Strings и также выполняется контактенация. Строковые значения можно заключаются в двойные кавычки, создавая так называемый строковый литерал, и непосредственно присваиваются строковой переменной без вызова конструктора и создания экземпляра класса.

Создать строку можно:

String str1 = "Hello";

String str2 = new String("Hello");

38.Java. Преобразование строки в число. Методы для работы со строками.

39.ООП в Java: принципы, понятия класса и объекта. Примеры.

40. Java. Создание объекта. Конструктор и его перегрузка. Примеры.

41. Java. Getter и Setter методы. Ключевое слово this. Метод toString(). Примеры.

Getter и Setter методы. Исходя из принципов ООП. Переменные члены класса должны быть скрыты от внешнего мира. Доступ к ним в языке Java принято обеспечивать через getter- и setter-методы. Переменная объявляется как public, только в случае наличия существенных причин. Getter-методы объявляются как public и возвращают значения переменных, при этом они не должны их модифицировать. Setter-методы также объявляются как public и предназначены для установки значений переменным, при этом они должны обеспечить валидацию данных, приведение их к требуемому внутреннему формату

Ключевое слово this. Иногда требуется, чтобы метод ссылался на вызвавший его объект. Для ссылки на текущий объект внутри любого его метода можно использовать ключевое слово this. Одним из направлений использования данного ключевого слова так же является устранение неоднозначности.

Метод toString(). Правилом хорошего тона считается, когда каждый класс в Java (аналогично в PHP) имеет метод toString(), который возвращает в виде строки описание экземпляра класса. Вызвать его можно либо с помощью команды anInstanceName.toString(); либо через println() или как операнд операции + для строк.