FAQ с использованием PHP-jQuery и текстовых файлов. Часть 3(заключительная).


Содержание материала:

Простые примеры работы jQuery, Ajax и PHP

1. Создаём простой AJAX запрос в jQuery

Пример всего из двух файлов.

Код HTML (index.html)

Код PHP (файл example.php)

Смотрим как работает!)

2. Действия в процессе ожидания jQuery — Ajax

Сначала коротко о методах.

Метод ajaxSend() выполняет переданный в него код во время отправления AJAX запроса.
Метод ajaxComplete выполняет переданный в него код после завершения выполнения AJAX запроса (при этом неважно произошла ошибка или нет).
Метод ajaxSuccess выполняет переданный в него код, если выполнение AJAX запроса завершается успешно.
Метод ajaxError выполняет переданный в него код, если выполнение AJAX запроса завершается с ошибкой.

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

3. Пример отправки данных из формы и полей ввода jQuery + Ajax + PHP

Код HTML (index.html)

Код PHP (файл example.php)

Смотрим пример работы!

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

Ещё буду дополнять примерами! Если есть пожелания, пишите в комментариях!

Работа с файловой системой

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

Чтение и запись файлов

Открытие и закрытие файлов

Для открытия файлов в PHP определена функция fopen() . Она имеет следующее определение: resource fopen(string $filename, string $mode) . Первый параметр $filename представляет путь к файлу, а второй — режим открытия. В зависимости от цели открытия и типа файла данный параметр может принимать следующие значения:

‘r’ : файл открывается только для чтения. Если файла не существует, возвращает false

‘r+’ : файл открывается только для чтения с возможностью записи. Если файла не существует, возвращает false

‘w’ : файл открывается для записи. Если такой файл уже существует, то он перезаписывается, если нет — то он создается

‘w+’ : файл открывается для записи с возможностью чтения. Если такой файл уже существует, то он перезаписывается, если нет — то он создается

‘a’ : файл открывается для записи. Если такой файл уже существует, то данные записываются в конец файла, а старые данные остаются. Если файл не существует, то он создается

‘a+’ : файл открывается для чтения и записи. Если файл уже существует, то данные дозаписываются в конец файла. Если файла нет, то он создается

Результатом функции fopen будет дескриптор файла. Этот дескриптор используется для операций с файлом и для его закрытия.

После окончания работы файл надо закрыть с помощью функции fclose() , которая принимает в качестве параметра дескриптор файла. Например, откроем и закроем файл:

Конструкция or die(«текст ошибки») позволяет прекратить работу скрипта и вывесте некоторое сообщение об ошибке, если функция fopen не смогла открыть файл.

Чтение файла

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

При каждом вызове fgets() PHP будет помещать указатель в конец считанной строки. Чтобы проследить окончание файла, используется функция feof() , которая возвращает true при завершении файла. И пока не будет достигнут конец файла, мы можем применять функцию fgets().

Чтение файла полностью

Если нам надо прочитать файл полностью, то мы можем облегчить себе жизнь, применив функцию file_get_contents() :

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

Поблочное считывание

Также можно провести поблочное считывание, то есть считывать определенное количество байт из файла с помощью функции fread() :

Функция fread() принимает два параметра: дескриптор считываемого файла и количество считываемых байтов. При считывании блока указатель в файле становится в конец этого блока. И также с помощью функции feof() можно отследить завершение файла.

Запись файла

Для записи файла применяется функция fwrite() , которая записывает в файл строку:

Аналогично работает другая функция fputs() :

Работа с указателем файла

При открытии файла для чтения или записи в режиме ‘w’, указатель в файле помещается в начало. При считывании данных PHP перемещает указатель в файле в конец блока считанных данных. Однако мы также вручную можем управлять указателем в файле и устанавливать его в произвольное место. Для этого надо использовать функцию fseek, которая имеет следующее формальное определение:

Параметр $handle представляет дескриптор файла. Параметр $offset — смещение в байтах относительно начала файла, с которого начнется считывание/запись. Третий необязательный параметр задает способ установки смещения. Он может принимать три значения:

SEEK_SET : значение по умолчанию, устанавливает смещение в offset байт относительно начала файла

SEEK_CUR : устанавливает смещение в offset байт относительно начала текущей позиции в файле

SEEK_END : устанавливает смещение в offset байт от конца файла

В случае удачной установки указателя функция fseek() возвращает 0, а при неудачной установке возвращает -1.

Быстро и кратко, полно и точно — Ruby on Rails, PHP, MySQL, CodeIgniter, JQuery

Основная задача блога — стать стартовой платформой для начинающих разработчиков, здесь не только буду писать свои статьи, но также буду выкладывать полезные ссылки которые помогут разобраться в разных вопросах. Будут затронуты темы: Ruby on Rails, PHP, MySQl, CodeIgniter, JQuery.

вторник, 3 августа 2010 г.

Bash. Построчное чтение файла и разбивка строк с использованием делимитера

В посте постараюсь описать алгоритм построчного чтения текстового файла и разбиение его строк на части.

Допустим мы имеем текстовый файл такой структуры:

.
username1;password1
username2;password2
username3;password3
.

Пример просто для наглядности, пароли хранить так не безопасно.

#!/bin/bash

while read line ; do
IFS=»;»
set — $line
username=$1
password=$2
echo -e «$username->$password\n»
done

Рассмотрим детальнее:
— цикл читает файл построчно, сохраняя текущую строку в переменной line
IFS=»;» выставляем делимитер разбивки (в нашем случае «;»)
set — $line — разбиваем строку, после чего каждая ее часть будет доступна как $1, $2, .

8 комментариев:

я в качестве скриптового языка в системе на питон перешёл, намного имхо лаконичней и понятней чем баш:
———————————-
strings = open(‘bla’).readlines()
for s in strings:
login, passwd = s.string(‘;’)
print login+’->’+passwd
———————————-
разве не прелесть 🙂

понятно что Питон читабельнее 🙂 Даже не спорю. Просто у меня была задача именно на баше написать подобный скрипт

Использование jQuery и PHP для создания Web-страниц на базе Ajax

Библиотеки jQuery упрощают PHP-разработчику решение трудоемких задач

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

По ходу дела программист приобретает опыт работы и со стороны клиента. В какой-то мере он осваивает XHTML или CSS, а быть может, и программирование на JavaScript. В зависимости от вида проектов ему даже может представиться случай поработать с Ajax для придания своим Web-приложениям функциональности в духе Web 2.0. Однако у меня первый опыт работы с Ajax оказался довольно утомительным — приходилось вручную создавать функции и с трудом продираться сквозь процесс создания Ajax-страниц.

Часто используемые аббревиатуры
  • CSS: Cascading Style Sheet
  • HTML: Hypertext Markup Language
  • XHTML: Extensible Hypertext Markup Language
  • XML: Extensible Markup Language

Для некоторых Ajax до сих пор остается тайной за семью печатями. У них не находится времени, терпения или знаний, чтобы как следует овладеть им. Жаль, потому что многим клиентам нравится функциональность в стиле Ajax, которая упрощает работу с Web-приложениями. Прочитав эту статью, вы узнаете достаточно, чтобы стать настоящим профи по Ajax.

Мы покажем, как использовать библиотеку jQuery, чтобы легко добавлять функциональность Ajax в любое РНР-приложение. Мы создадим простое Web-приложение с применением РНР и MySQL — телефонную книгу с именами и номерами телефона. В ней будет все необходимое — средства поиска по именам или номерам телефона, таблица MySQL и т.п. Затем мы добавим jQuery, чтобы можно было искать по именам и номерам телефона в режиме реального времени, в процессе набора текста. Решив эту задачу, вы не только будете хорошо знать основы jQuery, но и разберетесь в некоторых фундаментальных понятиях Ajax.

Что такое Ajax?

Лучший способ описать Ajax — это сравнить его с тем, что вам уже знакомо. Большинство Web-страниц и приложений работает в синхронном режиме. Вы нажимаете на ссылку или кнопку Submit поисковой формы, и запрос передается на сервер, который обрабатывает его и возвращает ответ. Эту модель правильнее всего назвать так: «нажал, подождал, увидел». Этот бесконечный цикл обновления-повторения всем хорошо известен. Иными словами, чтобы отображать на странице постоянно обновляемую информацию, нужно либо ввести какой-то механизм автоматического обновления, либо предложить пользователю нажимать на ссылку.

С Ajax все не так. Первая A в слове Ajax означает асинхронный. Ajax позволяет создавать страницы на любом языке программирования, а затем наполнять разные части этих страниц информацией из базы данных или любого другого централизованного процесса на сервере. Например, у вас есть сайт электронной коммерции, где демонстрируются продаваемые продукты. На странице каждого продукта есть обычные элементы: заголовки, описание товара, фотография, количество товара на складе.

Предположим, нужно держать посетителей в курсе того, сколько единиц товара осталось на складе. Можно добавить функцию Ajax, которая будет запускать отдельную РНР-страницу с запросом MySQL, а затем передавать эту информацию на первоначальную страницу без каких-либо действий со стороны пользователя и без всякой синхронной последовательности событий типа нажал-подождал-увидел.

Топ-пост этого месяца:  Представители Google развеяли мифы о мартовском апдейте

Буква j в слове Ajax означает JavaScript, и это объясняет источник такого поведения. В нем и достоинство данного подхода, и его недостаток. Достоинство потому, что весь код работает на стороне клиента, так что он легко переносится и не влияет на сервер. А недостаток для многих РНР-разработчиков состоит в том, что это другая, непривычная для них среда. Здесь-то и выходят на сцену инструменты, подобные jQuery: они значительно упрощают взаимодействие с Ajax, ускоряя процесс разработки.

А как насчет двух последних букв в названии: а и x? Они означают and XML, хотя XML-часть на самом деле используется не всегда. Многие Ajax-приложения хорошо работают и без XML-кода: они передают просто HTML или даже неформатированный текст. Возможно, точнее было бы расшифровывать x как XMLHttpRequest , так как этот объект используется для извлечения данных в фоновом режиме, то есть без помех для отображения или поведения существующей страницы.

Что такое jQuery?

jQuery— это компактная библиотека JavaScript, созданная Джоном Резигом (John Resig) и опубликованная в интернете в начале 2006 года. Это бесплатное и открытое ПО, распространяемое по двум лицензиям: Массачусетского технологического института (MIT) и GNU General Public License. Она привлекла множество разработчиков во всем мире своей простотой и наглядностью.

Секрет ее популярности в том, что эта простая в применении библиотека упрощает JavaScript для всех (даже для самых закоренелых back-end программистов), позволяя без изнурительной работы добиваться замечательных эффектов. С ее помощью можно создавать наборы элементов Document Object Model (DOM), модифицировать и манипулировать CSS, вводить элементы анимации и работать с Ajax. Вся эта функциональность обеспечивается единственным файлом JavaScript, который можно загрузить с сайта jQuery (см. Ресурсы).

Загрузив jQuery, можно добавить его к любому файлу HTML или РНР, включив простой тег

Допустим, перед вами стоит довольно простая, но нудная задача с большим количеством ручных операций типа добавления двоеточия ( : ) в конце каждой метки формы на сайте. Можно идти напролом, отыскивая каждую метку формы и добавляя в конце строки двоеточие, а можно использовать следующий код jQuery:

Листинг 1. Добавление двоеточий с использованием jQuery

Это простая функция: она дожидается, пока страница будет полностью подготовлена и загружена (для этого служит часть $(document).ready() ), выполняет анонимную функцию, отыскивающую все элементы DOM label , а затем в конце найденного текста добавляет двоеточие. Функция $() позволяет обращаться к элементам DOM по их естественным именам, что делает этот интерфейс идеальным выбором для разработчиков, уже знакомых с DOM.

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

Создание простого приложения: телефонная книга

Теперь, когда основы jQuery прояснились, давайте построим простую телефонную книгу на базе РНР и MySQL. Это приложение состоит из трех частей:

  • таблицы MySQL с именами и номерами телефона
  • файла index.php с формой поиска
  • страницы find.php, которая обращается к таблице базы данных.

Создадим каждый элемент отдельно.

Создание таблицы базы данных

Создание таблицы базы данных в MySQL — пожалуй, самая простая часть. Эта таблица должна содержать самый минимум информации — идентификатор (ключ таблицы), поле имени и поле номера телефона. Два последних поля алфавитно-цифровые, так что можно использовать функцию varchar() . Поле идентификатора создадим как autoincrement primary key . Назовем эту таблицу directory, и для ее создания воспользуемся следующим кодом Structured Query Language (SQL):

Листинг 2. Код SQL для создания таблицы directory

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

Теперь надо заполнить нашу таблицу. Для ввода имен и номеров можно воспользоваться утилитой phpMyAdmin или командной строкой. Можно также использовать следующую последовательность команд SQL:

Листинг 3. Команды SQL для заполнения таблицы

Когда значения введены, проверьте, что список выводится, напечатав select * в командной строке из рабочего каталога или нажав Browse в phpMyAdmin.

Создание файла index.php

Далее, создадим простую домашнюю страницу для нашего приложения. Это файл РНР с именем index.php, но пока он содержит главным образом код HTML. Когда мы создадим файл find.php (на следующем шаге), мы вернемся к этой части и завершим ее.

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

Листинг 4. Файл HTML с формой

Сразу бросаются в глаза две вещи. Во-первых, с формой не связано никаких действий. Это нормально: помните, что данная форма не должна следовать традиционной синхронной схеме «нажал, подождал, увидел». Вместо этого мы добавляем функциональность, которая будет следить за действиями пользователя в поле search_term .

Второе, что вы должны заметить, это элемент DOM search_results — пустой элемент прямо под формой. В нем будут содержаться результаты поиска. Однако прежде чем идти дальше, создадим страницу find.php.

Создание файла find.php

Файл find.php — это место, где собственно и происходит все действие. Он соединяет приложение с базой данных и выполняет запрос к таблице.

В первой части файла find.php находится информация о соединении. Для нашего примера я ввел эту информацию прямо в файл. У большинства из вас она будет содержаться во включенном или запрашиваемом файле или в составе гораздо более крупной среды.

Листинг 5. Создание файла find.php

Из формы index.php будет поступать поисковый термин. Прежде чем вводить это значение в базу данных, над ним нужно произвести некоторую простую обработку. Я использую функции strip_tags() и substr() для удаления из поискового термина всех тегов HTML и сокращения его размера. Такая обработка никогда не помешает — нельзя целиком доверять тому, что вводит пользователь.

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

Теперь составим оператор SQL. Мы хотим извлекать из таблицы любые имена и номера телефона, соответствующие поисковому термину. Последний должен сравниваться методом LIKE как с полем имени, так и с полем номера телефона, после чего выполняется запрос mysql_query() .

Листинг 6. Создание оператора SQL

Результаты запроса можно распечатать. Инициализируем переменную $string , чтобы сохранить результаты, затем используем mysql_num_rows() для проверки наличия в ответе любых строк. Если результаты для поискового термина не получены, $string будет содержать значение «No matches!» Если они есть, будет распечатано каждое имя и номер телефона из множества результатов. В конце процесса вся строка выводится на экран командой echo :

Листинг 7. Распечатка строки командной echo

Конечно, эта РНР-функциональность и сама по себе чрезвычайно полезна, но пока этого не видно. Нужно как-то ввести в этот сценарий сам поисковый термин. Мы сделаем это в следующем разделе.

Добавление jQuery в index.php

Пока все, что у нас есть, это пара безобидных страниц РНР и простая таблица MySQL. С добавлением jQuery это кроткое приложение превратится в современную программу на базе Ajax, которая работает подобно настольному приложению поиска вроде Spotlight в Mac OS X или Google Desktop Search.

Откроем файл index.php и добавим вызов свежезагруженного файла jquery.js.

Затем создадим простую функцию, которая предотвратит типичное поведение поисковой формы. (Для этого используется функция preventDefault() .) Все нажатия кнопки Submit и события key-up (то есть события, которые происходят при нажатии клавиш на клавиатуре) будут переадресовываться к новой функции ajax_search() , которую мы сейчас создадим.

Листинг 8. Создание функции для предотвращения типичного поведения поисковой формы

Теперь, когда все элементы системы на месте, можно ввести запрос и посмотреть, как механизм поиска работает в режиме реального времени, извлекая записи при каждом событии нажатия клавиши. Он работает и при нажатии кнопки Submit. Например, на рисунке 1 в поле поиска введена буква a , и приложение возвратило записи Жанны и Сары Смит, в именах которых содержится эта буква.

Рисунок 1. Ajax-поиск в действии

Заключение

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

$.post() — вывод результата работы скрипта php

мне необходимо чтоб эта функция вернула результат работы скрипта «test.php».

как необходимо прописать функцию, и что будет в в теле функции?

это содержимое «test.php»:

23.03.2011, 18:15

Вывод результата работы функции
Привет! Подскажите пожалуйста. Есть такой код. 11 23.03.2011, 21:00 2 23.03.2011, 22:19 3

Добавлено через 2 минуты
там 2 блок кода(JS) в нем пример с описанием практически каждой строчки кода

23.03.2011, 23:01 [ТС] 4

Добавлено через 2 минуты
там 2 блок кода(JS) в нем пример с описанием практически каждой строчки кода

В результате выполнения, блок #test получит всё содержимое страницы «test.php».

Но у меня ещё вопрос:
1. как выбрать указанный блок на странице, а не все полностью(например только div с , а все остальное оставить нетронутым..)??
2. как получить результат выполнения отдельного куска кода, а не его всего целяком (не помещая этот кусок в отдельный файл..)??

Javascript
23.03.2011, 23:01
23.03.2011, 23:13 5
23.03.2011, 23:49 [ТС] 6
24.03.2011, 02:15 7
24.03.2011, 10:03 [ТС] 8

ну вот например, есть форма для регистрации, нам надо выбрать страну область и город и др., и есть один обработчик который все эти поля проверяет и в результате если правильно — он добавляет в бд запись, а если нет то выдает ошибку!
так вот, если мы таким способом «$.post()», отправим обработчику информацию в тот момент когда выберем страну — он нам должен будет вернуть список областей соответствующих выбранной стране, а в нашем случае он будет проверять на все (не только на страну), т.к. обработчик один для всех полей, и в результате вернет вместе с облатями(в лучшем случае) кучу ошибок, а если мы поставим везде в обработчике if/else, else/if — то когда мы попросим областя, он нам их вернет и ещё нас зарегает.

можно канешно наставить проверок, но ето большой гемор, вдруг у нас заполняемых полей 500шт., а запрос надо сделать только к списку областей соответствующих области! так вот я и говорю, может есть какойто способ выполнить только кусок кода, который только получит страну и вернет область, а остальное что есть — нетронет! или может есть какаято функция, с помощь которой можно прям на странице регистрации написать ajax функцию — котороя будет отправлять sql запрос со страной и получит область?

Как отправить HTML-форму без перезагрузки страницы

Что такое AJAX

При разработке сайтов бывает, что у нас возникает необходимость отправить данные html-формы без перезагрузки страницы в фоновом режиме (с использованием AJAX). В данной статье мы рассмотрим этот вопрос и покажем на примере как реализовать нашу задачу с помощью языков jquery и php. Мы получим скрипт, при выполнении которого, сервер отправляет, а клиент получает данные в формате JSON.

Технология Ajax стала популярной и часто применяется при создании сайтов в WEB 2.0. Многие уже успешные или начинающие web-сайты стремятся создать удобство для своих пользователей, что немаловажно в условиях конкуренции и огромного количества интернет-ресурсов. Кроме того, Ajax-технология помогает увеличить быстродействие вашего сайта. Это происходит благодаря тому, что пользователь не перегружает страницу целиком, когда необходимо обновить только некоторые элементы/части вашего сайта.

Разберемся как без перезагрузки страницы выполнить отправку данных формы при помощи Ajax

Здесь мы создадим демо-проект, который будет включать в себя 3 файла:

index.php — это главная страница, на которой размещена сама форма

ajax.js — это файл javascript, в котором содержится алгоритм ajax для обработки формы

action_ajax_form.php — это серверная часть, которая отвечает за обработку полученных от формы данных и возвращает клиенту ответ в формате JSON

Создайте первый файл под названием index.php с таким содержимым:

Мы подключим библиотеку jQuery и создали базовую HTML-разметку, а также подключили файл ajax.js, далее нам нужно будет создать этот файл.

Обратите внимание, что метод отправки формы у нас POST, задан . Также, после формы мы добавили div c >

Теперь создадим второй файл — ajax.js

В файле ajax.js есть два метода: $(«#btn»).click и sendAjaxForm. Первый метод — это слушатель событий кнопки. То есть, когда мы нажимаем на кнопку «Отправить», слушатель срабатывает и вызывает метод sendAjaxForm.

В метод sendAjaxForm(result_form, ajax_form, url) передаются поля: result_form — это div в который будут рендерится данные, ajax_form — это id формы отправки сообщения и url — это местоположение файла action_ajax_form.php который отвечает за серверную часть (обработка формы).

Создадим последний файл — action_ajax_form.php

action_ajax_form.php — это обработчик формы на стороне сервера. Этот файл отвечает за backend часть нашего мини-приложения. Для примера, мы делаем проверку: Если существуют переменные в POST запросе name и phonenumber, тогда мы формируем массив $result для JSON ответа от сервера. Затем, массив $result мы переводим в JSON объект, чтобы клиент ajax.js смог корректно получить данные в формате JSON.

Выводы

Как вы видите, реализовать AJAX отправку данных формы, без перезагрузки страницы очень просто. Скачать исходный код работы с AJAX, вы можете по ссылке. Файлы загрузите на ваш локальный сервер или хостинг, распакуйте и сложите все файлы в один каталог сервера.

Переменная из PHP в Jquery

У меня в файле php есть переменная $_POST[postid]
при нажатии на кнопку в php файле происходит анимация :

мне нужно эту переменную передать в Jquery файл.

  • Вопрос задан более трёх лет назад
  • 9263 просмотра

ничего не происходит

не работает это
если сделать так :
$(document).ready(function() <
$(«.post-190»).each(function() <
$(«.button-buy»).click(function() <
$(«.post-190 .top-img-product»).animate(,200);
>);
>);
>);

все нормально.
в переменной $_POST[postid]; число 190

JQuery: чтение текстового файла из файловой системы

Я пытаюсь прочитать текстовый файл с помощью jquery, например:

В хром я получаю:

Firefox не показывает ошибки, но код не выполняется (у меня есть точки останова в firebug, и анонимная функция никогда не запускается).

Любая помощь оценивается!

ИЗМЕНИТЬ

  • используйте полный путь к файлу
  • запуск хром с «—allow-доступ к файлам, из файлов»

теперь он работает нормально!

Вы не можете загрузить файл из своей локальной файловой системы, например, вам нужно разместить его на веб-сервере и загрузить его оттуда. На том же сайте, на котором загружен JavaScript.

РЕДАКТИРОВАТЬ: Посмотрите на thread, вы можете запустить chrome с помощью опции —allow-file-access-from-files , которая разрешит доступ к локальным файлам.

укажите полный путь к файлу url

Это нормально работает в firefox по крайней мере.

Проблема, с которой я столкнулась, заключается в том, что я получил объект XML вместо простой текстовой строки. Чтение xml файла с моего локального диска отлично работает (тот же каталог, что и html), поэтому я не понимаю, почему проблема с чтением текстового файла была проблемой.

Я понял, что мне нужно сообщить jquery, чтобы передать строку вместо XML-объекта. Это то, что я сделал, и он, наконец, работал:

FAQ с использованием PHP-jQuery и текстовых файлов. Часть 3(заключительная).

БлогNot. PHP: делаем «мини-БД» на текстовом файле

PHP: делаем «мини-БД» на текстовом файле

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

Прежде всего, определимся, что все файлы будут в кодировке Юникод (utf-8). Использовать в качестве текстового редактора стандартный Блокнот нельзя из-за добавляемых им в начало файла меток BOM, а использовать Notepad++ нужно с осторожностью — на пустом файле сразу скажите Кодировки — Кодировать в UTF-8 (без BOM), затем Синтаксис — PHP, потом уже пишите или вставляйте текст и выполняйте Файл — Сохранить. Лучше всего, конечно, встроенный редактор файл-менеджера Far, в котором Вы нажали комбинацию клавиш Shift+F8 и выбрали кодовую страницу 65001 (UTF-8).

Иначе, из-за лишней и невидимой BOM в начале файла, будете получать вот такую ерунду, ставящую в полный тупик начинающих:

Warning: session_start() [function.session-start]: Cannot send session cache limiter — headers
already sent (output started at . ) in . \function.php on line 2

Определим требования к скрипту. Он должен:

  • состоять из отдельных коротких модулей, чтобы можно было легко читать и модифицировать код;
  • корректно отображаться, например, сразу «понимать» Юникод;
  • не быть чувствительным к настройкам кавычек в PHP и позволять хранить в текстовом файле любые строки, в том числе, со спецсимволами PHP/HTML;
  • разумно фильтровать ввод пользователя, например, избавлять его от лишних разделителей;
  • уметь добавлять, удалять, редактировать и сортировать записи.

В стороне пока оставляем следующие вопросы:

  • надёжную защиту от обращения к формам «со стороны»;
  • защиту от переписывания текстового файла при одновременном обращении к базе нескольких пользователей;
  • авторизацию для доступа к редактированию файла;
  • разбиение вывода базы на «порции» для более удобного редактирования;
  • стили оформления и дизайн проекта.

Формат записи базы определим тоже простейшим — в одной строке текстового файла будут содержаться некое Имя (произвольная строка длиной до 30 символов включительно) и Число (целое значение, занимающие до 6 знакомест). Разделитель записей внутри строки назначим определённой в файле конфигурации константой DIV .

Напишем файлы head.php и foot.php — общие верх и низ всех страниц, подключать их будем оператором include .

Файл head.php
Файл foot.php

Мы включили только минимально необходимые мета-теги — тип документа и кодировку.

Файл config.php будет содержать общие настройки скрипта, пока это только имя файла с данными (предполагается, что он в текущей папке, той же, где и все остальные файлы) и разделитель записей в строке данных. Назначим этим разделителем табуляцию, а защиту от случайного или намеренного ввода пользователем табуляции внутри строк «Имя» и «Число» (например, даже в однострочное поле можно вставить символ табуляции из Буфера Обмена) возложим на функции разбора параметров, которые все разделители в строке сделают пробелами.

Файл config.php

Перейдём к функционалу. Как и любой скрипт, позволяющий пользователю что-то вводить в HTML-формы, наш продукт должен будет фильтровать пользовательский ввод, передаваемый методами GET, POST, и, возможно, через глобальный массив $_SESSION . Как минимум, нужно «критичные» для разметки символы заменить на их «HTML-изображения» стандартной функцией htmlspecialchars, разобраться с настройками «магических кавычек», всё ещё актуальными в PHP версий до 5.4.0 (стандартной функции нет, напишем собственную с именем magic ), удалить в данных пользователя лишние разделители в начале и конце строк, а также между словами (стандартной функции нет, реализуем собственную с именем trimall ).

Чтобы не писать в каждом модуле однотипного кода по обработке параметров, напишем «универсальный» модуль-обработчик параметров params.php , а в конкретных модулях для работы с ним нужно будет определить в массиве с именем $params разрешённые имена получаемых «извне» переменных, например

и подключить сам модуль строкой кода

Всё остальное он сделает сам, в том числе, создаст «пустые» переменные для случаев, если какая-то из разрешённых величин не передана в скрипт.

Файл params.php

Передача данных через массив $_SESSION разрешена однократно, переданные данные сразу удаляются. Это может пригодиться, например, при «возврате» в форму введённых в другом модуле данных.

Хорошо, когда все служебные функции объединены в один модуль, который основные модули подключают через директиву require_once . Мы свой модуль служебных функций назовём function.php и, кроме упомянутых методов trimall и magic , включим туда следующие функции:

  • read() — будет читать текущую базу и возвращать массив записей;
  • write($a) — будет записывать массив записей $a в файл;
  • get_index_by_name ($a,$name) — будет искать по имени $name соответствующую запись и возвращать её номер (с нуля) или значение -1, если запись не найдена. Это пригодится, чтобы отличать добавление новой записи от редактирования существующей.

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

Файл function.php

Обратите внимание, что функция read дополнительно фильтрует массив записей от пустых строк (на всякий случай, вообще-то их не должно возникать), а trimall сначала заменит любую непустую цепочку разделителей на один пробел (вторая preg_replace ), а затем удалит возможные лишние разделители в начале и конце оставшейся строки (первая preg_replace ).

Также есть нюанс с функцией read в смысле совместимости кода. Так как в единственной её строке есть анонимная функция, предполагается использование PHP версии не ниже 5.3. Если надо ниже — замените код на такой, где функция фильтрации именована или совсем не используется, как тут:

Также важно корректное приведение строки в Юникоде к нижнему регистру (см. mb_strtolower в коде). А локалью мы здесь не пользуемся.

Кажется, настало время писать основной файл index.php . Он будет решать следующие задачи:

  • выводить форму для добавления новой записи, которую обрабатывает модуль add.php;
  • рядом с формой добавления выведем дополнительные команды — очистка формы «самовызовом» скрипта без параметров (кнопка здесь не подойдёт, т.к. не передаёт на сервер данных) и ссылку для обращения к модулю сортировки записей по имени sort.php ;
  • получать от других модулей результаты их работы в виде числовой переменной $status и выводить соответствующие сообщения (массив $status_msg ). Значение $status , равное нулю, будет принято по умолчанию, ему соответствует вывод краткой справки о работе программы;
  • если база непуста, показать её записи и обеспечить переход к редактированию или удалению.

Чтобы не перегружать таблицу дополнительными кнопками и ссылками, сделаем щелчок по имени переходом к редактированию записи модулем edit.php , а щелчку по полю «Число» будет соответствовать удаление записи модулем del.php .

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

Файл index.php

Теперь займёмся недостающими модулями. У add.php , кажется, простая задача — получить от index.php переменные $name и $number и записать их в файл. Однако, модуль должен проверить, что ему переданы непустые данные, а также уметь отличать ситуацию, когда введено уже существующее в базе имя от ввода новой записи (см. if ($id>-1) < . >else < . >в коде). В последнем случае запись всегда добавляется в конец, ведь будет модуль сортировки строк по алфавиту.

Также важно, что строка $name , «пропущенная» через обработчик параметров, уже лишена «критичных» для разметки символов вроде ‘, «, , а в массиве $a , прочитанном из файла данных, все строки лежат «как есть», и <>123 не будет найдена, если $name после обработки превратилась <>123 . Поэтому функции поиска записи, названной нами get_index_by_name , передаётся строка, преобразованная «обратно» к первоначальному виду с помощью стандартной функции htmlspecialchars_decode (доступна с PHP 5.1). В том же виде строка возвращается обратно в index.php через массив $_SESSION . Это обеспечит некоторое удобство работы — после ввода новой записи её данные останутся в форме и можно будет внести ещё одну запись, мало отличающуюся по имени («Иванова» после «Иванов»).

Ну а сам возврат из модуля в модуль абсолютно типовой — через стандартную функцию header . Помните, что её можно применять, только если модуль ещё ничего не выводил в браузер.

Файл add.php

Теперь о редактировании, оно будет реализовано в edit.php . Форма редактирования — почти такая же, как форма добавления, мы просто поленились сделать отдельную функцию для вывода формы. Важнее то, что модуль сам будет обработчиком данных, переданных через форму редактирования, а значит, должен отличать ситуацию, когда он только вызван, от той, когда пользователь нажал «Сохранить». Последней задаче служит проверка

определяющая, была ли нажата кнопка и переданы все данные. Вторая ветка —

предназначена для ситуации, когда в массиве $a есть запись, номер которой передан скрипту и она должна быть отредактирована. Номер записи сохраняется в скрытом HTML-поле .

Файл edit.php

Модуль удаления записи del.php будет достаточно простым, всё, что ему понадобится — получить допустимый $id записи (номер элемента в массиве $a ), убрать соответствующий элемент из массива, переписать файл и вернуться на страницу главного модуля.

Файл del.php

Наконец, модуль сортировки sort.php породит новую проблему — как сортировать строки в Юникоде по алфавиту, не различая больших и маленьких букв? «Прямая» сортировка с помощью стандартной функции sort подойдёт едва ли — она считает строчную и прописную букву разными символами. Локаль мы не ставили, тем более, для её установки единой формы записи для всех операционок нет.

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

Применяемое «прямое» сравнение односимвольных строк Юникода, думается, не совсем корректно, но strcmp сравнивает строки побайтово и нам не подойдёт, а вообще-то корректное сравнение любых строк в Юникоде — очень непростая задача. У меня для русского и английского в системе всё сработало, например, после сортировки получались естественные порядки слов, такие как

Файл sort.php

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

В этой же папке создадим пустой (0 байт) файл data.txt (необязательно, если все права настроены).

Файл .htaccess

Можете посмотреть, что получилось, и о найденных проблемах сообщить мне, я написал скрипт очень оперативно, в 2 приёма, и мог что-то не продумать 🙂

15.10.2014, 13:51; рейтинг: 18543

PHP: скрипт оценки на PHP + jQuery + AJAX

По просьбам пользователей, исходные файлы скрипта оценок: demo_stars.zip

Шаг 1 – Построение дизайна HTML + CSS

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

Давайте посмотрим на HTML и CSS кода системы оценок:

Следует отметить, что графики в HTML нет. Она присутствует в CSS коде. Мы используем HTML, только для примера, для создания рабочей среды, чтобы протестировать систему оценок. Давайте посмотрим CSS код:

Этот код CSS служит для нескольких вещей:

  1. Определяет место по умолчанию для каждой пустой звезды
  2. Устанавливает классы для заполненных (активных) звезд и классы для постоянных активных звезд. Далее поймете о чем я.
  3. Определяет стиль контейнера звезд.

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

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

Шаг 2 – Создаем интерактивность в интерфейсе

На данный момент, мы имеем просто набор звезд, которые при наведении в конкретную точку оценивания не реагируют ни на что. Это мы поправим с помощью jQuery.

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

Пользуясь методами prevAll() и NextAll(), получаем предыдущие и последующие звезды в реальном времени при наведении мыши на них. Выше предоставленный код добавляет и удаляет классы при наведении и отведении мыши от звезд, таким образом, подсвечивая их.

Что делает set_votes()?

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

Шаг 3 – Получение данных из сервера

Сейчас мы реализуем выделение текущего рейтинга оценок, а точнее сделаем красными звезды показывающие текущую позицию в рейтинге оценок. Чтобы это удалось нам необходимо получить данные из сервера и обработать их несколькими javascript функциями.

Это javascript код, который пишется в теле документа. Он выполняется сразу: посылает запрос к серверу и получает информацию для каждого из блоков рейтинга оценок.

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

Если внимательно посмотрите на код, то увидите, что мы берем этот объект (он хранится в переменной INFO) и что-то делаем с ним через метод data(). Этот метод позволяет связать произвольные данные с DOM объектом. В этом случае мы храним данные в div блоке каждого контейнера рейтинга оценок. Позже мы можем получить данные к ним таким образом:

После получения данных с сервера, передаем их у функцию set_votes(), о которой уже упоминалось ранее. Ниже код этой функции:

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

7 строка: avg это целое число от 1 до 5, которое используется для заполнения звезд отображающих среднестатистическую оценку.

8 строка: по синтаксису схожа с 7 строкой, только в этом случае, мы заполняем остальные звезды графика.

9 строка: Обновляет информацию в сером блоке под рейтингом оценок, показывает общее количество голосов и более точную оценку конкретного материала.

Шаг 4 – Оцениваем материал

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

Этот код мы начинаем писать из создания некоторых переменных, не только для чистоты кода, но в этом случае, они используются внутри .post. Также в этих переменных, указывается какая звезда и из какого блока рейтинга оценок нажата. Далее, мы определяем данные для отправки на сервер (clicked_data): определяем какой класс стиля у звезды, он содержит порядковый номер звезды и само собой оценку пользователя, также получаем ID блока рейтинга оценок.

В конце обработчика, мы отсылаем данные на сервер. Серверная сторона приложения добавляет голос (оценку), и возвращает информацию в браузер, которая имеет обновленные данные. Эти данные выводятся с помощью функции set_votes().

Шаг 5 – PHP: создаем класс системы оценок

Мы создадим очень простой класс в PHP, который называется “Ratings”. Как вы уже догадались, он будет обрабатывать запросы в нашей системе скрипта оценок. Использование нашего класса будет примерно таким:

Далее мы создадим класс и конструктор:

В этом небольшом куске PHP кода, очень многое происходит, а точнее:

Строка 3: Устанавливаем путь к нашему txt файлу, в котором вы хотите хранить рейтинг оценок. Как уже упоминалось, мы не будем использовать базу данных. Если вам это необходима, вы с легкостью можете переписать код.

Строка 7: Конструктор. Создаем объект и сохраняем идентификатор конкретного блока рейтинга оценок.

Строка 11: Пробуем загрузить текстовый файл. Если файла не существует, это плохо, его необходимо создать и установить права доступа к нему, чтобы PHP мог считывать и записывать в него.

Строка 14: На этом участке получаем данные из файла и с помощью unserialize() мы преобразуем сложный PHP набор в текстовое представление. Также функция serialize(), которая преобразует данные для хранения в файле. Эти функции позволяют хранить данные в текстовом файле в виде массивов.

Шаг 6 – Создаем метод get_ratings()

Этот метод вызывается сам по себе, или от vote() метода. Он находит данные для конкретного блока рейтинга оценок по идентификатору и возвращает на запрашиваемую страницу в JSON формате.

Шаг 7 – Создаем vote() метод

Далее нам необходимо создать метод обработки входящих голосов. Когда метод закончит свою роботу, он вызывает get_ratings(), для отправки обновленных данных обратно в браузер.

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

В заключение о скрипте оценок

Как вы понимаете, это не является 100% решением реализации скрипта оценок. Для расширения этого проекта, мы должны использовать куки, чтобы один человек, голосовал один раз. Для этого достаточно записать в куки IP адрес и при выводе блока оценок сравнивать с текущим IP. Спасибо за ваше внимание и терпение! Если у вас остались вопросы или недопонимание, обращайтесь через форму комментариев.

Топ-пост этого месяца:  Instagram тестирует страницы для местного бизнеса
Добавить комментарий