Здавалка
Главная | Обратная связь

Троичный или тернарный условный оператор

Арифметические операторы.

$a = 5; // присвоение

$a = $b + 5; //сложение

$a = $b - 7; //вычитание

$a = $b / 7; //деление

$a = $b * 7; //умножение

$a = 5 % 2; //деление числа по модулю (в данном случае переменной $a присвоится остаток от деления 5 на 2 = единица)

$a = 'текст' . ' еще один текст' //конкатенация - присоединение строк

если начальное выражение вида $a = $a + 5, т.е. в правой стороне выражения только $a и константа (нет других переменных) то такую запись можно сократить

$a += 5; //вместо $a = $a + 5

$a -= 7; //вместо $a = $a - 7

$a *= 3; //вместо $a = $a * 3

$a /= 2; //вместо $a = $a / 2

$a %= 11; //вместо $a = $a % 11

$a .= 'присоедини меня'; //вместо $a = $a . 'присоедини меня'

$a++; //аналог $a = $a + 1;

 

Условные операторы.Условные операторы необходимы для того, чтобы в каком-то случае выполнить только 1 блок кода, а другой блок кода не выполнять. Всего в php 3 вида условных операторов.

 

Оператор if - else (оператор если - в другом случае) состоит из условия и если в данном случае условие истинно (вернет 1 или true) тогда выполнится первый блок кода. Если условие ложно (вернет 0 или false), тогда интерпретатор попробует выполнить следующий блок кода, если и там не задано условия возвращающего ложь.

if($i > 5) //сравниваем переменную $i с числом 5

{

echo 'выведется если $i меньше числа 5';

}

else if($i == 5)

{

echo 'выведется если $i равно числу 5';

}

else

{

echo 'этот блок кода выведется если $i больше 5';

}

Операторы сравнения:

$i > 5; //больше

$i >= 5; //больше или равно

$i < 5; //меньше

$i >= 5; //меньше или равно

$i == 5; //проверка на тождественность

$i != 5; //проверка на неравенство

Чтобы проверить что возвращает условие можно вывести его с помощью команды echo

echo ($k == 5);

Если ничего не выведется значит условие ложно, если выведется единица, значит, условие истинно.

Бывает так что условием является сама переменная

if($k)

Тогда если она == 0 или == '' (кавычки без содержимого) или равна false, то и выражение вернет false. Если в переменной $k есть текст или какое-либо число кроме 0, то выражение вернет true.

Иногда, удобно использовать сразу несколько условий. Для этого используются операторы && (AND) и || (OR)

Если нам необходимо, чтобы следующий блок кода выполнялся если оба выражения истины, то используется оператор "И" - AND или &&

if($k > 5 && $z == 0)

Если нам необходимо, чтобы следующий блок кода выполнялся в случае если только одно из выражений истинно (или оба истинны, но никак не ни одно из них) то используется оператор "ИЛИ" - OR или ||

if($k > 5 || $z == 0 || $z == 500)

 

Оператор switch - case.

switch($variable)

{

case 100: echo 'число 100'; break;

case 'двести': echo 'двести'; break;

default: echo 'что-то другое'; break;

}

 

Троичный или тернарный условный оператор

echo ($k == 5) ? '$k равно 5' : '$k не равно 5';

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

Также можно присваивать значения переменной:

$new = ($old == 0) ? 10 : 0;

Если переменная $old равна нулю, то переменной $new присвоится значение 10, если переменная $old не равна нулю, то переменной $new присвоится значение 0.

 

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

Создать массив можно тремя способами:

1). Создается массив с тремя элементами 1, 2 и 3

$array = array(1, 2, 3);

2). Задается три числа в разные ячейки массива. Ячейки массива называются ключами массива. В данном случае ключи 0, 1 и 213.

$apple[0] = 1;

$apple[1] = 2;

$apple[213] = 3;

3). Если ключ не указан, то берется последний занятый ключ массива и к нему добавляется + 1. Если массив до этого был пуст, то создается элемент с ключом 0. В данном случае ключи массива будут 0, 1, 2.

$apple[] = 1;

$apple[] = 2;

$apple[] = 3;

Чтобы вывести массив на экран используются функции print_r($apple) или var_dump($apple).

Чтобы вывести на экран только элемент массива, используется по-прежнему echo или print:

echo $apple[6]; //вывести на экран элемент массива под номером 6 (ключ - 6)

Ассоциативные массивы.Не обязательно в ключах массива использовать только числа. Можно использовать и имена (каждое значение массива с чем-то ассоциируется) при создании такого массива используется знак следствия => (равно больше).

$apple = array('new' => 'новый', 'old' => 'старый');

тогда и обращение к элементу массива будет по имени:

echo $apple['new'];

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

$apple = array(

array(0, 1),

array(2, 3)

);

echo $apple[1][0];

Обращаемся к массиву $apple и следующему 1 вложенному элементу, т.е. к массиву array(2, 3). А затем обращаемся к нулевому элементу вложенного массива, т.е. к элементу со значением 2. Итог: на экран выведется число 2.

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

В PHP существует 3 вида циклов

Цикл for. Синтаксис цикла for позволяет создать внутри него переменную-счетчик, проверять значение при каждой итерации цикла и изменять значение переменной-счетчика (итерация — это прохождение цикла)

for($i = 0; $i < 5; $i++)

{

//код, который необходимо повторить

}

Цикл for принимает 3 разделенных символом ; выражения. Первое — задаем переменной–счетчику $i значение, второе — задаем условие для продолжения цикла, третье — действие с счетчиком после каждого прохода цикла.

Цикл While.В переводе, while — пока. Т.е. пока выполняется условие, выполнить участок кода указанный в фигурных скобках.

 

while($i < 5)

{

$i++;

}

Только в этом случае нам необходимо вручную задавать изменение счетчика внутри цикла, чтобы он не был бесконечным.

Цикл while можно определить и другим способом, с помощью ключевого слова do. Сначала выполнится участок кода (даже если он не проходит условие, стоящее после while), а затем, если переменная проходит условие, этот участок кода выполняется снова

do

{

echo $i;

$i++;

}while($i < 5)

Цикл foreach.Цикл foreach совершает обход элементов массива. Это значит то, что итераций (повторений) цикла будет столько же, сколько и элементов в массиве.

$fruits = array('apple', 'orange', 'grape');

foreach($fruits as $name)

{

echo $name . '<br>';

}

При каждой итерации, в переменную $password, помещается текущий элемент массива. В переменную $password пойдет значение, например 'apple' и это уже не будет массив, а строковая переменная.

При другой форме записи в переменную $id будет помещен ключ текущего элемента массива:

$fruits = array('apple', 'orange', 'grape');

foreach($fruits as $id => $name)

{

echo 'Номер: ' . $id . ' Имя: ' . $name . '<br>'; //выведет: Номер: 0 Имя: apple и т.д.

}

Функции.Зачем нужны функции в программировании?

В первую очередь для того, чтобы сократить код а значит и упростить дальнейшее его редактирование и доработку. Например у нас есть задача: вывести меню в шапку сайта и такое же меню в футер. Можно было бы написать два раза абсолютно одинаковый код и в шапке и в футере, однако теперь, если мы хотим что-либо исправить в выводе, то нам нужно изменить этот код и наверху и внизу страницы. Когда мы используем какой-либо код всего 2 раза при разработке сайта, то использование функций не выглядит настолько рациональным, ведь мы можем изменить код и вверху и внизу: это не проблема. Однако, бывают случаи, когда нам необходимо один и тот же участок кода производить в разных местах более 2х, более 3х раз и тогда, чем больше раз мы используем этот код, тем у нас все больше поводов заключить его в функцию и в дальнейшем вызывать её там, где нам это необходимо.

Вторая причина: код становится более понятным. Когда код длинный мы видим множество строчек кода без какого-либо разделения (мы конечно можем использовать комментарии, и подписывать различные участки но тогда точно наш код в целом станет ещё длиннее начального). Функции имеют имена. И если имена функций задавать осмысленно, то и разобраться в таком коде будет проще, т.к. мы узнаем по названию о том, что именно выполняет какой-то участок кода даже без его полного осмысления.

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

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

 

<?php

function menu($link, $name)

{

return '<li><a href="'. $link.'">'. $name.'</a></li>';

}

echo menu('yandex.ru', 'Яндекс');

?>

Чтобы можно было вызвать пользовательскую функцию для начала её необходимо определить. Определение функции состоит из ключевого слова function, имени функции (здесь это menu), затем в скобках указываются параметры, которые эта функция принимает (здесь это $link и $name). Если мы хотим, чтобы функция не принимала никаких параметров, то нужно оставить скобки пустыми: (). После открываются фигурные скобки, в которых находится тело функции: в них заключается то, что именно эта функция выполняет.

Вызов функции осуществляется таким образом:

menu('yandex.ru', 'Яндекс');

указывается имя функции, а в скобках указываются параметры, которые необходимо этой функции передать. Иногда функция не должна возвращать никакого значения (например, функция только выводит необходимый текст на экран), но бывает и так что нам нужно получить от функции какой-либо результат её выполнения. Для этого используется ключевое слово return. После слова return функция прекращает свою работу и возвращает значение туда, откуда она была вызвана.

Встроенные функции. Это такие функции, которые уже написаны и содержатся в модулях php. Теперь их можно вызвать используя манул: http://php.net/ru/manual/. Рассмотрим встроенную функцию implode. По описанию она объединяет элементы массива с помощью строки glue.

string implode ( string $glue , array $pieces )

string implode означает что функция возвращает строку;

string $glue это строковая переменная соединитель;

array $pieces это тот массив, элементы которого необходимо объединить в строку.

$new_array = array('mac', 'linux', 'windows');

$string = implode('--', $new_array);

echo $string; //на экран выведется mac--linux--windows

mysql.Mysql — это база данных, работающая с языком запросов SQL (Structured Query Language — «Структурированный язык запросов»). Все базы данных похожи чем-то на таблицы excel. Также имеют колонки, строчки. Для того, чтобы обращаться к базе данных с помощью php, необходимо использовать особые функции для работы с mysql. В php есть встроенный модуль mysql, в нём содержатся все функции для работы с mysql. Следует сказать, что mysql устарел, однако, изучение SQL запросов не представляется возможным без изучения именно mysql функций php. Mysqli - пришедший ему на смену имеет объектно-ориентированный интерфейс, который при первом знакомстве с базой данных мало понятен.

<?

/*для подключения к базе данных используется функция mysql_connect(адрес сервера mysql, имя пользователя, пароль пользователя);*/

mysql_connect('localhost', 'root', '');

 

/*выбираем базу данных*/

mysql_select_db('my_db');

 

/*соединение с базой данных установлено. Теперь можно отправлять запросы помещаем запрос в переменную $query (не обязательно использовать имя именно $query, можно вставлять запросы и без переменной, просто так понятнее)*/

$query = "SELECT * FROM `table`";

/*запрос выполняет выборку по всем столбцам и всех строк из таблицы table. Вставляем запрос в функцию отправляющую запросы в бд. В $result вернутся выбранные строки.*/

$result = mysql_query($query);

/*однако, в переменную $result попадут не преобразованные данные, при попытке вывода которых с помощью команд echo или print_r выведут на экран лишь resource. Это особый вид данных, который преобразовывается как правило с помощью особых функций php. Примером такой функции является mysql_fetch_assoc() - преобразует результат в ассоциативный массив и построчно выводит данный массив в переменную $row. Циклом проходим все строки, пока они не закончатся. $row - это массив! Ключами массива $row становятся имена колонок таблицы*/

while($row = mysql_fetch_assoc($result))

{

print_r($row);

}

?>

Кроме mysql_fetch_assoc() есть еще mysql_fetch_array(), выводящий не ассоциативный массив а обычный массив с ключами 0-n, где n-1 - это количество колонок, забираемых в запросе.

SQL. Теперь разберем сам язык запросов. 90% чаще всего используемых запросов — это запросы выборки или изменения данных таблицы. Есть еще запросы изменяющие структуру таблиц, создающие таблицы, изменяющие кодировку обращения к базе данных. Но они используются реже, в основном можно обойтись и без них. Мы рассмотрим только самые распространенные виды запросов.

Попробовать запросы можно на сайте демонстрации возможностей phpmyadmin во вкладке SQL http://demo.phpmyadmin.net/master-config/, или в phpmyadmin Денвера или в phpmyadmin хостинга.

Если возникли проблемы с кодировкой данных выводимых из базы, то сменить её можно, отправив в самом начале, после подключения к базе запрос:

mysql_query("SET NAMES utf-8");

Вместо utf-8 подставьте ту кодировку, которая вам нужна, на которой выводится вся остальная информация, в какой кодировке работает сервер.

Имена таблиц, колонок лучше указывать в символах косой черты `. Ключевые слова SELECT, FROM лучше писать заглавными буквами - так у вас будет меньше шансов запутаться в синтаксисе. Сами запросы лучше обрамлять двойными кавычками, а данные помещаемые в запрос - переменные или текст в одинарных кавычках.

Рассмотрим основные запросы при работе с базой данных mysql. Всего их 4:

SELECT - выборка данных

INSERT - добавление данных

UPDATE - изменение данных

DELETE - удаление данных

SELECT.Осуществляет выборку данных.

"SELECT `column1`, `column2` FROM `table1`"

`column1`, `column2` - выбираем колонки из таблицы. Эти колонки станут в дальнейшем ключами массива $row. Если мы хотим выбрать просто все колонки, то следует использовать символ *

"SELECT * FROM `table1`"

FROM - ключевое слово ОТКУДА, после него задаем таблицу из которой мы будем доставать строки.

Чтобы указать какие именно строки нам нужно выбрать из базы данных используется ключевое слово WHERE после выбора таблицы.

"SELECT * FROM `table1` WHERE `id` = '1'"

Происходит выборка всех колонок из таблицы table1 ГДЕ id равен единице. Если используется числительное, то его можно писать и без кавычек:

"SELECT * FROM `table1` WHERE `id` = 1"

Но если нам нужно указать текст, то кавычки обязательны:

"SELECT * FROM `table1` WHERE `name` = 'mushrooms'"

Выбираем все колонки из таблицы table1 ГДЕ колонка `name` равна 'mushrooms'.

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

"SELECT * FROM `table1` WHERE `name` = '".$page."'"

Данный запрос не будет работать в phpmyadmin, так как база данных не знает что такое переменные php, вроде $page. Одинарные кавычки опять же нужны, так как в переменной $page находится текст.

Также можно указать не одну колонку для WHERE а несколько, например:

"SELECT * FROM `table1` WHERE `name` = '".$page."' AND `user` = '".$user."'"

AND - означает И, т.е. условие должно быть истинно для обоих колонок. Также можно использовать OR - т.е. условие истинно для одной из колонок.

Для чисел можно использовать обычные операторы сравнения >, >=, <, <=. Не равно в mysql пишется так <>.

Если нам нужно вывести ограниченное число строк удовлетворяющих всем условиям запроса, то используется слово LIMIT:

"SELECT * FROM `table1` WHERE `name` = '".$page."' LIMIT 5"

Означает выбрать все колонки из таблицы table1 где колонка `name` равна $page и взять только первые 5 строк.

Если нужны не первые 5, а скажем строки с 10-ой по 15-ую, то используется два числа:

"SELECT * FROM `table1` WHERE `name` = '".$page."' LIMIT 5, 10"

Первое число - количество, а второе число - с какой строки это количество отсчитать, т.е. 10, 11, 12, 13, 14 - 5 строк.

Для безопасности необходимо экранировать кавычки или приводить вставляемые переменные в запрос к соответствующему типу. Это обязательное условие при работе с mysql. Дело в том, что если мы вставляем данные, пришедшие из $_GET, то пользователь может вставить свой запрос в наш запрос, а это значит что он может получить безграничный доступ к нашей базе данных: забирать любые значения, пароли и т.п., либо удалить все таблицы. Называется это SQL-инъекцией, подробнее прочитать про это можно здесь http://www.securitylab.ru/contest/212083.php и здесь http://habrahabr.ru/post/148701/.

Есть проверенные способы для защиты запросов и фильтрования переменных на наличие вредоносного кода в них.

Если в запрос нужно вставить число, то нужно переменную привести к типу число. Делается это с помощью конструкции (int) идущей перед переменной:

$id = $_GET['id'];

"SELECT * FROM `table1` WHERE `id` = '".(int)$id."'"

теперь мы знаем точно, что в переменной $id нет никаких кавычек, и других данных говорящих нам о том, что это SQL-инъекция.

Можно и так:

$id = (int)$_GET['id'];

"SELECT * FROM `table1` WHERE `id` = '".$id."'"

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

Если нам нужно вставить текст, то используется функция mysql_real_escape_string(), она экранирует двойные и одинарные кавычки, поэтому мы можем быть уверены, что в запрос вставится текст, но безопасный текст.

$page = $_GET['page'];

"SELECT * FROM `table1` WHERE `name` = '".mysql_real_escape_string($page)."'"

Этих двух способов достаточно для предотвращения SQL-инъекции.

Если нам нужно найти не строгое значение колонки, а только вхождение определенной строки, например когда используется поиск по тексту, то используется ключевое слово LIKE с символами %% по краям.

"SELECT * FROM `table1` WHERE `text` LIKE '%". mysql_real_escape_string($text)."%'"

Заметьте, LIKE используется вместо =. Переводится как НАПОДОБИЕ, т.е. найти в тексте какое-то определенное слово и вернуть строки, где это слово в колонке `text` встречается. Символы % означают дословно 'другой текст', т.е. в тексте до искомого слова может быть идти другой текст, как и после искомого слова. Символ % говорит об этом, что нам не важно что до и после искомого слова, важно что оно встречается в тексте.

UPDATE.Для изменения данных таблиц используется UPDATE.

"UPDATE `table1` SET `name` = 'новое имя'"

После UPDATE указывается таблица, в которой мы хотим изменить значение, затем SET (переводится - установить) и указываем какой колонке данной таблицы какое значение присвоить.

Если мы хотим изменить несколько колонок, то указываем их через запятую после SET:

"UPDATE `table1` SET `name` = 'новое имя', `text` = 'новый текст'"

Если мы хотим не всем строкам задать новое значение (как правило нужно задать только определенным строкам значения), то дополняем запрос WHERE.

"UPDATE `table1` SET `name` = 'новое имя', `text` = 'новый текст' WHERE `id` = 2"

Изменить таблицу table1 и установить значения колонкам `name` текст 'новое имя', а для `text` текст 'новый текст' ГДЕ колонка `id` равна 2.

INSERT. Служит для вставки новых строк в таблицу. Похож на UPDATE.

"INSERT INTO `table1` (`name`, `text`) VALUES ('новое имя', 'новый текст')"

INTO используется для указания таблицы, в которую мы будем вставлять новые значения, затем в скобках указываем колонки, для которых будем задавать значения, а после VALUES в скобках указываем в таком же порядке соответствующие значения через запятую.

Вставить В table1 (колонки name и text) ЗНАЧЕНИЯ ('новое имя' и 'новый текст')

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

Например у нас таблица table1 имеет 3 колонки: id, name, text, где id - автоинкримент, тогда, чтобы автоинкримирование сработало, нужно указать в этом поле NULL в запросе, т.е. НОЛЬ, т.е. мы не задаем значение, пусть mysql сам решит какое значение туда вставить с помощью автоинкримента:

"INSERT INTO `table1` VALUES (NULL, 'новое имя', 'новый текст')"

DELETE. Служит для удаления строк в таблице. Похож на SELECT

"DELETE FROM `table1` WHERE `id` > 10"

После FROM указывается таблица из которой мы будем удалять значения, затем условие WHERE где id больше 10.

Дополнительные материалы.Теперь о том, что здесь должно быть, но этого тут нет. Эти материалы помогут разобраться в различных сферах php программирования, которые мы не затронули.

1. Сессии http://www.php.su/articles/?cat=examples&page=070

2. Cookies http://www.php.su/phphttp/?cookies

3. Шифрование в PHP http://i-vd.org.ru/books/php/security.shtml

4. Регулярные выражения

http://on-line-teaching.com/php/regexp.htm

По регулярным выражениям лучше поискать и другие источники. Они используются не только в PHP, но и в JS, .htaccess, т.е. синтаксис их с PHP никак не связан, просто в php есть функции для использования регулярок. Материал в инете очень разрознен.

5. AJAX (материал по JS и PHP) http://codething.ru/ajax.php

6. ООП - объектно-ориентированное программирование.

http://www.php.su/learnphp/phpoo/

http://www.softtime.ru/info/articlephp.php?id_article=108

Также по объектам посмотрите презентацию объекты в группе

http://vk.com/web_coding2013


 


 


 

 





©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.